Я программировал то и дело всю свою жизнь. Я в основном писал Perl, но также немного писал на Java, PHP, C, C ++. Я даже попробовал Emacs Lisp и время от времени делал сценарии оболочки. Однако на самом деле я никогда не привлекал эту тему для получения каких-либо знаний - другие вещи были для меня более важными. Я не считаю себя хорошо владеющим каким-либо языком, кроме Perl, а теперь еще и Haskell, курс по которому я сейчас изучаю.
В последнее время я думал о своем стиле программирования. Не стиль реального кода; Будучи студентом CS, я делаю проекты только для развлечения или для учебы, что позволяет мне почти всегда писать красивый, на мой взгляд, код. Меня особенно беспокоит один вопрос. Это довольно любопытная вещь, но все же хотелось бы услышать другие мнения.
Вот в чем дело: я обнаружил, что трачу много времени на то, чтобы присвоить своим функциям и переменным наиболее понятные имена, которые я только могу придумать. Иногда эта задача может быть очень утомительной, даже если не принимать во внимание сложность поиска имени переменной, которое передает значение фрагмента кода. Например, прямо сейчас я делаю функцию, которая выглядит так.
Это код Haskell, но смысл должен быть довольно ясным. (Это точное значение не так важно, поэтому, если хотите, просто пропустите код и читайте дальше.)
-- return the row with least number of Nothing values
bestRow :: [[Maybe Int]] -> Int -> Maybe (Int,Int)
bestRow [] _ = Nothing
bestRow (row:rows) thisIndex
| nextRow == Nothing && thisFilled > 8 = Nothing
| nextRow == Nothing = Just (thisIndex,thisFilled)
| thisFilled >= nextFilled = Just (thisIndex,thisFilled)
| thisFilled < nextFilled = nextRow
where thisFilled = length $ filter (/= Nothing) row
nextRow = bestRow rows (thisIndex + 1)
(nextIndex,nextFilled) = fromMaybe (-1,-1) nextRow
Я не мог определиться с именами переменных. Функция выполнила свою задачу хорошо, но это было не так ясно, как могло бы быть. Выбрав решение, я потратил 15 минут на присвоение имен и переименование переменных. Следует ли мне использовать curIndex, nextIndex || index, nextIndex || ind, indN и т. д.? Через 15 минут после того, как я решил, что все готово, я понял, что эта функция в конце концов не нужна: я нашел гораздо лучшее решение своей проблемы. БУМ Я потерял много времени, просто чистя код, который никому не нужен, и тем более мне. По крайней мере, так казалось.
Это то, что случалось со мной не раз, и это меня очень расстраивает, в основном потому, что заставляет меня чувствовать себя немым. Что вы думаете по этому поводу? Это что-то, что вы испытали, что-то не так с моим поведением или просто что-то неизбежное?
Существуют ли «идеальные» имена переменных, или это «нормально», если они хотя бы не запутывают ваш код?
Спасибо,
Стефан Кангас