Чи є привід для коротких імен змінних?


140

Це стало великим розладом із кодовою базою, над якою я зараз працюю; багато наших імен змінних є короткими та неописними. Я єдиний розробник, що залишився в проекті, і немає документації щодо того, що більшість з них робить, тому мені доводиться витрачати додатковий час на пошук того, що вони представляють.

Наприклад, я читав якийсь код, який оновлює визначення оптичної поверхні. Змінні, встановлені на початку, були наступними:

double dR, dCV, dK, dDin, dDout, dRin, dRout
dR = Convert.ToDouble(_tblAsphere.Rows[0].ItemArray.GetValue(1));
dCV = convert.ToDouble(_tblAsphere.Rows[1].ItemArray.GetValue(1));
... and so on

Можливо, це лише я, але він нічого не сказав мені про те, що вони представляли, що ускладнило розуміння коду далі. Все, що я знав, це те, що це змінна, десь розібрана конкретна рядок із певної таблиці. Після деяких пошуків я дізнався, що вони означають:

dR = radius
dCV = curvature
dK = conic constant
dDin = inner aperture
dDout = outer aperture
dRin = inner radius
dRout = outer radius

Я перейменував їх по суті на те, що у мене є. Це подовжує деякі лінії, але я відчуваю, що це справедлива торгівля. Однак ця схема імен використовується в багатьох кодах. Я не впевнений, чи це артефакт від розробників, які дізналися, працюючи зі старими системами, чи є в цьому глибша причина. Чи є вагомі підстави називати змінні таким чином, чи я виправдовуюсь оновленням їх до більш описових імен, коли я стикаюся з ними?


98
Мені здається, що в цьому конкретному випадку це імена змінних, скопійовані безпосередньо з формули математики з великої руки.
Дейв Най

1
Єдиним приводом, який я прийняв би, був би "Мій одноліток сказав, що це добре після перегляду коду"
gnat

35
Якщо ви не можете зрозуміти математичний код через короткі імена змінних, пам’ятайте, що це може бути тому, що ви не розумієте математику, а не тому, що імена занадто короткі. Зміна математичних виразів, яких ви не розумієте, не є надійним процесом. Після того, як ви зрозумієте математику, довжина імен змінних не має значення. Зробіть іншим послугу і залиште цитату (у коментарі) якийсь відповідний опис математики, хоча, якщо вам довелося це вивчити!
Рекс Керр

3
Будь-ідентифікатор , який названий в честь Donkey Kong затверджений: dK = conic constant.
Томас Едінг

8
І навпаки, можна запитати, чи незнання поля домену виправдовує ігнорування його умов. Зрештою, це залежить від контексту.
Даніель К. Собрал

Відповіді:


234

Здається, що ці назви змінних засновані на абревіатурах, які ви очікуєте знайти в підручнику з фізики, працюючи з різними проблемами оптики. Це одна з ситуацій, коли короткі імена змінних часто є кращими, ніж довші імена змінних. Якщо у вас є фізики (або люди, які звикли опрацьовувати рівняння вручну), які звикли використовувати загальні абревіатури, такі як Rin, Rout, і т. Д., Код буде набагато зрозумілішим із цими абревіатурами, ніж з більш довгими назвами змінних. Це також значно полегшує порівняння формул з паперів та підручників з кодом, щоб переконатися, що код насправді робить обчислення належним чином.

Кожен, хто знайомий з оптикою, негайно розпізнає щось на зразок Ріна як внутрішній радіус (у фізичному документі цей inвигляд буде відображатися як підпис), Rout як зовнішній радіус тощо. Хоча вони майже напевно зможуть подумки щось перекласти як innerRadiusі більш звичну номенклатуру, це зробило б код менш зрозумілим для цієї людини. Складніше було б помітити випадки, коли знайома формула була закодована неправильно, і це ускладнить переклад рівнянь у коді до та з рівнянь, які вони знайдуть у статті чи підручнику.

