Нотация в программировании что это
Совершенный код: именование в программировании
Что самое трудное в работе программиста? Выдумывать имена для переменных.
Эта шутка пользуется популярностью среди программистов не случайно. Именование часто становится причиной целых баталий. И действительно, то, как мы именуем наши сущности (функции/переменные/константы/классы/модули), имеет большое значение, ведь большую часть времени мы читаем код, а не пишем.
Нотация
Перед тем, как говорить о семантике, давайте посмотрим на синтаксис. Существует несколько популярных нотаций именования:
В реальности их гораздо больше, хотя многие вышли из обихода и не употребляются, либо употребляются крайне редко (по крайней мере, вряд ли многие помнят COBOL-CASE ).
Возникает вопрос, какой выбрать стиль? Ответ очень прост. В каждом конкретном языке программирования существует общепризнанный — часто официальный — стандарт кодирования. Именно он должен являться для вас ориентиром. Потратьте время, найдите стандарт для вашего языка и пробегитесь по нему, обычно он лежит на гитхабе и содержит большое количество показательных примеров.
Размер имеет значение
Те, кто сдавал лабораторные по программированию, хорошо помнят, что большинство переменных в них были однобуквенными. Интересный факт состоит в том, что в первых языках программирования идентификаторы были таки односимвольными, как обозначения в математике. Первым языком, судя по всему, который начал использовать слова как идентификаторы, был лисп. С тех пор (шестидесятые) утекло много воды и использование однобуквенных идентификаторов в современном мире рассматривается как моветон.
И все же их можно и нужно использовать в некоторых ситуациях. Обычно это счетчики и индексы.
Сущность-Действие
Когда мы реализуем функцию, то описываем некоторое действие, а действия в естественных языках выражаются глаголами. Очевидным следствием является то, что имя функции должно быть глаголом. Удивительно, при всей простоте и естественности этого правила, новички часто именуют функции как существительные.
Предикаты
Если учесть, что в указанных языках вызов функции не требует скобок в конце, то такая форма смотрится особенно естественной.
Вхождение
Количество
Это правило важнее даже в другом варианте, а именно, как не надо называть переменную, обозначающую количество:
Такое именование гарантированно вводит в заблуждение. Сущность во множественном числе всегда должна обозначать только коллекцию.
Нотации в программировании: верблюд, змея, шашлык и другие
Пять способов соединить слова в одно длинное название — с вариациями и пояснениями.
Анастасия Телесницкая для Skillbox Media
Часто для хорошего имени переменной или метода программистам не хватает одного слова. Например, название метода calculate, конечно, намекает на то, что в нём что-то вычисляется, но что конкретно — непонятно, нужны ещё слова.
Проблема с языками программирования в том, что пробелы в названиях там недопустимы — нельзя назвать метод calculate elephant weight. Поэтому появились многочисленные варианты соединения слов с помощью изменения регистра букв или дописывания символов-разделителей.
Соглашения об именовании переменных, констант и других идентификаторов в программном коде называют нотациями.
Расскажем, какие нотации существуют и для чего они используются.
Фулстек-разработчик. Любимый стек: Java + Angular, но в хорошей компании готова писать хоть на языке Ада.
Верблюжья нотация (сamel case, camelCase)
Первое слово пишется со строчной буквы, следующие — с заглавной, разделителей между составными частями нет. Торчащие посреди итогового названия заглавные буквы напомнили кому-то горбы верблюда — так возникло название нотации.
Используется во многих языках программирования для именования переменных, функций, методов — например, в Java, JavaScript, PHP. В языке Go в camelCase объявляют внутренние поля и методы.
Язык Go вообще чувствителен к именам: от того, с какой буквы, строчной или заглавной, начинается имя переменной, зависит её область видимости — то, какие другие компоненты приложения смогут к этой переменной обратиться.
Для внутренних переменных подходит camelCase, а для публичных (экспортируемых) обязательно делать первую букву названия заглавной, то есть именовать в стиле PascalCase.
Нотация Паскаля (Pascal case, PascalCase)
Тот же camelCase, но все слова, даже первое, начинаются с заглавной буквы.
Стиль так называется вовсе не в честь Блеза Паскаля. Pascal case стал известным благодаря одному почти забытому языку Паскаль — в нём так именовались переменные, процедуры и функции.
А вот язык Паскаль, кстати, назван Никлаусом Виртом, его создателем, как раз в честь великого француза.
Иногда Pascal case называют upper camel case или, наоборот, camel case называют low Pascal case.
В XIX веке программирования ещё не было, зато уже были химия и химики. Один из них, некто Берцелиус, предложил в формулах веществ называть химические элементы одной или двумя буквами, а итог записывать в одно слово без пробелов. Причём первые буквы составляющих должны быть заглавными.
Благодаря этому прекрасному человеку мы до сих пор записываем формулу поваренной соли в виде NaCl, а не целиком Sodium Chloride или менее читабельно — NA CL.
Змеиная нотация (snake case, snake-case)
Слова разделяются символами подчёркивания — они как бы ползут по строке, в результате получается длииинное, как змея, название.
Используется, например, в языках Python и Rust для имён переменных и функций.
Если в предыдущем примере заменить все буквы на заглавные, то получится SCREAMING_SNAKE_CASE (кричащая змеиная нотация).
Эту вариацию чаще всего применяют для определения констант — в тех же Python и Rust, Java, PHP и многих других.
Кричащей её назвали, потому что в интернет-переписке переход на капс часто означает повышение градуса беседы и даже крик.
Исследование Бониты Шариф и её коллег по Кентскому университету показало, что имена, разделённые подчёркиваниями, быстрее распознаются. Чтобы это доказать, учёные записывали движения глаз участников эксперимента, пока те читали названия в разных нотациях.
Шашлычная нотация (kebab case, kebab-case)
В этой нотации слова разделяют символом дефиса. При некоторой доле фантазии можно представить, что слова при этом как бы насаживают на шампур — вот и получается шашлык (kebab).
Примеры использования мы каждый день видим в URL-адресах, ещё kebab-имена дают CSS-стилям и HTML-тегам. В стайлгайде для Angular (фреймворк для веб-разработки) в kebab-нотации рекомендуют называть файлы компонентов, сервисов и других элементов приложения.
Существует kebab-case со всеми заглавными буквами — это SCREAMING-KEBAB-CASE (кричащая шашлычная нотация). Второе название такого стиля — COBOL_CASE, потому что в нём записывают все названия в языке COBOL. Это старый, но очень живучий язык.
Проблема с этой нотацией в том, что знак дефиса можно интерпретировать как минус. Так что, если поставить этот разделитель не там, можно получить весёлые и странные баги.
Плоская нотация (flat case, flatcase)
Чтобы получить наименование в этом стиле, нужно просто записать слова рядом без пробелов, все буквы каждого слова должны быть строчными.
Переменные, классы и другие элементы программ обычно так не называют — их будет сложно разделить на слова при чтении, особенно если слов больше двух, как в примере. Зато плоская нотация встречается в именах пакетов. В Java, например, можно создать пакет com.example.flatcase.mypackage.
Но чаще всего такого рода длинные надписи мы видим в соцсетях — #этожеобычнаяпрактикадлятегов 🙂
Как выбрать нотацию
Лучшей нотации на все случаи жизни не существует. Для разных языков программирования есть разные соглашения о наименованиях — это свод правил с рекомендациями, какие имена стоит выбирать для разных элементов программы (переменных, классов, методов и тому подобного). Например, здесь такого рода соглашения для Python, а здесь — для Java.
Обычно разработчики придерживаются этих общепринятых рекомендаций, но никто не запрещает IT-компаниям устанавливать свои правила, если они не противоречат синтаксису языка. В таком случае лучше соблюдать местные соглашения — если, конечно, вы хотите задержаться в этой компании 🙂
Мы на наших курсах не своевольничаем — учим называть переменные по всем канонам языка: будь то Java, C#, популярный сейчас R или другие из нашего каталога курсов. Бонусом к правилам наименования — навыки программирования на выбранном языке, а потом и помощь в трудоустройстве.
Язык нотаций: как объяснять сложные процессы с помощью блок-схем
Некоторые стратегии email-маркетинга похожи на сценарии Дэвида Линча: если не объяснить, что к чему относится и как работает, не разберёшься.
Чтобы клиенту было проще понять стратегию, мы оформляем её не только в виде текстового описания, но и в виде схемы. А чтобы все схемы были «написаны» на одном языке, мы используем нотации.
Что такое нотация
Нотация — это набор графических элементов для отображения элементов системы. Проще говоря, нотация определяет правила, по которым мы обозначаем на схеме процессы, операции и события и соединяем их между собой.
Как мы выбирали нотацию
Существуют десятки нотаций: как простых, так и очень сложных, которые используются в программировании, логистике, бизнес-анализе — везде, где нужно описать процесс. Разберёмся, какие из них нам подходят.
Наша цель — описать, как мы встраиваем email-маркетинг в существующую систему коммуникации бренда с покупателями или, что реже, как выстроить эту систему с нуля.
Задача — выстроить цепочки взаимодействия между участниками и показать, когда и при каких условиях мы будем отправлять рассылки.
Плюс у нас есть свои требования к нотации:
Нотации, которые подходят нам, в проектировании бизнес-процессов относятся к классу workflow. Это так называемые диаграммы потоков работ, которые отображают последовательность выполнения действий во времени.
Грамотно и без космических обещаний
Рассмотрим основные элементы этих нотаций на примерах простой блок-схемы, известной с уроков информатики, популярной нотации ARIS eEPC и более сложной современной нотации BPMN.
Список базовых элементов
Элемент | Блок-схема | ARIS eEPC | BPMN |
События. Указывают на границы процесса — начало и конец. Также могут отображать промежуточные события в процессе. | |||
Операция процесса. Элементы для отображения действий (задач, функций). Совпадают практически во всех нотациях класса workflow. | |||
Шлюз, или оператор логики. Служит для описания ситуации, когда те или иные условия влияют на ход процесса. Отвечает на вопросы «и», «или», «либо-либо». | |||
Стрелки «связь между операциями». Показывают, что операция наступает только после завершения предыдущей. По сути, демонстрируют ход процесса во времени. | |||
Стрелки «поток информации». Отображают обмен сообщениями (документами, письмами и прочим) между участниками процесса. |
Теперь попробуем описать простую стратегию в каждой из нотаций.
1. Простая блок-схема
В нотации «Простая блок-схема» чаще всего используют несколько элементов: процесс, решение, документ, данные и стрелку. Стрелки либо не именуются вообще, либо создатель схемы старается дать им короткие и понятные названия.
Схема получается действительно простой и интуитивно понятной и вполне подойдёт для описания небольших стратегий. К тому же она нестрогая, а это значит, что вы можете создать собственные элементы и комбинировать их на своё усмотрение.
Важно помнить, что, если вы хотите внедрить методику построения схем в компании, вам нужно заранее разработать внутренний стандарт её использования. Иначе мы получим много разных схем, в которых будет сложно ориентироваться.
2. ARIS eEPS
Аббревиатура eEPC расшифровывается как extended Event Driven Process Chain — это расширенное описание цепочки процесса, управляемого событиями. Событие «создаёт» операцию (функцию), которая в свою очередь «создаёт» следующее событие.
При построении схемы в нотации ARIS eEPC нужно учитывать основные правила:
— каждой функции должно предшествовать событие;
— каждая функция должна завершаться событием;
— в каждую функцию может входить и выходить только одна стрелка, связывающая её с событием-причиной или с событием-следствием.
Основной недостаток этой нотации, как и простой блок-схемы, в том, что она не отражает взаимодействие участников процесса. В остальном она довольно удобная и понятная как для построения, так и для чтения.
3. BPMN
Об этой нотации стоит рассказать подробнее. Она основана на методологии BPM (Business Process Management — управление бизнес-процессами). Схема в нотации BPMN моделирует поведение участников бизнес-взаимодействия во времени.
BPMN выбирают профессионалы управления бизнес-процессами, которым нужно выстроить стратегию бизнеса, выявить недостатки и модернизировать. Эта нотация позволяет и отразить детали, и взглянуть на бизнес-процесс с высоты птичьего полёта.
Язык нотации BPMN сложный, он требует специального изучения. Однако не обязательно использовать все элементы: можно выбрать такие, которые подходят именно вам.
Особенности элементов нотации BPMN
Например, «Отправить письмо-подтверждение заказа» — задача, но, если мы захотим указать на схеме процесс «Оформление заказа», она станет подпроцессом внутри этого процесса.
Задачи и подпроцессы могут иметь маркеры. Например, силуэт человека — пользовательская операция (выполняет сотрудник), шестерёнка — сервисная (выполняется сервисом автоматически).
Например, в процессе «Оформление заказа» старт — это клик на сайте на кнопку «Оформить заказ». Финиш — получение посылки или оставление отзыва.
Промежуточное событие — к примеру, отмена заказа. После него нужно выполнить ещё ряд действий: отправить подтверждение отмены заказа, выяснить причину и прочее.
Так, параллельный шлюз (И) обозначает ветвление процесса на параллельные потоки, когда действия выполняются одновременно.
Например, после того, как становится известно, что товара нет на складе, нужно в одно и то же время информировать клиента о задержке доставки и отправить запрос на склад.
Эксклюзивный шлюз (ИЛИ) можно представить в виде вопроса, на который может быть несколько ответов, но в результате верным будет только один.
Например, задаем вопрос: «Как клиент хочет оформить доставку?». Если самовывозом, то нужно отправить письмо, что товар забронирован. Если другим способом — выслать трек-номер посылки.
Неэксклюзивный шлюз (И/ИЛИ) обозначает условие, в результате которого могут выполняться параллельные действия или только одно действие.
Комплексный шлюз означает, что действие произойдёт при выполнении каждого из действий в ветвлении.
Например, письмо-подтверждение подписки отправится, если лид подписался на рекламную рассылку и с pop-up, и в личном кабинете, и при оформлении заказа.
Данные | Элемент |
Объекты данных. Отображают информацию, которая нужна для выполнения операции (входящие данные) или появляется в результате действия (исходящие данные). |
Например, после того, как банк проверит кредитную историю клиента, появятся дополнительные данные, которые нужно передать в ESP для оповещения об одобрении кредита или отказе.
Соединяющие элементы | Элемент |
Потоки управления. Используются для связи элементов потока (событий, задач, шлюзов). Если нужно, над стрелкой можно прописать текст. |
Если вы не хотите нагромождать на схеме шлюзы между задачами, можно обозначать условия специальным маркером на конце стрелки:
Артефакты | Элемент |
Сноска, или текстовая аннотация. Используется для уточнения значения элементов схемы, чтобы она была понятна неподготовленному человеку. |
Как работать с нотацией BPMN
При работе с BPMN необходимо соблюдать стандарты. Нельзя по своему усмотрению менять вид графических элементов и расставлять связи между ними, если вы действительно хотите научиться говорить на языке BPMN.
Как быстро нарисовать схему
Создавать схемы несложно, главное — понимать суть процесса, продумать механизм его реализации и следовать алгоритму создания схемы.
Какие инструменты использовать
Нам этого хватает, поэтому платными инструментами мы не пользуемся. Но, если очень хочется, можете купить Visual Paradigm. По подписке он стоит от 6 до 89 долларов в месяц, полная лицензия — от 99 до 1 999 долларов. Также популярен Microsoft Visio (по подписке — от 5 до 15 долларов в месяц).
Самая интересная возможность в платных версиях — проверка процессов. Когда вы построите схему, программа проверит, нет ли логических ошибок.
Для нас самый удобный из сервисов — BizAgi, потому что именно в нём у каждого элемента есть удобное меню с атрибутами. То есть вам не нужно тратить время на то, чтобы выбрать подходящую длину стрелки между блоками. А ещё он на русском языке.
Пока всё. В следующей статье мы расскажем, как составить полную графическую схему email-коммуникаций в нотации BPMN.
Основы структуры программ
3.3. Языки программирования, естественные языки
Языки программирования являются искусственными творениями. Называя их языками, мы предполагаем возможность их сравнения с естественными языками, подобных английскому или русскому. Языки программирования обладают некоторыми общими чертами со своими двоюродными братьями.
Вполне возможно назвать класс именем «Шорек», а его метод – «Варкалось». Правда, такие имена идут вразрез с правилами стиля.
Создание имен – это общая, без конца возникающая необходимость в языках программирования. В естественных языках вам не приходится изобретать новые слова, если только вы не поэт, не ребенок и не ботаник, специализирующийся на флоре бассейна Амазонки. Программист, внешне выглядящий вполне взрослым и не имеющий никакого отношения к цветкам из Амазонки, может в течение дня придумать несколько десятков новых имен.
Схожесть языков программирования и естественных языков полезна, поскольку способствует пониманию программ. Но не стоит заблуждаться – языки программирования отличаются от естественных языков. Они являются искусственными нотациями, спроектированными для решения специфических задач. В этом их сила и слабость.
Естественные языки в ваших программах
Естественному языку отводится важная роль в программах: в комментариях. Мы уже говорили, что любой программный текст, начинающийся с двух тире «—» и вплоть до конца строки, является комментарием. В отличие от остального программного текста, комментарии не следуют точным правилам синтаксиса, поскольку они не участвуют в выполнении программы и, следовательно, не имеют семантики. Комментарии объясняют программу, помогая людям лучше понять ее смысл.
Естественные языки служат основой построения идентификаторов, в частности, имен классов и методов. Методологический совет: используйте полные, содержательные имена, такие как METRO_LINE для имени класса. Аббревиатуры следует применять только в тех случаях, если они используются в естественном языке.
Называя наши нотации «языками», мы оказываем им не вполне заслуженную честь – они скорее представляют расширенную версию математической нотации, используемой для записи формул.
Термин «код», означающий текст в языке программирования, отражает этот факт. Он используется в выражении «Строка кода», как в тексте «Windows Vista содержит более 50 миллионов строк кода». Мы иногда называем процесс программирования кодированием, подчеркивая этим немного уничижительным термином, что речь идет о процессе низкого уровня, исключающего проблемы проектирования, как, например, в данной фразе: «Они думают, что все идеи уже высказаны, и все, что остается, – это простое кодирование». «Кодировщик» – уничижительное название программиста.
3.4. Грамматика, категории, образцы
Для описания синтаксиса естественного языка – структуры текстов – лингвисты задают грамматику языка. Для простого предложения типичная грамматика скажет нам, что это частный случай (мы говорим «образец») некоторой «категории», называемой в грамматике: «Простое_глагольное_предложение». Предложение состоит из трех компонентов, каждый из которых является образцом некоторой категории:
Ровно эти же концепции будут применяться для описания синтаксиса языков программирования. Например:
В лекции 11 мы в деталях опишем синтаксис языка. Сейчас же достаточно ограничиться определением.
Определения: грамматика, категория, образец
Грамматика языка программирования – это описание его синтаксиса.
Категория (грамматическая) – элемент грамматики, описывающий некоторую категорию возможных синтаксических элементов в соответствующем языке.
Образец категории – это синтаксический элемент.
Отметим соотношение между категорией и образцом. Категория задает тип синтаксического элемента, образец является экземпляром этого типа. Так:
Для имен, задающих категории элементов, будем использовать специальный стиль, чтобы отличать их от элементов программы.
3.5. Вложенность и структура синтаксиса
Некоторые элементы синтаксиса, такие как точка и ключевые слова class, do, end, играют роль разделителей и сами по себе не несут семантического смысла. Мы не рассматриваем их как образцы.
Убедитесь, что вы понимаете представленную здесь синтаксическую структуру.