Возврат булевской переменной вместо того, чтобы объявить пустой тип в Java?

Там какие-либо жесткие правила расценивают булевскую переменную возврата в сигнатуре метода для указания на успешную операцию в противоположность объявлению пусто? Я нахожу, что для более критических операций в моем вызывающем методе хочу знать, завершилась ли операция, таким образом, я могу зарегистрировать любые проблемы. Действительно ли это - "несоответствующее" использование булевской переменной?

14
задан 28 January 2010 в 16:22
поделиться

9 ответов

Обычно я использую исключение , чтобы сигнал, когда что-то пошло не так.

Вместо того, чтобы возвращаться false , вы можете бросить AN исключение с подробным сообщением о том, что была проблема.

Возвращение FALSE не дает вам много информации о проблеме.

Затем, вместо проверки на FALSE возвращаемое значение, просто поставьте метод вызова в попробуйте / CALL , если вы ожидаете, что метод может легко отказаться Отказ

Многие люди будут жаловаться, что этот метод медленнее. Но преимущества, которые вы получаете сильно перевешивают замедление. Кроме того, если вы используете скорость Java, не должна быть проблемой # 1.

22
ответ дан 1 December 2019 в 07:12
поделиться

для возврата успеха вообще то, что Вы видите:

  • Вернуть пустот Boolean
  • , но бросить исключение на ошибку
  • Вернуть код состояния (менее распространенный в Java).

Не удается видеть ничего плохого в возвращении булева для успеха, если вам не понадобится информация о поведении исключений.

1
ответ дан 1 December 2019 в 07:12
поделиться

Делайте это только в тех сценариях, где ясно, что что-то имеет булевую развязку. Например IsValidCustomer() или что-то в этом роде.

Для всех других вещей, где вы думаете вы могли бы представить это, это, вероятно, означает, что вы имеете дело с каким-то Исключением , и вы действительно не хотите обернуть это простым булевым true/false, потому что у вас может быть множество вкусов (различные исключения) и причин, почему что-то идет не так, о которых вы хотели бы знать.

Так что либо дайте исключению взлететь по стеку, либо поймайте его и превратите в пользовательское исключение, либо запишите его в журнал, или что угодно.

4
ответ дан 1 December 2019 в 07:12
поделиться

ScrolltoroWatindexpath должен работать.

В ViewWillAppear: , попробуйте следующее:

[theTableView reloadData];    
NSIndexPath* ip = [NSIndexPath indexPathForRow:rowNumberHere inSection:sectionNumberHere];
[theTableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionTop animated:NO];

Rownumbere - это номер строки в источнике данных, который вы хотите прокрутить.

ATScrollPosition - это просто одно из значений в UiableViewscrollPosition enum, которое может определить, где на экране номер строки вы хотите. Однако, в зависимости от количества строк, и какой ряд вы прокручиваете, это может не иметь никакого значения.

Надевание ReloadData: позволяет избежать исключения, если данные не загружены в ViewWillAppear: . Если вы поставите ScrolltoroWatindexpath в в ViewDiDiDiDAppear: , вам не понадобится RELOODDATA: , но вы увидите, что таблица прыгает немного, что вы говорите, вы не хочу.

Редактировать: @Theory, попробуйте изменить свой код следующим образом ...

[tableView reloadData];
int lastRowNumber = [tableView numberOfRowsInSection:0] - 1;
NSIndexPath* ip = [NSIndexPath indexPathForRow:lastRowNumber inSection:0];
[tableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionTop animated:NO];

Пожалуйста, обратите внимание Numberofrowsinsion Возвращает количество строк, а не последний номер строки (который является подсчетом строки - 1).

-121--1468201-

Используйте логические значения для обозначения неисполнительных результатов отказа. Примером будет функция поиска. Номинальный провал будет не найден . Общаясь, что результат с исключениями является громоздким. Сохранить исключения для исключительных случаев; Разница между не найден и не может поискать .

2
ответ дан 1 December 2019 в 07:12
поделиться

Я обычно считаю, что бросать исключение в случае неудачи гораздо лучше, чем возвращать булевую, потому что обычно меня не волнует, если процесс удался - меня волнует только, если он не удался. Используя исключение, я могу предоставить любой объем информации о том, почему процесс на самом деле завершился неудачей.

Если исключения кажутся неприятными, вы можете вернуть пользовательский объект Status, который содержит булев и сообщение о статусе (что-то вроде "Added 6 new Foobars!" или "Could not add Foobars because the Foobin is full!"), хотя это, конечно, более сложное решение.

6
ответ дан 1 December 2019 в 07:12
поделиться

Это подходящая парадигма, но если вы хотите заставить вызывающего абонента обработать случай, в котором операция не завершена успешно, вам может потребоваться выдать проверенное исключение.

Однако это образец происходит в основных библиотеках Java. В качестве примера см. File.delete () .

1
ответ дан 1 December 2019 в 07:12
поделиться

На практике, я считаю, что бросать Исключение - это лучшее, что можно сделать, когда неудача означает, что нам нужно прервать процесс. Например, если вы пытаетесь обработать заказ - выставить счет клиенту, организовать доставку, заплатить налог с продаж и т.д. - если вы не можете найти запись о заказе, то, вероятно, нет смысла делать всю остальную работу. Ты просто хочешь выбраться оттуда. Исключения позволяют вам сделать это легко. Просто поймать в нижней части блока, отобразить или зарегистрировать ошибку, и выйти.

С другой стороны, если "ошибка" означает, что моя программа идет другим потоком, возврат булева имеет больше смысла. Например, если я ищу конкретного клиента, и если он существует, я обновляю его запись, и если он не создает новую запись клиента, то возврат булева имеет большой смысл, и в вызывающем тесте это имеет смысл, и когда правда следует по одному пути, а когда ложь - по другому.

На самом деле это два очень разных значения слова "ошибка", и они требуют разной обработки. Вполне возможно, что одна и та же функция может делать и то, и другое. Например, при найденном возврате true, при не найденном возврате false, при ошибке ввода/вывода при попытке прочитать throw a exception.

1
ответ дан 1 December 2019 в 07:12
поделиться

Вроде бы нормально, но дьявол лежит в деталях. ;-)

Выбрасывание исключения - основная альтернатива, с плюсами и минусами.

Я думаю, что вы могли бы получить больше информации, предоставив точные образцы кодирования...

0
ответ дан 1 December 2019 в 07:12
поделиться

Если есть неожиданный результат, выбросить исключение. Если вы просто хотите, чтобы функция сообщала вам «сделал ли я X», тогда вернуть логическое значение.

1
ответ дан 1 December 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: