| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Религиозные войны > Цифры в конце названия переменных |
| Автор: mimik 20.3.2011, 13:07 |
| ИМХО это зло, потому что если в конце названия переменных есть цифры, то это повод сделать массив из эти переменных. |
| Автор: mes 20.3.2011, 13:11 | ||||
например :
|
| Автор: mimik 20.3.2011, 13:16 | ||
а почему не
? |
| Автор: alexvs11 20.3.2011, 13:23 | ||||
mimik, наверно будет разница как вызывать ее
или
|
| Автор: mimik 20.3.2011, 13:33 | ||||||
обычно если
то и вызов этой функции будет примерно таким
тогда не проще ли так
? т.е. эти имена очень связаны, а когда они не связаны то названиям переменным надо давать осмысленные имена |
| Автор: mimik 20.3.2011, 14:23 |
понятно что это проще, имелось в виду что a[0], a[1], a[2] ещё где-то используются да это другое, но чем оно хуже? a1, a2, a3 это осмысленные имена? я с C++ не так хорошо знаком _1 это имя? или это параметр по умолчанию? |
| Автор: mes 20.3.2011, 14:48 | ||
это особенность обобщенного программирования, когда неизвестно что именно скрывается за параметрами и известен лишь алгоритм обработки.. например
как видно для make_pair абсолютно не важно чем являются A1, и А2.. главное что надо из них сделать структуру.. может и не хуже, но не подходит для той задачи |
| Автор: alexvs11 20.3.2011, 14:48 |
оно и видно, в с++ запрещена инициализация подобным образом a[0], a[1], a[2] осмысленней? |
| Автор: mes 20.3.2011, 14:56 |
там опечатка, не забывайте что мы ж не в разделе c++ и что собеседники могут быть знакомы с ним лишь поверхностно главное что смысл передан.. Добавлено через 1 минуту и 28 секунд полагается что с массивом осуществляется работа в цикле.. а следовательно "ручного" a[0], a[1], a[2] в таком случае не будет.. |
| Автор: Фантом 20.3.2011, 14:59 |
| Можно - в тех случаях, когда цифры представляют собой часть осмысленного имени и не являются в том или ином смысле номерами. |
| Автор: mes 20.3.2011, 15:02 |
| или вот простой пример - функция swap, по обмену содержимого двух переменных .. как называть ее аргументы ? |
| Автор: миг 20.3.2011, 15:06 | ||||||
это смотря, что твориться внутри функции. Разница в том, что в результате вычислений внутри функции void fun( int a[]) могут измениться данные в массиве a.. в отличии от вызова функции void fun(int A[0],int A[1],int A[2] ) |
| Автор: mes 20.3.2011, 15:16 | ||
вот для наглядности, сами посмотрите что читабельней :
http://liveworkspace.org/code/2910ce13cff023632db0e784392b9f87 |
| Автор: mimik 20.3.2011, 15:17 | ||||||||||||
1. тут сложней сделать ошибку 2. если эти переменные связаны, то да, это тоже плохие именна, но здесь мы никак не сможет оградить программиста имхо, да
гораздо лучше чем
можно пример?
Добавлено через 2 минуты и 3 секунды
ну можно поставить const, или как там |
| Автор: mes 20.3.2011, 15:21 |
(left, right), (lhs, rhs) , (a1,a2), (first,second), (_1, _2) являются в данном случае абсолютно равно осмысленными и зависят от вкуса разботчика. но при количестве аргументов три и более, цифры вытесняют своих конкурентов.. 1. массив, переданный как константное имя, не равнозначен, переданному по значению.. 2. чтоб передать массив его надо "собрать", а это уже лишние строчки.. 3. не всегда переменные с одним именем, являются одного и того же типа.. имеется ввиду корень слова без цифрового/буквенного аффикса.. зачастую, наоборот, легче.. ибо отнимает силы программиста на длинное чтение и восстановление ассоциации.. цифры как ассоциативный ряд намного более наглядны.. |
| Автор: LSD 22.3.2011, 15:35 |
А почему левый-правый, а не верхний-нижний? |
| Автор: mimik 23.3.2011, 12:54 | ||||||||
имхо, не совсем ну, левый операнд и правый операнд в некоторых ЯП можно так
это в c++ так, в некоторых ЯП можно так
вот мне недавно надо было добавить новый функционал в чужой код, так так вместо массива используется ассоциативный ряд, код на 2000 строк и с фнукциями с 40 параметрами, мне сказали что вначале были 3 переменные, потом добавили ещё 2, а потом ещё 35 сейчас, с массивом, этот код занимает где-то 200 строк |
| Автор: LSD 23.3.2011, 13:13 |
Ну первый операнд, второй операнд Так отчего бы их и не пронумеровать? |
| Автор: mimik 23.3.2011, 13:23 | ||||
если есть такая функция
и надо будет добавить параметр, то тут код заставляет подумать о рефакторинге а если
то можно добавить новый парметр, а потом ещё, и ещё потому что такой код изначально не требует напрягаться для написания |
| Автор: LSD 23.3.2011, 15:56 |
| swap() с тремя параметрами? |
| Автор: mes 23.3.2011, 15:59 | ||||||
имелось ввиду, что для человека легче для восприятия :
чем
где вперед заметили и легче выявили не стыковку ? "собрать" это не "создать массив" прежде всего массив создан из будет копий, а это не всегда является желаемым поведением.. одного этого достаточно, чтоб не вспоминать остальные нюансы... ну заставляет.. поняли что все таки нужно 4ре одинаковых параметра.. как их теперь называть ? Добавлено @ 16:00 ну так речь же не о самом swape... Добавлено @ 16:03 П.С. то что названия нужно изначально стараться подбирать наиболее эффективные и удобные, я не спорю.. я лишь говорю, что ситуации, когда именно цифровые аффиксы являются наиболее подходящими, не редки.. и не вижу ни одного повода не использовать их в таких случаях.. Добавлено через 11 минут и 31 секунду кстати если бы я писал swap то с большой вероятностью назвал бы аргументы не (left, right),(lhs,rhs) - которые больше подходит для операторов, а (a,b) потому что на мой взгляд наиболее точно передают семантику и не добавляют лишнего мусора.. но a,b является по сути ничем не отличается от _1 _2.. последние бы не использовал (касается только (c++)), из за их "зарезервированного" смысла, как плейсхолдеры.. |
| Автор: mimik 23.3.2011, 16:11 | ||||
ну да
да, это тоже не айс, но я и не предлагаю такой вариант, возможно там логичней будет массив или структура массив/структура будет занимать примерно столько же памяти сколько и параметры функции, не?
зависит, моно массивом, можно хэшмэп, можно классом |
| Автор: mes 23.3.2011, 16:12 | ||
дело не в памяти, а в смысле, который вкладывается в решение.. |
| Автор: mimik 23.3.2011, 16:33 |
имхо, если в коде используется ассоциативный ряд, это один из поводов для того отрефакторить код, заменить ряд на массив/хэш/структуру/класс имхо, если в каком-то ЯП не принято/оптимально/возможно использовать какой-то подход, это не означает что подход плохой, в Lisp например, всё есть список а в Java насколько я помню, функцию swap вообще написать не возможно, т.к. нельзя передать параметр по ссылке |
| Автор: LSD 23.3.2011, 16:49 |
Это уже простите не swap() а shift() А вообще мысль состоит в том, что иногда (не часто) функция принимает фиксированное количество параметров (потому неудобны массивы) которые семантически различаются только порядком в котором они переданы в функцию. Например sum(a1, a2), нет никакой разницы между первым и вторым аргументом. Потому я не вижу принципиальной разницы между: left/right, first/second, a1/a2. |
| Автор: k0rvin 23.3.2011, 18:34 | ||
нет |
| Автор: mimik 23.3.2011, 20:50 | ||
http://ru.wikipedia.org/wiki/Lisp
я это хотел сказать |
| Автор: k0rvin 23.3.2011, 21:21 | ||||
тогда почему не сказал? и таки не все. 123 123.4 123.4+5i #\a "abc" x |xyz| и др. |
| Автор: mimik 23.3.2011, 21:50 |
это литерал скобки, запятая, плюс это всё выражения, ага, щас |
| Автор: _Y_ 23.3.2011, 23:50 | ||
Отнюдь. Все зависит от языка. Возьмем тот же пример с передачей данных формальным параметрам функции (подпрограммы, метода, и т.п.).
Можно и дальше продолжать. ИМХО если цифры читабельности кода не снижают, недостатком они не являются. Впрочем, сам их использую очень редко. |
| Автор: k0rvin 24.3.2011, 07:10 | ||
конечно |