Соглашения об именах: как назвать логическую переменную?

Мне нужно хорошее имя переменной для логического значения, которое возвращает false, когда объект является последним в списке.

Единственное приличное название, которое я могу придумать, это «inFront», но я не думаю, что оно достаточно описательно.

Другой выбор будет «isNotLast». Однако это не очень хорошая практика (Code Complete, стр. 269, Используйте положительные логические имена переменных).

Я знаю, что могу изменить определение переменной. Таким образом, true возвращается, когда объект является последним и вызывает переменную isLast, однако было бы проще решить эту задачу, если бы у меня было первое объяснение.


person Berek Bryan    schedule 04.08.2009    source источник
comment
Как насчет того, чтобы опубликовать часть кода? переменным нужен контекст   -  person fabrizioM    schedule 04.08.2009
comment
Если вы меняете имя, вы лечите симптом. Коренной причиной этой проблемы является негативная логика.   -  person starblue    schedule 04.08.2009
comment
Как насчет hasPredecessor/hasSuccessor, чтобы указать, есть ли какие-либо элементы, которые предшествуют/следуют за текущим элементом? если (item.hasSuccessor) {бла-бла-бла}   -  person    schedule 16.05.2012
comment
Мы не можем назвать это bool?   -  person Ben Racicot    schedule 06.05.2015


Ответы (9)


isBeforeTheLastItem

isInFrontOfTheLastItem

isTowardsTheFrontOfTheList

Может быть, слишком многословно, но они могут помочь вам с идеями.

person Bela    schedule 04.08.2009
comment
я думаю, что я продан на 'isBeforeLast'... да - person Berek Bryan; 04.08.2009
comment
Нельзя ли isBeforeLast заменить на !isLast? - person Joe D; 24.08.2010
comment
Если могут быть элементы после Last, то почему он называется Last? - person Joe D; 06.01.2011
comment
Поправьте меня, если я ошибаюсь, но не следует ли избегать использования артиклей в именовании переменных? - person Gurgadurgen; 20.06.2014
comment
что подходит для display=true, означающего показать какое-то значение, и display = false, означающего не показывать значение. isDisplay звучит странно для меня! - person Thunder; 09.03.2015
comment
@Гром – shouldDisplay - person nickiaconis; 16.06.2015
comment
вероятно, это не очень хорошая идея, но просто для фанка вы можете использовать isPenultimate, поскольку preultimate означает 2-й до последнего. - person jxramos; 20.06.2015
comment
Как во множественном числе? Должно ли оно начинаться с are? Например areAnimalsAllowed? А в случае владения? Должно ли оно начинаться с has/have? Например hasAnimals? - person dpelisek; 05.08.2015
comment
@Thunder такие неоднозначные примеры просто нужно сделать более подробными. display = false или isDisplay=false не демонстрируют намерения. Но isDisplayed=false или shouldDisplay=false или isMeantForDisplay=false яснее. @dpelisek я думаю, вы правы, что важной частью является наличие некоторого глагола состояния бытия. это не обязательно. - person maurice; 23.08.2016
comment
Я думаю, что префикс - лучший маркер для логического значения. Всякий раз, когда имя во множественном числе, я использую это потому, что один маркер для меня важнее, чем правильная грамматика. Иногда, даже когда заключительные слова плохо связаны, они могут лучше объяснить суть. isFilterApply для меня понятнее, чем applyFilter - person Igor Yudnikov; 17.01.2018
comment
Я использовал смесь префиксов для решения проблемы, которую представляет @maurice. Они состоят из коротких слов, чтобы отличить логические значения (или функции, возвращающие логические значения) от других переменных. Эти префиксы имеют форму is, can, has, was; но, конечно, не ограничиваются ими. Пример(ы): isVisible, hasRecords, wasDrawnToScreen, canAccessPage. В конечном счете, обеспечение соблюдения является борьбой, поскольку эти правила выбирают авторы, поскольку цель состоит в том, чтобы обеспечить ясность и удобочитаемость, что часто является субъективным. - person vol7ron; 02.09.2019