Якщо ви єдина людина, яка коли-небудь переглядає цей код, вам ніколи не потрібно перекладати між кодом і стандартним рівнянням оптики, і навряд чи фізику коли-небудь потрібно буде шукати код у майбутньому, можливо, це і є має сенс рефактор, оскільки користь від скорочень більше не перевершує вартість. Якби це була нова розробка, однак, майже напевно було б сенс використовувати ті самі скорочення в коді, які ви знайдете в літературі.


17
А якщо немає персоналу фізиків чи математиків? Код по суті був залишений мені. Це значною мірою недокументовано. Було б більш важко читати описові імена?
KChaloux

127
+1 Нерозумно очікувати, що програміст зрозуміє домен, над яким він працює. З іншого боку, в математичних роботах змінні зазвичай визначаються в зручному місці. У такому коді я б очікував помітного коментаря, що показує довгу форму.
Карл Білефельдт

15
+1: Те, що ви в основному говорите, - це те, що програміст, який розуміє домен, над яким вони працюють, зрозуміє імена змінних. Це буде те саме в багатьох проектах, навіть із довшими назвами змінних. напр. змінна назва columnу військовій стратегічній грі, швидше за все, означає щось інше, ніж це було б у графічному програмному забезпеченні.
Стівен Еверс

23
У медичному програмуванні ви часто зустрічаєте терміни, що зберігаються у сфері програмування. Наприклад, з офтальмології ви побачите OU, OD та OS. Вони позначають, яке око, наприклад ouSphere, може посилатися на "сферу" компонента рецепта окуляра для правого ока. Ви будете кращим програмістом, якщо зрозумієте бізнес-домен, для якого ви програмуєте.
Білл

11
+1 за те, що зазначають, що короткі назви, які відповідають тим, у рівняннях та формулах з паперів та текстів. Коли я це роблю, я включаю коментарі щодо того, де знайти оригінальний довідковий матеріал.
Джей Елстон

89

