Намагаються не використовувати угорські позначення


10

Я бачив аргументи «за» і «проти угорської системи» . Деякі роки я працюю над застарілим проектом, який використовує цю систему, називаючи кожну змінну, функціонуючи з префіксом типу змінної, наприклад (strName, intAge, btnSubmit тощо) (я знаю оригінальні префікси угорських програм за типом змінна, а не тип). Я хотів би, щоб наступний мій проект повністю відмовився від нього, але мені важче однозначно назвати подібні речі, не вдаючись до цього.

Скажімо, у мене є веб-форма для збору адрес електронної пошти та зберігання їх у таблиці бази даних та кнопка, яка викликає функцію, що зберігає адресу в db.

Якщо я використовую позначення угорського стилю, я можу назвати поле txtEmailкнопкою btnEmailта значенням, що міститься в текстовому полі strEmail. Тоді я можу використовувати функцію storeEmail(strEmail)для зберігання електронної пошти. У мене тут чітка конвенція, очевидно, що таке кожна змінна.

Яка найкраща практика для називання цих змінних

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

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

Яку технологію ви використовуєте? Ці префікси, схоже, піддаються веб-формам.
StuperUser

Я використовую ASP.NET (ззаду C #)
fearoffours

@delnan - чи можете ви детальніше розробити? Чому розмір функції робить ім'я однозначно простішим?
fearoffours

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

Відповіді:


8

Ваш останній пункт є найважливішим - все, що вам потрібно, щоб бути послідовним у вашому проекті та з колегами. Є два основні способи домогтися консистенції, і, якщо можливо, слід використовувати обидва. По-перше, використовуйте інструмент для перевірки іменування конвенцій під час збирання. У світі .Net StyleCop був би хорошим прикладом такого інструменту. Другий спосіб домогтися узгодженості - це рецензування всього коду, щоб ви могли не пильнувати.

Ваші інші два пункти, здається, запитують про альтернативу. Я не впевнений, що вам потрібна альтернатива; Суть про те, що угорська мова більше не є популярною, полягає в тому, що вона використовувалася для визначення типу, коли система типів та інструменти були, скажемо так, менш суворими. Тобто, якщо ви програмували в C і передавали вказівники навколо, єдиний спосіб відстежувати тип - це використання угорської мови. Тепер, якщо ви використовуєте таку мову, як C # або Java, ви не будете використовувати вказівники (або дуже рідко), тому необхідність у будь-якому виді угорської мови відпадає. Крім того, сучасні IDE дозволяють вам дуже легко бачити тип, наведення курсор на змінну або в гіршому випадку за допомогою короткого скорочення, щоб побачити оригінальну декларацію. Отже, я не думаю, що вам не потрібні будь-які позначення, просто назвіть змінну тим, що вона робить. Якщо це адреса електронної пошти, просто використовуйте "email" або "


2
Це стає трохи складніше, коли форма / сторінка / вікно / що завгодно має кнопку електронної пошти, текстове поле для електронної пошти та, можливо, інший віджет / елемент керування електронною поштою ...
FrustratedWithFormsDesigner

7
@FrustratedWithFormsDesigner Не обов’язково. Текстове поле може бути emailAddressInput, де кнопкою буде emailAddressSubmit, а внутрішнє представництво - просто emailAddress.
Джонатан

@Jonathan: Добре.
FrustratedWithFormsDesigner

3

У роботі з веб-формами / формами Windows / іншими графічними речами має сенс використовувати Системи Угорська, оскільки ви можете мати елементи управління, які дуже щільно пов'язані між собою - наприклад, текстове поле та мітку, які йдуть разом; ви можете назвати їх txtEmailі lblEmailвідрізнити. На мій досвід, це звичайне явище і насправді корисно.

Але у вашому коді позаду такий спосіб називання зайвий. Якщо у вас є тип змінної string, який використовується для зберігання електронної пошти, просто назвіть її email. Якщо ви чомусь заплуталися, більшість IDE повинні дозволити навести курсор на нього та побачити його тип. (В ідеалі, в матеріалах OO це може бути атрибутом якогось об'єкта і user.Emailще більш зрозумілим.)

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


1
Фактично txt і lbl не є угорською мовою, txt - це лише короткий текст, а lbl - короткий текст для Label, немає ніяких причин не просто використовувати слово у повній довжині, наприклад EmailText та EmailLabel у формі. Угорська була б типом, який в обох цих випадках є рядком.
Стів

1
@Steve Haigh - Ні, я кажу про самі органи управління. У вас є об'єкт типу "textbox" під назвою txtEmail та об'єкт типу "label" під назвою lblEmail. Жодна з них не є струнами. Вони можуть мати рядкові властивості, але вони самі по собі не є рядками.
Ендрю Арнольд

1
Ах, вибачте. Так, звісно. Незважаючи на це, немає причин не використовувати більш описову назву, таку як EmailTextBox. Тільки тому, що VS генерує бідне ім’я, не означає, що вам потрібно його зберігати. Однак у контексті форм абревіатури txt та lbl настільки добре зрозуміли, що я, мабуть, не хвилювався б у такому випадку.
Стів

3

Що робить змінну "надто довго"?

Замість того txtEmail, btnEmailви могли б використовувати UserEmailText, UserEmailButtonі AdminEmailText,AdminEmailButton

Проблема з цим полягає в тому, що ви можете почати відчувати, що змінна починає довго отримувати:

AdminEmailIsValid починає межувати з тим, як довго я дозволяв би бути змінною.

Крім того, ви можете почати помічати, що ви повторно використовуєте набір змінних та набір операцій над цими змінними. Це те , що ООП призначена для. Замість набору змінних створіть загальний об'єкт:

class EmailForm
  var textBox, button, text
  function storeEmail()

Тоді ви можете створити нову змінну як клас та використовувати ті самі позначення крапок для доступу до своїх даних:

userEmailForm = new EmailForm(...data...)
adminEmailForm = new EmailForm(...different data...)
doSomething( userEmailForm.text )
doSomethingElse( adminEmailForm.text )

Звичайно, це орієнтовано на мови, які використовують парадигму OOP, але більшість популярних мов веб-розробки є об'єктно-орієнтованими або допускають об'єктно-орієнтований код (PHP, Python, C #, C ++, Java, JavaScript, ActionScript тощо) ).


Я не бачу переваги UserEmailText перед txtEmail - ви просто суфіксуєте тип, а не префіксування його. Мені подобається "Це те, для чого призначений OOP".
fearoffours

@fearoffours, OP визнав наявність проблеми з унікальними іменами, я додав цей приклад як описовий спосіб розрізнення двох подібних змінних ( UserEmailTextі AdminEmailTextконкретно). Я, як правило, типи суфіксів, оскільки він піддається переходу до класу UserEmailText-> UserEmail.text-> User.email.textзалежно від кількості абстракції / функціональності.
zzzzBov

Гаразд, дивись, звідки ти йдеш. +1 для порівняння суфікса / класу. О, і я ОП!
fearoffours

@fearoffours, lol whoops ...
zzzzBov
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.