Я бы назвал его IsLast и изменил функциональность. Если это не вариант, я бы оставил имя IsNotLast.

Я согласен с Code Complete (используйте положительные логические имена переменных), я также считаю, что правила созданы для того, чтобы их нарушать. Суть в том, чтобы ломать их только тогда, когда это абсолютно необходимо. В этом случае ни одно из альтернативных имен не является столь очевидным, как имя, которое «нарушает» правило. Так что это один из тех случаев, когда можно нарушить правило.

person Jeff Siver    schedule 04.08.2009
comment
чтобы сделать его более наглядным: if (isLast) {…} …или если его нужно инвертировать (мой предпочтительный способ сохранить положительное имя) if (!isLast) {…} - person Breaker222; 21.06.2018

имеет следующие элементы? или hasFollowingXXXXs, где XXXX — это элемент в вашем списке?

person marklam    schedule 04.08.2009
comment
Я думал в этом направлении. hasNext может работать. - person Patrick McElhaney; 04.08.2009

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

Поскольку фактическое условие, которое переключает логическое значение, на самом деле является «последним». Я бы сказал, что переключение логики и присвоение ей имени «IsLastItem» или подобное было бы более предпочтительным методом.

person Mitchel Sellers    schedule 04.08.2009
comment
+1. Если я правильно помню, это также является духом этого раздела в Code Complete. - person Austin Salonen; 04.08.2009

isPenultimateOrPrior

isBeforeEnd

person Greg    schedule 04.08.2009

Haskell использует init для ссылки на все элементы списка, кроме последнего (в основном, обратное tail); будет ли работать isInInit или это слишком непрозрачно?

person Meredith L. Patterson    schedule 04.08.2009
comment
Слишком непрозрачно. Любой, кто не знает Haskell, будет просто сбит с толку. - person Roy Leban; 01.02.2012
comment
Matlab и octave используют end для обозначения последнего элемента - person wander95; 28.06.2017

Как насчет:

 hasSiblings
 or isFollowedBySiblings (or isFolloedByItems, or isFollowedByOtherItems etc.)
 or moreItems

Хотя я думаю, что хотя вы не должны иметь привычку нарушать «правила», иногда лучший способ добиться чего-то может состоять в том, чтобы сделать исключение из правила (рекомендации Code Complete) и, в вашем случае, назвать переменную < strong>непоследний

person Mike Dinescu    schedule 04.08.2009
comment
Родной брат — это то, что имеет общего родителя с другим братом или сестрой. В плоском списке нет родителей. - person John Topley; 04.08.2009
comment
@John Topley: Да, я полагаю, вы правы, но вы можете возразить, что все элементы списка являются братьями и сестрами, а их родителем является сам список. Я думаю, что isFollowedBySiblings можно переименовать во что-то вроде isFollowedByItems, byOtherItems или byMoreItems. или что-то другое. Я все еще считаю, что isNotLast — лучшее имя, если только он не может изменить значение флага на противоположное, а затем назвать его: isLast (вау… это было долго :) - person Mike Dinescu; 04.08.2009
comment
похоже, что stackoverflow не рекомендует редактировать сообщения для опечаток, поскольку редактирование должно состоять из 6 символов или более? - person ahong; 19.12.2018

Простое семантическое имя будет last. Это позволит коду всегда иметь положительный код, например:

if (item.last)
    ...

do {
   ...
} until (item.last);
person Wil Moore III    schedule 13.06.2012

Два вопроса для размышления

  1. Какова область действия переменной (другими словами: вы говорите о локальной переменной или о поле?)? Локальная переменная имеет более узкую область действия по сравнению с полем. В частности, если переменная используется внутри относительно короткого метода, меня не слишком заботит ее имя. Когда область действия велика, именование важнее.

  2. Я думаю, что в том, как вы обращаетесь с этой переменной, есть неотъемлемый конфликт. С одной стороны, вы говорите «false, когда объект является последним в списке», а с другой стороны, вы также хотите назвать его «inFront». Объект, который (не)последний в списке, не кажется мне (не)передним. Это я бы пошел с isLast.

person Itay Maman    schedule 04.08.2009