На картинке вверху приведена коротенькая функция, в которой "обыграно" только лишь одно слово "Колонка", из которого получилось целых 4 переменных. В других функциях количество переменных из одного ключевого слова может быть и больше. И это благодаря "венгерской нотации переменных".
Понятие "венгерская нотация переменных" хорошо прописано тут: Википедия о венгерской нотации переменных
Венгерская нотация в программировании — соглашение об именовании переменных, констант и прочих идентификаторов в коде программ. Своё название венгерская нотация получила благодаря программисту компании Microsoft венгерского происхождения Чарльзу Симонаи (венг. Simonyi Károly), предложившему её ещё во времена разработки первых версий MS-DOS. Эта система стала внутренним стандартом Майкрософт[1].
Суть венгерской нотации сводится к тому, что имена идентификаторов предваряются заранее оговорёнными префиксами, состоящими из одного или нескольких символов. При этом, как правило, ни само наличие префиксов, ни их написание не являются требованием языков программирования, и у каждого программиста (или коллектива программистов) они могут быть своими.
Применяемая система префиксов зависит от многих факторов:
- языка программирования (чем более «либеральный» синтаксис, тем больше контроля требуется со стороны программиста, а значит, тем более развита система префиксов. К тому же использование в каждом из языков программирования своей терминологии также вносит особенности в выбор префиксов);
- стиля программирования (объектно-ориентированный код может вообще не требовать префиксов, в то время как в «монолитном» для разборчивости они зачастую нужны);
- предметной области (например, префиксы могут применяться для записи единиц измерения);
Этот подход даёт мне, программисту, читаемость текста, экономию сил на выдумывание переменных и контроль типов. Так как тип переменной следует из первых букв нижнего регистра переменной.Пример из обработки "Загрузка выписки из клиент-банка в 1С:Бухгалтерию 2.0" :
Я пользуюсь следующим перечнем префиксов :
Префикс |
Смысл, тип значения |
"с" | Строка |
"л" | Логическая |
"н" | Number — Число (наследие языка Си) |
"х" | Икс, любой тип значения |
"б" | Булево |
"дт" | Дата |
"мк" | макет |
"об" | область макета |
"тд" | табличный документ |
"зп" | запрос |
"вп" | выполнить запрос |
"вб" | выбрать из запроса |
"сз" | Список значений |
"тз" | Таблица значений |
"тч" | Строка табличной части |
"зн" | значение из списка значений |
"пч" | Перечисление |
"спр" | Справочник |
"док" | Документ |
"фрм" | Форма |
"обр" | Обработка |
"мс" | Массив |
Функция создана для проверки уникальности контрагентов по ИНН и КПП.
Поэтому в качестве переменной используется ключевое слово "Контрагент".
А благодаря применению префиксов я получил необходимое количество переменных для работы с записями в справочнике "Контрагенты".
Также благодаря префиксам переменных отпадает необходимость придумывать подробные имена переменных. Зачем тратить воображение и буквы, если с первого взгляда становится понятно :
Переменная | Смысл, содержание |
сИНН | ИНН контрагента, строка |
лУникальностьПоИНН | Истина / Ложь — результат проверки уникальности справочника контрагентов |
нКонтрагент | Счётчик контрагентов с одним ИНН |
мкКонтрагенты | Макет печатной формы для задвоенных контрагентов |
обЗаголовок | Область заголовка макета контрагентов |
тдКонтрагенты | Табличный документ для вывода печатной формы задвоенных контрагентов |
зпКонтрагенты | Запрос "Контрагенты" |
впКонтрагенты | Результат выполнения запроса "Контрагенты" |
вбКонтрагентыИНН | Выборка из запроса "Контрагенты" |
спрОрганизация | Ссылка на справочник "Организации" |
Напоследок цитата из той же статьи из Википедии :
Преимущества
- Если встроенного механизма типизации не хватает, венгерская нотация позволяет записывать подтип[en] переменной — например,
int cPrice
может означать, что переменная имеет не просто целый тип, а валютный (currency). Именно такое применение префиксов было предложено Симони[2]. Это может пригодиться:
- В низкоуровневом программировании (когда набор доступных типов настолько узок, что, например, целый тип не отличается от булевого).
- В языках с динамической типизацией, например PHP, где одна и та же переменная может хранить значения любого типа.
- В инженерных расчётах (для записи единиц измерения). Это позволяет избавиться от немалого количества ошибок простым подсчётом размерностей.
- В других местах, где переменные одного и того же типа предназначены для хранения разнородных данных — например, в коде защиты от компьютерных взломщиков префикс может указывать на «безопасные» и «небезопасные» данные (SQL-инъекция, XSS).
- Венгерская нотация удобна для написания больших программ в неполнофункциональных (по современным меркам) редакторах без автоматизированной навигации по тексту. Скорее всего, именно поэтому она стала стандартным стилем кода в WinAPI.
- Венгерскую нотацию можно рассматривать как стандартную систему сокращений. Например, поле ввода для поиска и кнопка «Поиск» могут именоваться как
txtSearch
иbtnSearch
. Такая практика позволяет делать названия переменных короткими и в то же время осмысленными
Опрос по венгерской нотации:
А — Знаю, использую
Б — Знаю, не использую
В — Не знал раньше, попробую использовать
Г — Не знал раньше, отказываюсь применять
Благодарю за Ваши ответы!
спасибо, кэп
Я использовал венгерскую нотацию на сях… Использовал потом с библиотекой TurboVision… Потом пришёл С++ и мне там тоже было удобно…
Потом наступила эра русскоязычных названий на 1С, где немалое преимущество — чтение кода как обычного текста. И с уверенностью могу сказать, что неудобно было использовать эту нотацию.
«Если Отказ Тогда» или из примера выше намного проще по русски читать так:
Показать
А если вдуматься в текст, то проще написать одной строкой:
Можно ещё добавить проверку на принадлежность искомой колонки массиву колонок.
На моей практике не встречалось случаев, когда можно было бы не найти нормальных имён для переменных и приходилось бы выражать типы значений переменных префиксами. Не стОит умышленно перечёркивать весомое преимущество русскоязычной платформы.
Г
Раньше не знал, но иногда встречалась подобная префиксация, теперь буду знать, что она означает.
Возможно, дело вкуса и привычек каждого, но для меня «МассивРеквизитов» выглядит привлекательнее, чем «мсРеквизиты» или что-то подобное.
Б — Венгерская нотация противоречит стандартуhttps://its.1c.ru/db/v8std#content:454:hdoc , а значит использовать ее в серьезных проектах выглядит сомнительным решением.
Я лично использую венгерскую нотацию только в одном случае — помечаю префиксом м переменные уровня модуля, чтобы быть с ними повнимательнее и случайно не затереть:
(4) Однако это не мешает фирме КАМИН использовать венгерскую нотацию в своих продуктах по расчету зарплаты. Что это двойные стандарты?
Сам венгерскую нотацию не использую, а вот кто к ней привык уже отказаться трудно.
Было дело тоже пробовал её использовать. Но единственный плюс явное обозначение новой переменной, чтобы не перезаписать глобальную или модульную, это плюс, но в методологии 1С намного удобнее писать как заметил Леонид в комментарии (2). Иногда добавляю префикс для надежности «тек» — текущая или «нов» — новая, потому что в некоторых самописных конфигурациях страшно словить глобальную переменную :))
Только интересно, почему её практически больше ни где не используют? Сам пользовался, когда писал на С под WinAPI. И потом по привычке поначалу использовал ее в 7рке. Сейчас предпочитаю camelCase.
Дополню автора копи/пастой википедии, которую он почему-то упустил:
— Некоторые программисты считают, что использование префиксов делает имена переменных менее понятными и, таким образом, ухудшает читаемость кода.
— Если неизвестно имя переменной без префиксов, подчас трудно восстановить её префиксы.
— Система автодокументации, если она не понимает системы префиксов, отсортирует алфавитный список по префиксу, что может отрицательно сказаться на качестве документации. Впрочем, имена функций обычно префиксами не снабжают.
— Запись нескольких префиксов из-за частого использования заглавных букв и знаков подчёркивания может стать «пляской на кнопке ⇧ Shift».
— Средства навигации, которые включены в современные редакторы кода, и так позволяют видеть тип любой переменной и быстро переходить к точке, где она определена — то есть, использование префиксов может быть избыточным.
— При изменении типа потребуется изменять имя переменной (не все редакторы кода могут делать это автоматически).
— Существуют и другие средства задания типа переменной в её имени: например, слова is, has и т. д. для булевского типа (IsLoggedIn), count для счётчика (RefCount), множественное число для массива (UserIds). В языках, в которых заглавные буквы не эквивалентны строчным, регистр букв также может кодировать что-либо.
-Известный противник венгерской нотации — Линус Торвальдс: «Вписывание типа переменной в её имя (так называемая венгерская нотация) ущербно — компилятор и так знает типы и может проверить их, и это запутывает программиста».
(4)
Не совсем понятно, где противоречие.
К примеру: Артикул. Почему будет нарушением сАртикул?
Какие из пунктов стандарта нарушаются?
(9)
2. Имена следует образовывать путем удаления пробелов между словами. При этом, каждое слово в имени пишется с прописной буквы. Предлоги и местоимения из одной буквы также пишутся прописными буквами.
Пример:
Перем ДиалогРаботыСКаталогом; // Диалог работы с каталогом
Перем КоличествоПачекВКоробке; // Количество пачек в коробке
Примеры некорректных имен переменных:
масРеквизитов, соотвВидИмя, новСтр
Вот что на это пишет Роберт Мартин в книге Чистый код
В доисторические времена, когда в языках действовали ограничения на длину имен, мы нарушали это правило по необходимости — и не без сожалений . В Fortran первая буква имени переменной обозначала код типа . В ранних версиях BASIC имена могли состоять только из одной буквы и одной цифры . Венгерская запись (HN, Hungarian Notation) подняла эту проблему на новый уровень .Венгерская запись играла важную роль во времена Windows C API, когда программы работали с целочисленными дескрипторами (handle), длинными указателями, указателями на void или различными реализациями «строк» (с разным применением и атрибутами) . Компиляторы в те дни не поддерживали проверку типов, поэтому программистам были нужны «подсказки» для запоминания типов .
В современных языках существует куда более развитая система типов, а компиляторы запоминают типы и обеспечивают их соблюдение . Более того, появилась тенденция к использованию меньших классов и более коротких функций, чтобы программисты видели точку объявления каждой используемой переменной . Java-программисту кодировать типы в именах не нужно . Объекты обладают сильной типизацией, а рабочие среды развились до такой степени, что могут выявить ошибку типа еще до начала компиляции! Таким образом, в наши дни венгерская запись и другие формы кодирования типов в именах превратились в обычные пережитки прошлого . Они усложняют изменение имени или типа переменных, функций и классов . Они затрудняют чтение кода . Наконец, они повышают риск
того, что система кодирования собьет с толку читателя кода .
***
Код должен быть как можно более выразительным . Слишком длинные выражения, венгерская запись, «волшебные числа» — все это скрывает намерения автора .
Суть в том, что переменные нужно именовать так, чтобы из их названия было четко понятно, для чего они. Тогда необходимости в дополнительных нотациях уже не будет.
Иногда действительно удобно обозначить название переменной так, чтобы был понятен смысл и содержание переменной, например, «СписокКлиентов», «СтрокаИнформации», «МассивСсылок». Но это не Венгерская нотация, а просто название переменной.
Вобщем я согласен с Робертом Мартином и против лишних префиксов.
(12) Ну тот факт, что какой-то программист какого-то решения в самой 1С написал что-то не посмотрев в стандарты, никак не умаляет того факта, что нам стоит их придерживаться, правда? 🙂
(6) У нас один сотрудник, «выходец» из КАМИНА, до сих пор использует венгерскую нотацию. И мне, как человеку, который никогда ею не пользовался бывает очень сложно разбираться в его коде.
(13) Забить на ЗНАЧ — это не то, чтобы не стандарт — это нонсенс.
Ну и как можно прислушиваться к тем, кто постоянно не доделывает вещи до конца.
Кто может спокойной вставить ДВА новых параметра в середину, а не в конец:
Было
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
Стало
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Нас за такое в институте повесил бы препод лично.
(15)
Разработчики типовых и разработчики платформы разные люди и ту функциональность и подходы которые закладывают разработчики платформы разработчики типовых не всегда понимают и следуют ей.
З.Ы. Это мнение сотрудника 1С высказанное в одном из курсов обучения разработке.
(15)
В стандартах разработки рекомендуется параметры расставлять по степени важности слева на право, на сколько помню.
В языках с динамической типизацией тип переменной определяется хранимым в ней значением, а не префиксом.
(18) Самый веский и короткий аргумент ))
(18)
Разве статья о типизации переменных ?
(18)
А в языках со статической типизацией разве тип переменной определяется префиксом ?
(14)Да, это очевидный минус «венгерской нотации» :
Когда первый раз сталкиваешься с исходным текстом программы и если нет пояснения от разработчика, и нет «расшифровки» префиксов в дополнение к исходному коду, то действительно сложно понять эту абру-кадабру.
(20)
Тогда зачем вы советуете указывать префикс к переменной который «подсказывает» какой у неё тип?
(4)Минздрав рекомендует делать и прививки и антигриппозные вакцины. Что ж, всем делать ?
Кстати, пугают, что детей в детский сад не примут или напротив выставят из него.
Чтобы принимать решение, важно понимать плюсы и минусы выбора.
Я иногда обхожусь и без префиксов.
(3)Рекомендую попробовать однажды.
Один из плюсов : меньше букв набирать.
А второй плюс : префикс воспринимается как «фон» для смысла самой переменной.
Всё-таки чем короче словосочетание, тем быстрее понимается.
(21)
И при чём тут языки со статической типизацией?
(26)Языки со статической типизацией, с динамической типизацией в рамках моей статьи, действительно, ни при чём.
Суть статьи изложена в её первом абзаце.
За счёт префикса переменной можно получить достаточное количество переменных для работы с одним понятием.
(23)То, что префикс указывает на тип переменной, это подсказка самому себе, какой тип данных следует ожидать при работе программы.
Это бывает удобно при работе в отладчике
Но при этом польза и в том, что :
1)В модулях объектов это позволяет избежать затирку переменных типовой конфигурации или реквизитов и табличных частей.
2)Увеличивает количество доступных для разработки переменных, которые названы однотипно
3)Сокращает длину переменных
4)Делает код лучше читаемым.
Естественно, это моё субъективное мнение.
Ломать свои привычки каждому из нас трудно, особенно если нет особой выгоды.
Для кого-то выгода в том, что увидев процедуры и функции с венгерской нотацией, сможет легко разобраться в чужом коде.
(28)
В этом и проблема. Попробуйте погуглить что то ещё по мимо первой ссылки на Вики.
(26) Вас просто не слышат — ему это кажется красивым и всё тут.
Г, за 30лет , еще со времен fox21, взял себе за правило П_ИмяПеременной, на том и держусь.
боСбой
Варианты СписокКлиентовПорядочных , СписокВредныхРаботниковПоКоторымОбязательноПроизойдетКакойЛи
по непонятным причинам не только выговорить, но и написать не могу…
С днем Победы!
(31)Да, с Днём Победы ! Для меня это один из самых важных праздников.
За 30 лет — это опыт программирования, видимо ? То есть :
Как не применяете — это понятно. Я тоже стараюсь быть кратким при создании переменных в разумных пределах.
Хотя в одной моей разработке я был вынужден использовать переменные-словосочетания из 3 и даже 4 слов.
А что означает
?
Можете привести несколько примеров ?
(7)
А за глобальные переменные надо отрывать руки и вносить в черный список ламеров 🙂
(29)Неужели Вы думаете, что я не читал отзывы по «венгерской нотации» на сайтах, посвящённых 1С ?
Если 1/10 программистов иногда применяет этот способ — уже хорошо.
А некоторые просто не слышали о таком методе.
Странная ситуация получается : у меня многолетний способ применения нотации. Я рассказываю о своём успешном опыте на конкретных примерах,
А меня в ответ отговаривают и убеждают прекратить это.
Разве я кого-то отговариваю от его персонального способа написания переменных ? От чего же так немилостивы некоторые рецензенты ?
(29)А своими словами сказать — нет сил ?
И «гуглить «то не знаю что» — какой результат ожидаете ?
(8)
: автор хотел донести до читателей (программистов-стажёров) свою мысль, а не перепечатать статью из Википедии.
Автор хотел поделиться своим успешным опытом. Но получил в ответ убеждения в том, что таким способом практически никто не пользуется
И как раз такие рецензенты и потрудились вставить недостающий, с их точки зрения, текст из Википедии в обсуждении к статье.
Видимо, идея применять «венгерскую нотацию» в текстах 1С многих пугает.
Я допускаю такой вариант, если кто-то будет поддерживать мои разработки.
В этом случае достаточно новому программисту ознакомиться с таблицей кодировки : какой префикс что означает. И можно спокойно читать исходные тексты любителей венгерской нотации.
Такая таблица может храниться в макете отчёта, обработки, общем модуле.
(30)Ему в первую очередь это кажется практичным. А насчёт красивого : да, не без этого. Это лишь следствие, А не причина
Сложно услышать, когда не говорят конкретно, что беспокоит. А намекают то на типы языков с динамической типизацией. То отсылают ещё что-нибудь погуглить.
Такое ощущение, меня пытаются отговорить от того, что удобно мне и что доказало свою пользу.
Может, моя статья пытается кого-то из коллег отговорить от собственного стиля работы с переменными ?
Тогда в чём дело ? Попробуйте объяснить.
(19)
В споре ? Эвона как ! Со мною спорят… Хм. А я и не знал. Статья написана для программистов — стажёров.
Тех, у кого за долгие годы сложился свой стиль, я разве убеждаю бросить все свои привычки и срочно перейти на «венгерскую нотацию» ?
Для Вас это может быть и спор.
Для меня это возможность поделиться удобным способом.
Мне не нужно спорить, чтобы что-то себе доказать.
Пусть каждый найдёт свой стиль. Лично я спокойно отношусь к исходникам других авторов.
А своих исходниках, иногда приводил свою таблицу соответствий. Это должно решать вопрос полного понимания.
Хотя венгерская нотация сама по себе интуитивно понятна, если раньше про неё немного слышал.
(10)Насколько я помню, в исходных текстах типовых конфигураций 1С : 8 на обычных формах встречаются префиксы в некоторых модулях. чаще всего это : «тз», Таблица значений.
(41)Примеры быстро нашлись. Типовая УПП 1.3. Объекты «на замке» :
(4)И при этом в типовых конфигурациях 1С, например УПП, венгерская нотация иногда встречается. Пример в прикреплённом рисунке
Я бы код сделал чуть по-другому :
Показать
то есть вместо счётчика «Сч» вставил «нТовары» (н — number)
Согласитесь : Проблема не в самой «венгерской нотации», а в непонимании, что автор программного кода хотел сказать, применив какой-либо префикс.
Переменная «Сч» : «Счётчик» или «Счёт». Если вчитаться, то это «Счётчик». Но иногда ведь бывает и «Счёт».
(34)
Наверное, в особо критических случаях и у меня может возникнуть такая же мысль.
Хотя я стараюсь придерживаться точки зрения, что сам иногда допускаю обидные «ляпы».
Сам я ведь когда-то тоже был начинающим программистом и делал «детские» ошибки.
В общем, думая о других со злостью, готовы ли мы простить себя за свои бывшие ошибки ?
(44) с экзистенциальной точки зрения мы думаем о других со злостью когда за все то же самое не прощали нас.
Поэтому простить нужно не себя, а тех, кто предъявлял к нам избыточные требования, если все это сегодня действительно никому не нужно.
(44) Ах, хорошо еще, что я не написал «сжигать на костре» или не придумал еще более ужасную казнь…
Смайлик, конечно, не заметен в тексте? И в цитату специально его не включили, надо полагать, чтобы о «злости» можно было сказать?
(39)
Никто вас не отговаривает. Продолжайте делать так как вам нравится.
1С не единственный язык с динамической типизацией. Внезапно?
От того кто даже не попробовал никакого.
https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/general-naming-conventions
В MS где на сколько я знаю и придумали использовать HN почему то от неё отказались… даже жирным выделили.
«Да я всегда так делала», «Да мы всегда так работали» и тд. Любой бухгалтер которому сказали что он делает что то не правильно. Но это не аргумент.
Иногда встречается ещё не есть система префиксов. Если бы эта система была из разряда best practics то наверное её использовала бы 1С, она была бы описана в стандартах и ею бы пользовались. В коде можно много чего встретить, его пишут люди. Применить один раз префикс «тз» это не то же самое что писать весь код таким подходом.
Звучит как клуб анонимных ….
Пусть каждый придерживается общепринятых стандартов и практик в конкретной среде и языке.
Только надо знать в каком макете или какой обработке она хранится. Внезапно окажется что у 10 программистов 10 разных стандартов префиксации и они работают над одним проектом….
Намекают не на «типы», а прямо говорят что тип переменной определяется хранимым в ней значением. И если вдруг окажется что там будет другой тип? Или необходимо в переменную поместить значение другого типа, то придётся создавать ещё одну переменную?
Не надо учить других плохому.
Для того что бы «помнить» какого типа переменная есть другие подходы.
(6)
Нет никаких «двойных» стандартов. Есть стандарт фирмы «Камин». К тому же могут быть «исторические» предпосылки к применению ВН. Например когда то давно кто то этот стандарт ввёл внутри компании и теперь учитывая большое количество кода отказаться от неё просто так не могут. То что фирма Камин использует ещё не значит что это правильный и хороший подход.
К тому же не верно делать выводы на основании одного случая. Одна фирма использует, 99 компаний не используют… «Ошибка выжившего».
(25)
А что буквы могут закончиться?
(25) Мало кто знает, но Ctrl+Пробел никто не отменял ещё.
(43) Тоже люблю букву ё, но в соответствии со стандартом 1С будет «Счетчик» и тут такой сложности конструкция, да и название переменной настолько очевидное, что префиксы не нужны. Какие ещё у вас бывают счётчики? Зачем вообще префикс этой переменой?
А использовать совместно транслит и русские слова — это феерично.8-D
(40) Тем хуже, что статью вы адресуете стажёрам. Вы портите им жизнь в самом начале карьеры.
Долгое время я переделывал цветовую гамму конфигуратора на монохромный. Когда на курсах по платформе это увидел препод, он весомо заметил «Не пытайтесь подстраивать под себя платформу и использовать уникальный стиль программирования. Так вы усложняете жизнь и себе, и другим.» Со временем я бросил эту затею и привык к штатной цветовой гамме. Я не переделываю её теперь на каждом компе и севший после меня программер не восклицает «омг, что за хрень тут с 1С случилась!»
Так же и тут вы советуете новичкам использовать архаизм. Это плохо.
(28)
Ничего не затирается, потому что глобальные переменные начинаются с префикса «гл», а реквизиты адресуются через «Объект». Исключение — модуль объекта, но и там ничто не мешает использовать новичкам «ЭтотОбъект», раз уж вы считаете этот кейс настолько распространённым.
В примере выше я показывал, что в русском языке достаточно слов и словосочетаний для уникальных имён переменных. А если проблемы всё же возникают, то следует поработать в направлении более точного определения сущности переменных и развитием лексикона. У меня в примере не было проблем с дублированием имён переменных, так ведь?
Садись, два. Ctrl+Пробел работает во всех версиях платформы.
В примере выше я наглядно показал, насколько лучше читается код с переменными, именованными в соответствии со своей сутью.
Считаю навязывание утратившей актуальность практики программирования начала 90х вредным для сообщества.
(41) То есть Вы предлагаете равняться на нарушение программистами 1С собственного стандарта? Тем более, что приведённый Вами код либо старый (УПП), либо посторонней фирмы (Камин).
(39) Попробую. Ваша практика программирования удобна именно вам. Хорошо, что вы поделились ей. Выше были отзывы коллег программистов с подобными практиками и они негативные. Вам удобно и вы не думаете об удобстве тех, кто будет ваш код потом сопровождать? Велкам, используйте! Не стОит на каждый коммент отвечать своей пачкой нелепых аргументов «лучше, удобней, короче».
(55) толку нет ломать копья
никто никого не переубедит
в споре истина не рождается, каждый останется при своем
пысы осталось только на личности перейти ))
(57) Полностью с Вами согласен, написал в надежде, что новички (для которых статья написана) прочтут камменты и сделают выводы.
В начале карьеры, как и в конце имхо, следует программировать так, как удобно самому. Сначала набиваем руку, нарабатываем понимание механизмов платформы в каком угодно стиле.
И только затем можно говорить о командной работе, преемниках и удобстве обслуживания вашего кода другими людьми.
Какой смысл пытаться стать полноценным членом команды при отсутствии понимания программы?
Другой вопрос в том что рефакторинг становится сложнее. Его и раньше было сложно обосновать в финансовом плане.
(59)
Ничего не мешает «набивать руку» сразу правильно, чем потом переучиваться.
(60) ребенок сначала учится говорить, писать каракули и только затем — писать правильно
Вы будете от своего ребенка требовать в год и два месяца грамматически верно произносить прозу Толстого?
То, что программисты взрослые люди не значит что при использовании нового для них языка программирования они должны правильно писать переменные для того чтобы текст был понятен всему коллективу.
Они пишут для 1с. Главное чтобы правильно понимала платформа. Тогда и ошибок будет меньше.
Попробуйте код прочитать вслух.
(61)Любую ситуацию можно довести до абсурда и придумать любую глупость. В том числе про детей, программистов и прозу Толстого…
К программированию это мало относится.
Изначально венгерская нотация была изобретена не от хорошей жизни. Ее использовали в языках программирования с кучей похожих типов (плюс указатели) и статической типизацией, а понимание конкретного типа переменной часто было критичным.
Сейчас венгерскую нотацию практически не используют, по крайней мере — в чистом виде. Потому что современные IDE в таких языках умеют подсказывать тип.
В 7.7 я еще использовал элементы венгерской нотации. Типа «тз», «сз» и так далее. Но в 8-ке стиль работы с коллекциями изменился в лучшую сторону плюс, хочется верить, мой стиль кодирования тоже улучшился. И венгерская нотация лично мне стала неприятна. Без нее код можно сделать более читабельным. Сейчас я использую разве что «м» для переменных модуля, но переменные модуля я тоже практически не использую. Можно сказать, что сейчас я использую элементы венгерской нотации для уточнения смысла в названии переменных («СтрокаБлаБла», «ЭлементБлаБла», «ТаблицаБлаБла» и так далее). Но это читается естественно и не имеет недостатков венгерской нотации в ее чистом виде.
Если не размазывать контекст, хорошо структурировать код и давать хорошие смысловые имена переменным — в венгерской нотации в чистом виде нет необходимости. Такое мое мнение, к которому я эволюционно пришел 🙂
Правильно, чем потом писать тонны инструкций, лучше изначально продумать, всё верно
(16) Не Арутюнов?
(65)Если память не изменяет то вроде он.
(63)
А как 1С:8 подсказывает тип , если Вы её причисляете к современным IDE ?
Это точку надо поставить после переменной ?
Интересно взглянуть на Ваш стиль программирования на примерах, где применяются таблицы значений, массивы, списки значений, ссылки (справочники, документы) и объекты (справочники, документы).
Правильно говорят : лучше один раз увидеть, чем сто раз услышать.
(63)
Насколько я помню, в Си просто компилятор выдал бы ошибку. Пришлось бы потратить время на исправление выражения в исходном тексте.
В 1С нет статической типизации и поэтому свой промах с типом переменной требует значительного времени, чтобы найти эту ошибку.
(68)ВН не избавляет от «промахов» с типом переменной, а иногда и усугубляет ситуацию, когда вы ожидаете тип из префикса, а там оказывается другой тип. Если сомневаетесь в типе переменной то проверяете его явно и обрабатываете исключением, а не ждёте когда в рантайме вывалится ошибка.
(67)
Откройте современную типовую(УТ11, ЗУП3 и тд), соглашения по написанию кода с ИТС и смотрите как там код пишут и не забывайте про «здравомыслие» что бы не впадать в крайности. Типа «вот тут 1Сники отошли от стандарта» значит можно весь код писать как попало.
Как то взяли разработчика, первым делом дали ему стандарты и соглашения по написанию кода, мы же всё таки в команде работаем. Так вместо того что бы учится писать по правилам принятым 1С и в той компании где мы все работали он(как и вы с примером из УПП) искал отклонения от стандартов в типовых и всем кругом говорил смотрите 1Сники не соблюдают стандарты по этому и он не обязан.
А свой говнокод называл «собственным стилем и виденьем художника»…. через месяц был уволен…
И еще один ньюанс.
Нужно отличать системное программирование (в т.ч. близкое к железу) от программирования бизнес-логики.
В программировании бизнес-логики с переменными красота — они почти всегда отражают конкретные аспекты бизнес-области. В итоге им можно давать «говорящие» имена, которые автоматически закрывают многие вопросы. В системном программировании не так. Там больше на математику с физикой похоже. Это еще одна причина, почему вопрос понимания типов в С/С++ стоял более остро (сами же win api упоминали в первую очередь).
(11) Согласен.
Как по мне, префиксы можно использовать чтобы не было конфликта имен в разных областях видимости.
Например, на форме описан реквизит с именем «Имя1» и в одной из функций описанной в модуле формы вот просто стойкое желание появилось именно с таким же именем переменную заюзать, тогда можно и префикс дописать, но смотрится уже не так как хочется, однако есть же ключевое слово «Перем» позволяющее объявить явно переменную с нужным именем внутри функции/процедуры.
Выходит стоит на постоянной основе явно объявлять переменные, но все отвыкли от этого, так как язык 1С это допускает.
«Венгерскую нотацию» надо использовать конечно 🙂
но вы своими неудобными префиксами всё извратили в худшую сторону.
Префикс — это необязательно 1-2 буквы.
Префикс «Массив» — это тоже префикс.
Префиксы:
«мс» — надо «Массив»
«тз» — надо «ТЗ»
и др.
«Казахская нотация» ито намного лучше ваших префиксов, но устарел