Рекомендуется ли использование однобуквенных переменных в Java? В фрагментах кода или учебниках вы часто их видите. Я не могу себе представить, что их рекомендуется поощрять, потому что это делает код относительно трудным для чтения, и я никогда не видел, чтобы они использовались в других языках программирования!
java
coding-standards
variables
Уильям Эдвардс
источник
источник
Ответы:
Правильно назвать вещи сложно. Очень тяжело. Если вы посмотрите на это с другой стороны, вы также можете принять это к значению, что правильно названные вещи важны. (В противном случае, почему бы вы потратили усилия, назвав его?)
Но иногда имена вещей просто не важны. Вот почему у нас есть такие вещи, как, например, анонимные функции («лямбды»): потому что иногда это просто не стоит называть вещи.
Существует множество примеров, когда подходят имена из одной буквы (или очень короткие):
i
,j
,k
,l
Для индексов циклаk
иv
для ключа и значения в картеn
за номер (например, вMath.abs(n)
)a
,b
,c
Для объектов произвольной (например , вmax(a, b)
)e
для элемента в общемfor each
циклеf
для функции в функции высшего порядкаp
для функции предиката в фильтреT
,T1
,T2
, ... для переменных типаE
для переменных типа, представляющих тип элемента коллекцииR
для переменной типа, представляющей тип результата функцииex
за исключением вcatch
пунктеop
для операции на карте или в сложенном видеs
для указания множественного числа, то есть набора (например,ns
для набора чиселxs
иys
для двух произвольных наборов общих объектов)Они очень распространены почти во всех языках, которые я знаю (и, вероятно, также в тех, которые я не знаю). Haskell, F #, ML, Ruby, Python, Perl, PHP, C #, Java, Scala, Groovy, Boo, Nemerle, D, Go, C ++, C, вы называете это.
источник
k
иl
индексов цикла, это слишком далеко (вы не должны иметь , что много вложенных циклов , чтобы начать с; извлечение их функции) . Лично я никогда не использую более одной 1-буквенной переменной для каждой функции, но я стреляю по 0.l
илиlen
используется для длины иarr
для массива (например:)for(var i=0; l=arr.length; i<l; i++)
. Кроме того,fn
может использоваться вместоf
, когда вы ссылаетесь на функцию.Если ваш цикл ничего не делает, но использует переменную для подсчета
тогда да, это лучшее имя, которое вы можете использовать. Все, что дольше, не может сделать семантику более очевидной, но на чтение уходит гораздо больше времени.
Если переменная используется внутри цикла, полезное имя может быть полезным.
Если ваша переменная используется в методе, ее имя должно быть длиннее; если он используется в масштабах всего класса, его имя должно быть самоочевидным, иначе это почти наверняка уменьшит ясность вашего кода.
Короче говоря, чем больше область действия переменной, тем длиннее должно быть ее имя.
источник
index
Например, я бы использовал переменную с именем при итерации по массиву.i
это правильное слово с точно определенным значением, а именно «индекс, о котором вам не нужно слишком беспокоиться». Но я думаю, что это вопрос знакомства. Если вы много читаете на Haskell, вы привыкнете читатьm
как монаду ,f
как функтор ,x
как некоторый объект ,xs
как списокx
s и так далее.i
это «лучшее имя, которое вы можете использовать» для цикла, который использует переменную только для подсчета. В этом случае я бы предпочелcount
использовать имя переменной: понятно.for (int count = 0; count < 10; count++)
илиwhile (count--)
.Читая код в ответе Килиана, я не думаю, что «есть цикл, и есть переменная, и она имеет тип int, и у нее есть имя, и имя i, и оно инициализируется 0,. .. ". Я просто думаю «петля ...», где три точки обозначают неважные детали, о которых я даже не думаю. По моему мнению программиста, эта переменная на самом деле не существует, это просто артефакт, который я должен напечатать, например, for (;;) {}, который делает ее цикличной.
Поскольку эта переменная даже не существует в моей голове, почему я должен дать ей имя, помимо того, что абсолютно необходимо?
источник
i
, но_
для явно бессмысленной переменной. Но не все знакомы с Прологом, и это, вероятно, привлечет больше внимания, чем устранит.for (...)
заголовке._
является легальным идентификатором, как и любой другой, было недавнее изменение, согласно которому неиспользуемые локальные переменные с именами_
(или начинающиеся с_
) не генерируют предупреждение «неиспользуемая локальная переменная», хотя Ruby обычно предупреждает о них.Если вы ссылаетесь на буквы i, j, k как на индексы внутри цикла, это обычная практика в Java и других языках программирования. Хотя там, вероятно, лучше использовать для каждого цикла стиля, такого как
вместо того
В Java этот стиль зацикливания появился только недавно. Это может быть причиной того, что вы заметили это больше для Java, так как зацикливание на индексах раньше было наиболее распространенным способом зацикливания над массивом или списком.
Есть несколько других случаев, когда отдельные буквы могут быть подходящими, например, при реализации математической функции, где отдельные буквы, такие как n, x или y, уже могут быть общими. Но в целом, нет, назовите ваши переменные как-то значащими.
источник