Соглашения о присвоении имен: Что назвать логическую переменную? [закрытый]

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

С представлением с плавающей точкой, Ваша округленная версия является тем же числом. Так как компьютеры являются двоичными, они хранят числа с плавающей точкой как целое число и затем делят его на питание два, таким образом, 13.95 будет представлен подобным способом 125650429603636838 / (2 ** 53).

Числа двойной точности имеют 53 бита (16 цифр) точности, и регулярные плавания имеют 24 бита (8 цифр) точности. тип с плавающей точкой в Python использует двойную точность для хранения значений.

, Например,

  >>> 125650429603636838/(2**53)
  13.949999999999999

  >>> 234042163/(2**24)
  13.949999988079071

  >>> a=13.946
  >>> print(a)
  13.946
  >>> print("%.2f" % a)
  13.95
  >>> round(a,2)
  13.949999999999999
  >>> print("%.2f" % round(a,2))
  13.95
  >>> print("{0:.2f}".format(a))
  13.95
  >>> print("{0:.2f}".format(round(a,2)))
  13.95
  >>> print("{0:.15f}".format(round(a,2)))
  13.949999999999999

, Если Вы только после двух десятичных разрядов (для отображения значения валюты, например), тогда у Вас есть несколько лучших вариантов:

  1. целые числа Использования и значения хранилища в центах, не долларах и затем делятся на 100 для преобразования в доллары.
  2. Или использование число фиксированной точки как десятичное число .

56
задан Berek Bryan 4 August 2009 в 14:57
поделиться

9 ответов

isBeforeTheLastItem

isInFrontOfTheLastItem

isTowardsTheFrontOfTheList

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

60
ответ дан 24 November 2019 в 20:07
поделиться

Я бы назвал переменную beforeLast .

0
ответ дан 22 September 2019 в 09:39
поделиться

hasFollowingItems? или hasFollowingXXXXs, где XXXX - это любой элемент в вашем списке?

16
ответ дан 24 November 2019 в 20:07
поделиться

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

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

13
ответ дан 24 November 2019 в 20:07
поделиться

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

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

32
ответ дан 24 November 2019 в 20:07
поделиться

isPenultimateOrPrior

isBeforeEnd

4
ответ дан 24 November 2019 в 20:07
поделиться

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

2
ответ дан 24 November 2019 в 20:07
поделиться

Как насчет:

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

Хотя я думаю, что даже если вы не должны иметь привычки нарушать «правила», иногда лучший способ чего-то добиться - это сделать исключение из (Руководство по полному кодированию), и в вашем случае назовите переменную isNotLast

2
ответ дан 24 November 2019 в 20:07
поделиться

Две проблемы, о которых стоит подумать

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

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

0
ответ дан 24 November 2019 в 20:07
поделиться
Другие вопросы по тегам:

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