Змінні з коротким терміном життя повинні бути названі незабаром. Як приклад, ви не пишете for(int arrayCounter = 0; arrayCounter < 10; arrayCounter++) { .... Натомість ви використовуєте for(int i ....

Загалом, можна сказати, що чим коротше область змінної, тим коротше має бути назва. Цифрові лічильники часто - це лише одні літери, скажімо i, jта k. Локальні змінні - це щось на зразок baseабо fromта to. Скажімо, глобальні змінні дещо детальніше, наприклад EntityTablePointer.

Можливо, таке правило не дотримується з кодовою базою, з якою ви працюєте. Це хороший привід для того, щоб зробити якийсь рефакторинг!


14
i, j і k для індексів масиву являють собою традицію, що йде хоча б до Фортран. Будь-який поважаючий себе програміст буде знайомий з цією умовою.
Домінік Кронін

7
Я звичайно не пишу i, j, k, я пишу що - щось на зразок , personPosтому що тоді я не забуду , що я ітерація, і то , що індекс являє.
Малькольм

18
-1, я використовую довгі імена для ітерацій індексу масиву, але даю їм значущу назву замість очевидних та безглуздих arrayCounter . Полегшує читання коду і, принаймні, позбавляє вас від тупоти по всьому зовнішньому лічильнику, коли ви копіюєте / вставляєте інший цикл всередині цього.
Олег Вікторович Волков

3
лічильник - це іменник або прикметник. Граф - це іменник чи дієслово. Звичайно, я до сих пір не назвали б що - то arrayCounter, я б використовувати personIndexабо rowчи що - то описано , що я дивився.
Уейн Вернер

6
Коли я роблю одну петлю, я використовую i. Але як тільки я переходжу до вкладеного циклу, я скидаю iноменклатуру. Причиною цього є те, що я дуже хочу відстежити, з якою змінною циклу працює, і ivs jможе бути досить обманливим у щільному коді. Зробити це більш читабельним та додати більше пробілів, мені по суті необхідні.
jcolebrand

48

Проблема з кодом - це не короткі назви, а скоріше відсутність коментаря, який би пояснював абревіатури, або вказував на деякі корисні матеріали про формули, з яких походять змінні.

Код просто передбачає знайомство з проблемною областю.

Це добре, оскільки знайомство з проблемними доменами, ймовірно, потрібно для розуміння та підтримання коду, особливо в ролі того, хто його "володіє", тож вам потрібно набути знайомства, а не обходити подовження імен.

Але було б добре, якби код дав якісь підказки, щоб вони послужили трамплінами. Навіть доменний експерт міг забути, що dKце конічна константа. Додавання трохи "шпаргалки" до блоку коментарів не завадить.


Врешті-решт, вийшло щось подібне.
KChaloux

5
Це неправильно. Немає жодних причин ускладнювати читання вашого коду, щоб змусити людей витрачати більше часу на "його вивчення". Ви не вчите, ви просто гальмуєте людей. Крім того, практично ніколи не існує назавжди одного власника коду. Ти короткозорий і егоїстичний.
xaxxon

7
Це ваше трактування неправильне, а не відповідь. Код реалізує деяку математику, яка існує поза цим кодом і незалежно від нього, і яка виходила перед кодом. Допомогти збереження однакових назв. Хтось, хто підтримує код, напевно, повинен буде вивчити це за межами математики, а відсутність складання карт між двома схемами іменування допоможе цій людині.
Каз

19

Для певних змінних, які добре відомі в проблемній області - як і у випадку, який ви маєте тут - необґрунтовані короткі назви змінних. Якщо я працюю над грою, я хочу, щоб мої ігрові організації мали змінні позицій, xа yне horizontalPositionі verticalPosition. Аналогічним чином лічильники петлі , які не мають ніякої семантики крім індексації, я очікую побачити i, j, k.


Я заперечую, що cv, din і dout не відразу очевидні (хоча, мабуть, вони встановлені в певних сферах). Я б не сперечався про х і у, бачачи, як декартові координати застосовні для будь-якої кількості полів, і їх навчають для всіх середньої та середньої школи.
KChaloux

1
І xта y, в той час як загальні, не несуть неявні важливі аспекти , як , де почав в.
Росс Паттерсон

3
@RossPatterson: однак, існує багато контекстів, коли це просто не важливо. Наприклад, врахуйте цикл, такий як for (x,y) in list_of_coordinates: print x,y: Походження не має особливого значення при спробі зрозуміти код.
Брайан Оуклі

16

Запис до "Чистого коду":

Імена змінних повинні:

  • Будьте розкриваючи намір
  • Уникайте дезінформації
  • Робіть змістовні розрізнення
  • Бути вимовляльним
  • Будьте в пошуку

Виняток становлять прислів’я, які i,j,k,m,nвикористовуються для циклів.

Імена змінної, на яку ви, по праву, нарікаєте, не роблять нічого з перерахованого. Ці імена - невірні імена.

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

Ці назви краще:

radius
curvature
conicConstant
innerAperture
outerAperture
innerRadius
outerRadius

Коментолог каже, що це було б занадто складно з довгими назвами змінних:

введіть тут опис зображення

Короткі імена змінних також не спрощують:

fnZR = (r^2/fnR(1+Math.sqrt((1+k) * (r^2/R^2)))) + a[1]*r^2 + a[1]*r^4 + a[1]*r^6 ...;

Відповідь - це довгі імена та проміжні результати, поки ви цього не отримаєте в кінці:

thisNiceThing =  ( thisOKThing / thisGreatThing ) + thisAwsomeThing;

26
Ці змінні, ймовірно, використовуються в математичних формулах коду. Математичні формули набагато простіше читати з короткими назвами змінних. Я використовую довгі імена змінних у більшості свого коду, але математика краще з короткими назвами змінних. Випадковий приклад: подумайте, як довго це триватиме з довгими назвами змінних.
MarkJ

@MarkJ Ви маєте рацію.
Tulains Córdova

1
Проміжні результати мають додаткову перевагу зменшення та виділення помилок програмування. Наш мозок може обробляти лише стільки інформації одночасно, і важко помітити помилку в чомусь подібномуfnZR = (r^2/fnR(1+Math.sqrt((1+k)) * (r^2/R^2))) + a[1]*r^2 + a[1]*r^4 + a[1]*r^6 ...;
безглазкість

1
Це не так складно, якщо це ваш хліб і масло.
Раду

1
Сенс у тому, щоб не писати однолінійку. Але проблема полягає в тому, що якщо вам потрібно щось змінити і скористатись іншою формулою, у вас виникає проблема, коли потрібно розібратися, long_nameна Rщо йдеться в підручнику. Використовуйте проміжні результати, але тримайте складну математику якомога ближче до проблемного домену, щоб ви могли фактично підтримувати її, якщо вам потрібно додати функцію.
slebetman

8

Є дві вагомі причини не перейменовувати змінні в застарілий код.

(1) якщо ви не використовуєте автоматизований інструмент рефакторингу, можливість введення помилок висока. Отже, "якщо це не зламано, не виправляйте"

(2) ви зробите порівняння поточних версій з попередніми версіями, щоб побачити, що змінилося, неможливо. Це ускладнить подальше обслуговування коду.


7
Абсолютно правильно, але ризик нерозуміння набагато більший.
Росс Паттерсон

2
У вас є набагато більші проблеми, якщо ваші інструменти не можуть впоратися з простими проблемами, як ті, які ви згадали.
AndSoYouCode

Відповіді (1) Розумне автоматизоване покриття тесту та розумне капсулювання, (2) Досвід роботи з контролем версій.
Адамантиш

5

Чи є вагомі підстави називати змінні таким чином, чи я виправдовуюсь оновленням їх до більш описових імен, коли я стикаюся з ними?

Причина використовувати менші імена - якщо оригінальний програміст їм легше працювати. Імовірно, вони мають право визнати, що це так, і право не мати тих самих особистих уподобань, як у вас. Особисто я знайшов би ...

dDin better than dDinnerAperture
dDout better than dDouterAperture

... якби я використовував їх у довгих складних обчисленнях. Чим менший математичний вираз, тим частіше простіше побачити всю справу відразу. Хоча якби це було так, вони могли б бути кращими як dIn та dOut, тому не було повторюваного D, який міг би призвести до простого друку.

З іншого боку, якщо вам важче працювати, тоді вибийте себе та перейменуйте їх у більш довгу форму. Особливо, якщо ви відповідаєте за цей код.


7
По крайней мере, я, безумовно, позбавляюсь від системних угорських позначень ...
KChaloux

4
Провідним dє угорський? Я думав, що це числення, як в dx^2/dx = 2x.
Шеннон Северанс

7
Якби я бачив dDinnerApertureсам, я прочитав би це як «Діафрагма для вечері», і задумаюся, чи це просто смішний спосіб сказати «рот». Ніколи не був шанувальником стилю "великої літери з наступними малими літерами)". Дуже заплутано іноді.
Даррел Гофман

2
+1 це відповідь. Формули з довгими математиками набагато простіше читати з короткими назвами змінних. Ці змінні, ймовірно, використовуються в математичних формулах коду. Математичні формули набагато простіше читати з короткими назвами змінних. Я використовую довгі імена змінних у більшості свого коду, але математика краще з короткими назвами змінних. Випадковий приклад: подумайте, як довго це триватиме з довгими назвами змінних.
MarkJ

1
@ShannonSeverance Я згоден з тобою. Виходячи з інженерного фону, d обов'язково повинен бути зарезервований для обчислення при використанні змінних імен в математичному сенсі (як це часто згадується тут).
CodeMonkey

4

Як правило, я вважаю, що правилом для цього є те, що ви можете використовувати надзвичайно короткі імена змінних, де ви знаєте, що люди, "кваліфіковані у галузі техніки" вашого конкретного коду, відразу зрозуміють посилання на ім'я змінної. (У будь-якому випадку ви завжди маєте коментарі за винятком цього випадку), і що локалізоване використання змінних можна легко визначити, виходячи з контексту їх використання.

Щоб розширити це, це означає, що ви не повинні виходити зі шляху прикриття змінних імен змінних, але ви можете використовувати скорочення для імен змінних, де ви знаєте, що ймовірно лише люди, які розуміють основну концепцію вашого коду. прочитати його все одно.

Щоб використати приклад із реального світу, нещодавно я створював клас Javascript, який займав би широту, і розповідав вам кількість сонячного світла, якого ви очікували в дану дату.

Для створення цього класу Sundial я згадував, можливо, півдесятка ресурсів, альманах Astronomy та фрагменти з інших мов (PHP, Java, C тощо).

Практично у всьому з них вони використовували подібні однакові абревіатури, які на обличчі не означають абсолютно нічого.

K, T, EPS, deltaPsi, eot, LM,RA

Однак якщо ти маєш знання фізики, ти можеш зрозуміти, якими вони були. Я б не очікував, що хтось торкнеться цього коду, тож навіщо використовувати імена змінних багатослівних?

julianTime, nutationOfEclipticalLongitudeExpressedInDegrees, equationOfTime, longitudeMean, rightAscension.

Крім того, багато часу, коли імена змінних є тимчасовими, тобто вони використовуються лише для тимчасового виділення якогось значення, тоді часто не має сенсу використовувати багатослівну версію, особливо коли контекст змінної пояснює, що це призначення.


1

Там абсолютно є; часто разів коротка назва змінної - це все, що потрібно.

У моєму випадку я роблю навігацію на точковій точці у своєму старшому класі робототехніки, і ми програмуємо наших роботів у KISS-C. Нам потрібні змінні для поточних та кінцевих координат (x, y), (x, y) відстаней, поточних та пунктів призначення, а також кутів повороту.

Тим більше, що стосується координат x і y, довге ім'я змінної зовсім непотрібне, а таких імен, як xC (поточний x), yD (призначення y) та pD (phi призначення), достатньо і їх найлегше зрозуміти в цьому випадку.

Ви можете стверджувати, що це не «описові імена змінних», як диктував би протокол програміста, але оскільки імена засновані на простому коді (d = призначення, c = поточний), на початку дуже простий коментар - це все опис вони вимагають.


0

Чи є вагомі підстави називати змінні таким чином, чи я виправдовуюсь оновленням їх до більш описових імен, коли я стикаюся з ними?

Зазвичай складні алгоритми реалізуються в matlab (або подібній мові). Я бачив, що люди просто переймають ім'я змінних. Таким чином, порівняти реалізацію досить просто.

Усі інші відповіді майже правильні. Ці абревіатури можна знайти з математики та фізики, за винятком того, що вони не починаються з d(як у вашому прикладі). Змінні, що починаються з d, зазвичай називають для відображення диференціації .

Усі звичайні посібники з кодування наказують не називати змінних першою буквою, що представляє тип (як у вашому випадку), оскільки так легко переглядати код у всіх сучасних IDE.


Правильно, цей елемент відходив незалежно від того, що люди закінчили говорити. У кодовій базі відбувається якась напівугорська половинчаста шизофренія, яку я оновлюю, коли знаходжу.
KChaloux

0

Я можу подумати, що причина змінних імен може бути досить короткою.

Короткі назви легко читати, використовуючи коротший простір очей, отже, короткий проміжок уваги.

Наприклад, коли я звикаю до того, що svdb означає "зберегти в базі даних", швидкість сканування вихідного коду покращується, оскільки мені потрібно швидко сканувати 4 символи замість того, щоб читати SaveToDatabase (14 символів, все погіршується для більш складних імен операцій). Я кажу: "сканування" не "читання", тому що це займає велику частину аналізу вихідного коду.

При скануванні через велику кількість вихідного коду це може забезпечити хороші показники продуктивності.

Крім того, він просто допомагає лінивому програмісту набрати ці короткі імена під час написання коду.

Звичайно, очікується, що всі ці "стенограми" будуть перелічені в якомусь стандартному місці у вихідному коді.


1
Ми не читаємо слова як набір символів, ми читаємо їх як форми і розв’язуємо деталі умовно, коли розуміння за поглядом не вдається. Довжина для читання слова повинна перевищувати 4 символи, і ми можемо подумки обробити camelCase та інші засоби розбиття слів змінних імен як межі слів. Я сумніваюся, що тест читання міг би стверджувати, що короткі назви покращують швидкість розуміння читання; натомість, видаливши впізнавані слова, буде скорочуватися швидкість, поки нові слова не будуть засвоєні (на що ви самі вказуєте).
безвічність

0

Сформулювати те, що сказав @zxcdw, дещо по-іншому, і детально розглянути це з точки зору підходу:

Функції повинні бути чистими , короткими та досконалою інкапсуляцією деякої функціональності: логіка чорного поля , незалежно від того, чи не сиділа вона нетронутою протягом 40 років, буде продовжувати виконувати роботу, для якої вона була розроблена, оскільки її інтерфейс (увімкнений і вийшов) звук, навіть якщо ви нічого не знаєте з його внутрішніх справ.

Це такий тип коду, який ви хочете написати: це код, який триває і простий у портуванні.

Де потрібно, складіть функції з інших (вбудованих) функцій викликів , щоб зберегти код тонкозернистим.

Тепер, з відповідним описовим іменем функції (при необхідності докладно!), Ми мінімізуємо будь-який шанс неправильного тлумачення цих скорочених імен змінних, оскільки область застосування настільки мала.


-1

Імена змінних повинні бути максимально описовими, щоб сприяти читанню програми. Ви самі це пережили: у вас було багато проблем з визначенням програми, яка відбулася через погану назву.

Немає вагомих причин не використовувати описову назву. Це допоможе вам і всім, хто працює / буде працювати над проектом. Ну насправді існує одне дійсне використання для коротких імен: циклічні лічильники.


6
Зауважте, що int dummy_variable_for_for_loops;це максимально описово.
Каз

4
-1 тому, що ця відповідь є заплутаною. Спочатку він говорить, що немає вагомих причин, потім закінчує, кажучи, що насправді є. Відповідь була б кращою, якби вона перефразовувалась, щоб не суперечити собі.
Брайан Оуклі

Я б змінив це, щоб прочитати "як описовий, скільки потрібно ". Якщо коротке ім'я передає мету змінної, тоді добре використовувати коротке ім'я .
Максим Мінімус

-1

Звичайно, саме для цього // коментарі?

Якщо до завдань є коментарі, які є описовими, ви отримуєте найкраще з обох світів: опис змінної та будь-яких рівнянь легко порівняти з їх текстовою книгою.


-1

Для інтерфейсів (наприклад, підписи методів, підписи функцій) я схильний вирішувати це шляхом анотування декларацій параметрів. Для C / C ++ це прикрашає .h файл, а також код реалізації.

Я роблю те саме для оголошень змінних, коли знання використання змінної не очевидно в контексті та в іменуванні. (Це стосується мов, які також не мають сильного введення тексту.)

Є багато речей, які ми не хочемо засмічувати ім'я змінної. Чи є кут у радіанах чи градусах, чи є деяка допуск на точність чи дальність і т.д. Інформація може дати цінні твердження про характеристики, з якими слід правильно поводитися.

Я не релігійний з цього приводу. Мене просто цікавить ясність і впевненість у тому, що я зараз, що це наступного разу, коли мій забуваючий власний власник відвідує код. І кожен, хто дивиться через моє плече, має те, що йому потрібно знати, щоб побачити, де щось вимкнено, що важливо (остання важлива для правильного обслуговування).


-1

Чи є привід для надмірно коротких імен змінних?

По-перше: називання змінної для енергії e під час обчислення формул, таких як E = MC2, НЕ є надмірно коротким іменуванням. Використання символів як аргументу для коротких імен недійсне

Це питання було досить цікавим для мене, і я можу придумати лише одне виправдання, а це гроші.

Скажімо, наприклад, ви підключаєте javascript для клієнта, який знає, що файл потрібно завантажувати багато разів на секунду. Це було б дешевше і зробить досвід користувачів кращим, якби файл (у кількості байтів) був якомога меншим.

(Тільки для того, щоб приклад "реалістичний", вам не було дозволено використовувати інструмент minifier. Чому? Проблеми безпеки, жодних зовнішніх інструментів не можна торкатися бази коду.)


1
Ваш приклад все ще не дуже реалістичний.
Раду

-1

Я зауважую, що в інших відповідях не згадується використання угорської нотації. Це ортогонально для тривалої дискусії, але стосується схем іменування загалом.

double dR, dCV, dK, dDin, dDout, dRin, dRout

"D" на початку всіх цих змінних мається на увазі, що вони подвійні; але мова все одно це виконує. Незважаючи на лаконічність цих імен, вони до 50% зайві !

Якщо ми будемо використовувати конвенцію про іменування для зменшення помилок, нам набагато краще використовувати інформацію про кодування, яка не перевіряється мовою. Наприклад, жодна мова не скаржитьсяdK + dR на вищезазначений код, навіть якщо додати безрозмірне число до довжини безглуздо.

Хороший спосіб запобігти таким помилкам - використовувати більш сильні типи; однак, якщо ми будемо використовувати парні, то більш прийнятною може бути схема іменування:

// Dimensions:
// l  = length
// rl = reciprocal length
double lR, rlCV, K, lDin, lDout, lRin, lRout

Мова все одно дозволить нам писати K + lR , але тепер імена дають нам натяк на те, що це може бути неправильним.

Це різниця між системою Угорська (загалом погана) та Угорською програмами (можливо, хорошою)

http://en.wikipedia.org/wiki/Хунгарська_нотація


1
Власне, C ++ може скаржитися на те, K + lR якщо ви правильно оголосили свої одиниці. За допомогою одиниць SI він може робити перевірку розмірності та перетворення одиниць. Додавання не 3_feet + 2_meterповинно бути проблем, в той 2_meter+1_secondчас як помилка часу компіляції.
MSalters

@MSalters Це дуже круто; шаблон / макро підхід мені не прийшов у голову. Але в такому "мовно-агностичному" питанні, як це, я б згрупував усі перевірки одиниць
збірки

Шаблон обов'язково. Ви не можете виконати обчислення необхідного типу в макросах.
MSalters

-2

Тільки випадок , коли нерозбірливо короткі імена змінних є прийнятними в сучасній програмної інженерії, коли вони існують в скрипті , і пропускна здатність цього сценарію (по мережі в цілому) має важливе значення. Вже тоді зберігайте сценарій з довгими іменами в контролі джерел і мінімізуйте сценарій у виробництві.


9
Що робити при виконанні математичних операцій, де терміни вважаються загальновідомими у цій галузі? Приклад: використання M замість "маси" в e = mc ^ 2
Енді Хант

2
@andyBursh - Я б там був обережним. Програмісти не часто є експертами (або навіть компетентними) у своїй проблемній області. Однак, подібне може бути добре, особливо якщо є відповідне посилання на коментар до відповідної формули; Я забув про цей сценарій.
Теластин

8
@Telastyn - Якщо ви припускаєте, що програміст не є експертом, це часто призводить до отримання скорочень, які мають дуже чітко визначене значення, і перетворення їх у більш довгі імена, які принаймні дещо неоднозначні (тобто хтось вирішить назвати локальну змінну radiusколи він зберігає внутрішній радіус, не розуміючи, що набагато неоднозначніше, ніж Rin). І тоді неекспертний розробник повинен перекласти між його унікальною номенклатурою та номенклатурою, яку бізнес розуміє щоразу, коли відбувається дискусія, що стосується рівнянь.
Джастін Печера

2
Що з "я" для циклу лічильника? Або "х" і "у" при роботі з координатою? Або змінна, сфера дії якої становить лише два рядки коду?
Брайан Оуклі

4
Не погоджуйтесь з цією відповіддю. Програміст, що працює над програмою, що містить складні математичні вирази, краще зможе принаймні прочитати формули в специфікації, інакше вони не компетентні. Це не проблема знань домену, це важливий навик - деякі основні компетенції з математики перед роботою над математичною програмою. Якщо програміст не має доступу до формул специфікації, це ще одна проблема - і це не може бути вирішено одним коментарем.
MarkJ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.