Сила імен змінних
Як же правильно використовувати?
Загальні принципи вибору імен змінних
Ім'я змінної не можна вибирати, як кличку собаці: спираючись на його химерність або звучання. На відміну від собаки і її клички, які є різними сутностями, змінна і її ім'я формують по ідеї одну сутність. Тому і адекватність змінної багато в чому визначається її ім'ям. Вибирайте імена змінних з усією ретельністю.
У наступному прикладі змінні названі погано:
Приклад невдалого іменування змінних (з реальних бюджетних конфігурацій за яке держава відвалив багато грошей):
Найважливіший принцип іменування змінних
Найважливіший принцип іменування змінних полягає в тому, що ім'я має повно і точно описувати сутність, подану змінної. Один ефективний спосіб вибору хорошого імені передбачає формулювання суті змінної в словах. Оптимальним ім'ям змінної часто виявляється саме цей вислів. Завдяки відсутності загадкових скорочень воно Удобочитаемость; до того ж воно однозначно. Так як воно є повним описом суті, його не можна сплутати з чимось іншим. Нарешті, таке ім'я легко запам'ятати, тому що воно схоже на вихідну концепцію. Змінну, що представляє число членів олімпійської командиУкаіни, можна було б назвати "КолічествоІгроковОлімпійскойКомандиРосіі". Змінну, що представляє число місць на стадіоні, - "КолічествоМестНаСтадіоне". Змінну, що визначає поточну процентну ставку, краще було б назвати "Ставка" або "ТекущаяСтавка", а не "_с" або "х". Думаю, ідея зрозуміла. Коштувати звернути увагу на дві характеристики цих імен. По-перше, їх легко розшифрувати. Фактично їх не потрібно розшифровувати взагалі: їх можна просто прочитати. Ну, а по-друге, деякі імена великі - занадто великі, щоб бути практичними. Довжину імен змінних я розгляну нижче. Кілька прикладів вдалих і невдалих імен змінних я привів в табл. 1.1
Вдалі імена, адекватний опис
Невдалі імена, неадекватне опис
Сума, на яку на даний момент виписані чеки
ТСумма, тСумм, АктСумма
ТД, Поточна, x, x1, x2, Дата
Імена повинні бути максимально конкретні. Імена х, temp, г і інші, досить загальні для того, щоб їх можна було використовувати більш ніж з однією метою, не так інформативні, як могли б бути, і зазвичай є поганими.
Орієнтація на проблему
Гарне мнемонічне ім'я найчастіше описує проблему, а не її вирішення. Гарне ім'я більшою мірою виражає що, а не як. Якщо ж ім'я описує деякий аспект обчислень, а не проблеми, має місце зворотне. Віддавайте перевагу таким іменам змінних імена, що характеризують саму проблему.
Запис даних про співробітника можна було б назвати inputRec або employeeData. Ім'я inputRec - комп'ютерний термін, що виражає ідеї введення даних і запису. Ім'я employeeData відноситься до проблемної області, а не до світу комп'ютерів. У разі бітового поля, що визначає статус принтера, ім'я bitFlag більш комп'ютеризовано, ніж printerReady, а в разі застосування бухгалтерського обліку calcVal більш комп'ютеризовано, ніж sum.
Оптимальна довжина імені змінної
Табл. 1.2. Занадто довгі, занадто короткі і оптимальні імена змінних
Занадто довгі імена:
Дуже короткі імена:
до, кол, жмут, кво
с, кс, ксмс
колЧленовКоманди, всегоЧленовКоманди
колСіденійСтадіона, - всегоСіденій
Імена змінних і область видимості
Чи завжди короткі імена змінних невдалі? Ні не завжди. Якщо ви привласнюєте змінної коротку назву, сама довжина імені говорить про те, що змінна є другорядною і має обмежену область дії.
Програміст, Новомосковскющій код, зможе здогадатися, що використання такої змінної обмежується кількома рядками коду. Привласнюючи змінної ім'я ви говорите: «Ця змінна - самий звичайний лічильник циклу / індекс масиву, що не грає ніякої ролі поза цими кількох рядків». У. Дж. Хансен (W. J. Hansen) виявив, що довші імена краще привласнювати рідко використовуваних або глобальних змінних, а більш короткі -
локальних змінних або змінним, що викликається в циклах (Shneiderman,
1980). Однак з короткими іменами пов'язано багато проблем, і деякі обачні програмісти, які дотримуються політики захисного програмування, взагалі уникають їх.
Іменування індексів циклів
Принципи іменування індексів циклів виникли тому, що цикли відносяться до найпопулярніших конструкцій. Як правило, в якості індексів циклів використовують змінні i, j і k
Приклад простого імені індексу циклу (1С)
Для i = 0 За КолічествоСтрокМассіва Цикл
СтрокаДанних = ДанниеМассіва [i];
Загальні поради щодо скорочення імен
Нижче наведено кілька рекомендацій щодо скорочення імен. Деякі з них
суперечать іншим, так що не намагайтеся використовувати всі поради відразу. Отже:
- використовуйте стандартні абревіатури (загальноприйняті, які можна знайти
- видаляйте всі голосні, які не є першими буквами імен (computer - cmptr, screen - scrn, integer - intgr);
- видаляйте артиклі і союзи, такі як and, or, the і т. д .;
- зберігайте одну або кілька перших букв кожного слова;
- «Обрізайте» слова узгоджено: після першої, другої або третьої літери (вибирайте варіант, доречний в конкретному випадку);
- зберігайте першу і останню букви кожного слова;
- зберігайте до трьох виразних слів;
- зберігайте найбільш виразний звук кожного складу;
- перевіряйте, щоб сенс імені змінної в ході скорочення не спотворюється;
- використовуйте ці способи, поки не скоротите ім'я кожної змінної до 8-20 символів або до верхньої межі, що обмежує довжину імен в конкретній мові.
1. Владислав Томашевич (tomvlad) 3621 13.11.09 7:21 Зараз в темі
Може вже вистачить винаходити велосипеди?
Система стандартів і методик розробки конфігурацій на платформі 1С: Підприємство 8
Правила освіти імен змінних
Імена змінних слід утворювати від термінів предметної області таким чином, щоб з імені змінної було зрозуміло її призначення.
Імена слід утворювати шляхом видалення пробілів між словами. При цьому, кожне слово в імені пишеться з великої літери. Приводи і займенники з однієї літери також пишуться прописними буквами.
приклад:
Перем ДіалогРаботиСКаталогом; // Діалог роботи з каталогом
Перем КолічествоПачекВКоробке; // Кількість пачок в коробці
Імена змінних забороняється починати з підкреслення.
Імена змінних не повинні складатися з одного символу. Використання коротких імен змінних допускається тільки для лічильників циклів.
Змінні, що відображають стан деякого прапора, слід називати так, як пишеться справжнє значення цього прапора.
наприклад:
Перем ЕстьОшібкі; // Ознака наявності помилок в процедурі.
Перем ЕтоТоварТара; // Ознака, що товар належить до поворотній тарі.
2. Олександр Ритов (Арчибальд) 2660 13.11.09 7:32 Зараз в темі
Занадто довгі імена: numberOfSeatslnTheStadium
Те, що треба: numSeatsInStadiumrseatCount
Даа. УЖ.
3. Антон Степанов (Stepa86) 834 13.11.09 8:30 Зараз в темі
(1) не всі Новомосковскют стандарти чомусь
4. Владислав Томашевич (tomvlad) 3621 13.11.09 8:33 Зараз в темі
(3) Все правильно. Через таких і маємо криво переписані конфігурації, в яких ні чорта не зрозуміло і зі зміною сопровожденца або вмираючі, або безжально листуємося.
5. Jers (Jers) 13.11.09 9:02 Зараз в темі
6. Антон Степанов (Stepa86) 834 13.11.09 10:51 Зараз в темі
(4) ось тому і вважаю, що будь-яка інфа, що підштовхує програміста писати більш якісний код є вельми корисною
7. В'ячеслав Кадацький (marsohod) 120 13.11.09 11:29 Зараз в темі
(5) Хе-хе, Ви теж помітили.
Слід додати ще одне правило:
"Імена змінних не повинні містити орфографічних помилок": |
8. Олександр Хом'як (logarifm) 975 13.11.09 12:26 Зараз в темі
Я навів реальний приклад коду з конфігурації реальної за яку грошей заплатили.
(6) Так саме з неї тільки стисло і відібрано понад головні аспекти. Я ж там написав, що не полеглотсвую чужих рукописів:
Не уж-то людина який написав все це "геній". Ось, що з такого приводу говорить книга С.Макконнелла "Досконалий код".
9. Олександр Хом'як (logarifm) 975 13.11.09 12:32 Зараз в темі
10. Олександр Хом'як (logarifm) 975 13.11.09 12:34 Зараз в темі
(2) Ти не мені зробив мінус, а самому Стівену Макконнелл, а це дуже значуща особа в ІТ. Раджу все-таки почитати його книгу "Досконалий код" і аргументувати свій мінус.
11. Олександр Ритов (Арчибальд) 2660 13.11.09 12:49 Зараз в темі
(10) Ще раз: у тебе
numberOfSeatslnTheStadium - занадто довге ім'я, а
numSeatsInStadiumrseatCount - те, що треба, хоча на два символу довше.
А Стівен Макконнел тут ні при чому. Це твій особистий мінус.
12. Олександр Хом'як (logarifm) 975 13.11.09 12:51 Зараз в темі
як це ні до чого - це взято з його книги :) Виходить, що як би так така людина, якого книга на такому рівні продажу ось так "лохонулся", хто ж розумніший? Ви або Макконнелл?
13. Олександр Ритов (Арчибальд) 2660 13.11.09 13:45 Зараз в темі
(12) У Макконнела в другому випадку
numSeatsInStadium
(Стр 255)
14. Ulcer (KapasMordorov) 13.11.09 14:13 Зараз в темі
"2) Ти не мені зробив мінус, а самому Стівену Макконнелл, а це дуже значуща особа в ІТ. Раджу все-таки почитати його книгу" Досконалий код "і аргументувати свій мінус."
Мені от цікаво, з якої причини такого участинков ІС плюси ставлять за звичайний плагіат?
Якщо я "Капітал" Маркса щодня зацитую, мені теж за силу думки і духу плюси покладені?
15. Олександр Хом'як (logarifm) 975 13.11.09 14:35 Зараз в темі
(14) а тут ні до чого плагіат, ось що змусило написати мене таку статтю, розбір конфігурації з таким ось кодом:
зн = б.СКК ();
__зн = зн;
Якщо зн> 0 Тоді
Якщо (ПустоеЗначеніе (Сотруднік.ДатаУвол) = 0) І
(Сотруднік.ДатаУвол <НачМесяца(ДатаПериода)) Тогда
інакше
зн = Цілий (зн);
КонецЕсли;
Якщо (ЗаполнітьВсех = 0) Тоді
Якщо ((б.Субконто (1) .ЧерезКассу = 1) І (Серед (Рядок (Рахунок), 1,2) = "30")) Тоді
НоваяСтрока ();
Співробітник = б.Субконто (1);
СуммаВидачі = __зн;
Сума = зн;
ІначеЕслі ((б.Субконто (1) .ЧерезКассу = 0) І (Серед (Рядок (Рахунок), 1,2) = "31")) Тоді
Якщо б.Субконто (1) .вибран () = 1 Тоді
б_с.ІспользоватьВладельца (б.Субконто (1));
Якщо б_с.НайтіПоРеквізіту ( "Банк", Субконто1.Банк, 0) = 1 Тоді
НоваяСтрока ();
Співробітник = б.Субконто (1);
СуммаВидачі = __зн;
Сума = зн;
ІначеЕслі пр_реп = 0 Тоді
НоваяСтрока ();
Співробітник = б.Субконто (1);
СуммаВидачі = __зн;
Сума = зн;
КонецЕсли;
інакше
Повідомити ( "Не вказано з \ п рахунок банку");
повернення;
КонецЕсли;
КонецЕсли;
інакше
НоваяСтрока ();
Співробітник = б.Субконто (1);
СуммаВидачі = __зн;
Сума = зн;
КонецЕсли;
16. Андрійко Полонянкін (apolon) 13.11.09 14:39 Зараз в темі
Заважають різкі переходи на 1С та з 1С. Чи не виділені цитати.
Найкрасивіше було б взяти ідею з книги і ПОВНІСТЮ транслювати її на 1С (особливо українську мову).
Якщо мені не зраджує пам'ять, то в тому ж ІТС дана рекомендація писати російською.
Іншими словами, наприклад, ділянку:
Занадто довгі імена: numberOfPeopleOnThelJsOlympicTeam
numberOfSeatslnTheStadium
Дуже короткі імена: п, пр, ntm
п, ns, nsisd
т, тр, max, points
Те, що треба: numTeamMembers, teamMemberCount
numSeatsInStadiumrseatCount
teamPointsMaxrpointsRecord
міг би виглядати так:
Занадто довгі імена: колічествоЛюдейВОлімпійскойКоманде,
колічествоСідячіхМестНаСтадіоне
Дуже короткі імена: до, кол, жмут, сид, кс, ксмс,
Те, що треба: колЧленовКоманди, счётчікЧленовКоманди
колСіденійСтадіона
Знову ж в контексті 1С ім'я змінної ТекущаяДата зовсім вже невдало.
В цілому при прочитанні статті виникло відчуття, як при розборі коду:
_с = 0; ін = 1;
Для ін = 1 За цк Цикл
Якщо _пр [ін] = _ б.Субконто (3) Тоді
_с = 1; Перервати;
КонецЕсли;
КонецЦікла;
Якщо _с = 0 Тоді
_пр [цк] = _ б.Субконто (3);
цк = цк + 1;
_сс = 1;
КонецЕсли;
17. Ulcer (KapasMordorov) 13.11.09 14:45 Зараз в темі
(15)
Продублюємо.
"Ти не мені зробив мінус, а самому Стівену Макконнелл".
І що? Стівен втілення бога на землі? Ви йому посилання на форум відішлете, де йому мінус поставили?
Або мінус Вам поставили? За необтесані плагіат цілком заслужено.
Яке підставу обурюватися?
P.S.
А код такої багато пишуть, особливо програмісти, які не знайомі з предметною областю - їм все одно, зрозуміє хто чи ні. Круто ж і швидко.
18. Олександр Хом'як (logarifm) 975 13.11.09 15:05 Зараз в темі
(17) А в чому крутість то такого коду, я б навпаки сказав - "тупість його".
19. Олександр Хом'як (logarifm) 975 13.11.09 15:11 Зараз в темі
(16) Ну змінні не варто прив'язувати до конкретного ухилення мови програмування, хтось кодіт на Java, C, C #, C ++, а хтось на 1С. Власне англомовні змінні можна використовувати в 1С лише були б вони зручні для читання. А щодо "ТекущаяДата" - тут не йде приклад того, що у 1С є така функція, тут показано, що змінні треба називати так, що значення вони несуть містить в собі якесь значення!
20. Ulcer (KapasMordorov) 13.11.09 15:16 Зараз в темі
(18)
Він працює. Швидко пишеться.
Довго модифікується потім, але це вже інша проблема.