я должен написать функцию, чтобы удалить элемент из LinkedList (шахты, не то, что в рамках коллекций), так вот моя первая попытка:Возвращение в середине цикла
public void remove(E element) {
Cell<E> cell = sentinel;
int i = 0;
while (i < count) {
if (cell.getElement().equals(element)) {
cell.getPrevious().setNext(cell.getNext());
--count;
return;
}
++i;
cell = cell.getNext();
}
}
Мой вопрос : использует return
, как это хорошо? В более общем плане, когда проверяется условие, и нет никакого смысла, выполнив следующие инструкции, то это имело смысл для меня, чтобы использовать return
:
void func() {
while (condition) {
if (something) {
instructions;
return;
}
more instructions;
}
}
Но так как это было не очень читаемый и все говорят, что читаемость является приоритет в java, мне пришлось подумать о другом подходе. Поэтому я изменил условие и использовал дополнительное логическое значение.
public void remove(E element) {
boolean found = false;
Cell<E> cell = sentinel;
int i = 0;
while (!found && i < count) {
if (cell.getElement().equals(element))
found = true;
else {
++i;
cell = cell.getNext();
}
}
if (found) {
cell.getPrevious().setNext(cell.getNext());
--count;
}
}
Таким образом, нет странно return
и инструкции выполняются только тогда, когда они должны быть. Если я снова столкнусь с этим, я думаю, что мне придется переписать цикл таким образом. Возможно, я совершенно неправ, и первый подход лучше. Что ты думаешь об этом ?
'return' совершен в первом методе – fantaghirocco
Это, прежде всего, на основе мнения. Я предпочитаю возвращаться в середине цикла, так как я думаю, что дополнительные переменные (т. Е. Логические 'found') не учитывают читаемость. Кроме того, обратите внимание, что ваш второй подход не совпадает с вашим первым логическим вы вызываете 'cell = cell.next()' одно дополнительное время. –
_Но так как это было не очень читаемо .. Ну, кто сказал, что это невозможно прочитать? Думаю, это более читаемо, чем второе. – Hackerdarshi