OberonCore
https://forum.oberoncore.ru/

Какие предпочитаете отступления от конвенций ББ?
https://forum.oberoncore.ru/viewtopic.php?f=29&t=3892
Страница 1 из 1

Автор:  Oleg N. Cher [ Среда, 14 Март, 2012 13:30 ]
Заголовок сообщения:  Какие предпочитаете отступления от конвенций ББ?

Я люблю называть константы с большой буквы, а переменные, напротив, с маленькой. Так в любом фрагменте кода сразу видно где значение постоянное, а где переменное. Без заглядываний вверх по тексту.

Также у нас был диалог с Сашей Ильиным, в результате которого он научил меня одной полезной вещи для более удобной разработки с системами контроля версий. Хочу поделиться также с вами, в надежде, что это будет кому-то интересно. Извините за такую форму изложения, но такова была подача информации, делать из неё статью предлагаю кому-то другому, если захочется.

Цитата:
Zorko
Я раньше называл константы только большими буквами, потом откатился до ВотТакогоСтиляКонстант и вотТакогоПеременных, а большие буквы отвёл типам, но теперь склоняюсь к тому, что типы тоже надо называть ПримерноВотТак, чтобы более легко отличать их от стандартных. Смысл – чтобы сразу отличать константы от переменных в тексте программы. Ведь по контексту не перепутаешь идентификатор константы с процедурой или типом.
Sasha
По официальной рекомендации в ББ константы именуются с маленькой буквы. А я с большой стал у себя называть. Есть вот такой интересный пассаж про процедуры:
A procedure always starts with a capital letter, this is true for procedure constants, types, variables, parameters, and record fields.
Zorko
Если с большой, то по контексту понятно где константа, а где переменная. Но согласись, что невозможно перепутать константу с типом или процедурой. Даже для процедур с результатами придуман интересный Пассаж(). И совершенно правильно придуман, как раз вводит полезное различие.
Sasha
Т.е. процедурные переменные должны бы называться с большой буквы, даже если они являются параметрами или полями записи (если я правильно понял).
Zorko
А, процедурные переменные. Это понятно. А как насчёт процедурных констант, что это такое они имели ввиду?
Sasha
Ну, обычную процедуру, наверное
Zorko
Тогда это меняет дело в сторону смысла объявления констант с маленькой буквы. Но мне было бы приятнее с большой. Почему-то. Может даже без логической аргументации. Просто так кажется более удобным. Ведь не так часто используются процедурные переменные. Да и отличить их можно по параметрам (включая пустые () ). Правда, их не перепутаешь с константой. И по имени процедуры не видно – переменная ли это процедурного типа, или же идентификатор статической процедуры.
Sasha
Мне больше нравятся константы с большой буквы, это их выделяет и подчёркивает особую роль. Когда присваиваешь переменной константу, то сразу видно, что это инициализация, а не какой-то рабочий момент переливания из одной переменной в другую.
Zorko
Я, пожалуй, тоже останусь на наименовании констант с большой буквы. ведь в доках ББ – это просто рекомендация. А потом, основываясь на ней, программист сам вырабатывает свой стиль наименования.
Sasha
А процедурные переменные я с маленькой буквы называю – их и так видно, что они процедуры, когда их вызываешь, – по скобкам. Переменная – значит с маленькой буквы, всё остальное с большой. Вот моё правило.
Zorko
Что ж, мне нравится твой стиль. Потому что так в тексте программы появляется дополнительная информация, является ли объект переменной. А процедура это или нет – видно из способа использования.


Вот здесь в посте Евгения Темиргалеева viewtopic.php?f=80&t=1710 упоминается Programming Conventions:

Цитата:
6. Точки с запятыми
Точки с запятыми используются для разделения операторов, а не для их завершения. Это означает, что не должно быть излишних точек с запятыми.


Так вот, я раньше тоже использовал “;” для разделения. А вот такой разговор повлиял на моё понимание вопроса существенно.


Цитата:
Sasha
Что скажешь про лишние ";"? Убираешь их или не обращаешь внимания?
Zorko
Сам лишние ";" стараюсь не ставить, но где встречаю – не смертельно. Мне старинная советская книга попалась в детстве, про Паскаль на PDP-11. Из неё я понял, что “BEGIN Op1; Op2 END” – это составное выражение. Поэтому не ставить ";" перед END стало привычкой.
Sasha
Я чужое не переписываю (как в случае с LOOP'ами), свой код пишу со следующим правилом:
ставлю ";" после всех операторов, кроме RETURN и EXIT. Просто чтобы после RETURN код не "забыть".
Zorko
А при объявлении записей перед END ?
Sasha
Тоже ставлю. Это делаю для того, чтобы можно было любые 2 строки поменять местами без лишней мелкой правки. Copy-paste тогда работает беЗшовно
Zorky
Я не против перейти на твой стиль кодинга. А могу остаться на своём, если тебя он не смущает.
Sasha
Ещё одна причина есть для ";" везде: контроль версий. По поводу ";" и контроля версий: когда начнёшь сравнивать соседние версии файлов, то увидишь, что строки с изменениями подсвечиваются, выделяются цветом. Когда делаешь это помногу, то удобнее, чтобы подсвечивалось только то, что действительно важно, что имеет отношение к сути внесённого изменения. В этот момент начинают мешать соседние строки, на которые ты только лишь добавил ";", чтобы написать новый код ниже. Понимаешь?
Zorko
Ага. Оградить мозг от лишней несущественной информации. Это святая правда, кто юзал SVN или GIT – поймёт.
Sasha
Так что не только copy-paste, хотя и он тоже. В Notepad++ постоянно пользуюсь комбинацией Ctrl+Shift+Up/Down - для перемещения текущей строки выше или ниже по тексту

Я только после RETURN не ставлю ";", чтобы компилятор ругался, если что
а все оставльные строки заканчиваются ";" – это связано со инструментами
1) система контроля версий показывает более чистую разницу, если при удалении последней строки не правилась предпоследняя (удаление ";")
2) клавиши Ctrl+Shift+Up/Down в Notepad++ позволяют перемещать строку выше/ниже в тексте; после этой автоматизации вручную удалять или добавлять ";" - явно лишний шаг, пусть уж лучше будут везде
Zorko
Совершенно справедливо. Правда, я пытался показать одному человеку достоинства такой системы, но, по-моему, не убедил его. Это кстати был DarkLord/Madzi (Дмитрий Елисеев)
Sasha
А вообще, идея ставить ";" только если далее есть ещё операторы – это несколько странное эстетство. Да и вообще, все эти ";" можно ставить в начале строки. Будет похоже на ассемблерные комментарии
Zorko
Конечно, их можно ставить скопом по несколько штук, компилятор не ругается. Кроме случаев типа “WHILE a DO ;” в Паскале. но в Обероне такого нет.


Вот так я перешёл на ";" перед и после END, ну вобщем, перенял стиль, рекомендованный Александром. Оценил удобство. При работе с системами контроля версий это действительно очень экономит время и внимание.

Автор:  Иван Кузьмицкий [ Среда, 14 Март, 2012 14:29 ]
Заголовок сообщения:  Re: Какие предпочитаете отступления от конвенций ББ?

Oleg N. Cher писал(а):
Вот так я перешёл на ";" перед и после END, ну вобщем, перенял стиль, рекомендованный Александром. Оценил удобство. При работе с системами контроля версий это действительно очень экономит время и внимание.


Я, наоборот, стараюсь перед END не ставить ";" никогда, потому что отсутствие точки с запятой говорит про финальный вариант кода. Обозначает, что в этом месте код проработан, завершён. Ну а если всё же встречается ";", то это говорит о том, что место сыровато и подвержено дополнениям.

Автор:  Oleg N. Cher [ Среда, 14 Март, 2012 14:44 ]
Заголовок сообщения:  Re: Какие предпочитаете отступления от конвенций ББ?

Иван Кузьмицкий писал(а):
Я, наоборот, стараюсь перед END не ставить ";" никогда, потому что отсутствие точки с запятой говорит про финальный вариант кода.

А Вам в финальном, проработанном и завершённом варианте кода никогда не приходилось добавлять перед END ещё пару строк кода? А потом – всё это в SVN...

Автор:  Пётр Кушнир [ Среда, 14 Март, 2012 14:45 ]
Заголовок сообщения:  Re: Какие предпочитаете отступления от конвенций ББ?

в операторах CASE и WITH пропускаю первый элемент и сразу ставлю |
Код:
WITH
   |x: MyType DO
   |x: YourType DO
ELSE END;

Автор:  Иван Кузьмицкий [ Среда, 14 Март, 2012 14:49 ]
Заголовок сообщения:  Re: Какие предпочитаете отступления от конвенций ББ?

Пётр Кушнир писал(а):
в операторах CASE и WITH пропускаю первый элемент и сразу ставлю |
Код:
WITH
   |x: MyType DO
   |x: YourType DO
ELSE END;


Пустой оператор в WITH труднообъясним. Мне лично режет глаза, потому что обычно на первом месте что-то есть!

Oleg N. Cher писал(а):
А Вам в финальном, проработанном и завершённом варианте кода никогда не приходилось добавлять перед END ещё пару строк кода? А потом – всё это в SVN...
Тысячу раз приходилось. И в Mercurial. И вот что могу сказать - усилие, чтобы лишний раз клацнуть на ";" стоит того, чтобы остановиться и подумать - а всё ли правильно ты делаешь.

Автор:  Пётр Кушнир [ Среда, 14 Март, 2012 15:03 ]
Заголовок сообщения:  Re: Какие предпочитаете отступления от конвенций ББ?

в некоторых случаях можно сказать, что там все места - вторые. Выделение первого среди равных типа данных необъяснимо. Разве что какая-то исторически сложившаяся разница во времени создания проверяемых типов, когда изначально существовал только один.

Автор:  Иван Кузьмицкий [ Среда, 14 Март, 2012 15:39 ]
Заголовок сообщения:  Re: Какие предпочитаете отступления от конвенций ББ?

Пётр Кушнир писал(а):
в некоторых случаях можно сказать, что там все места - вторые. Выделение первого среди равных типа данных необъяснимо. Разве что какая-то исторически сложившаяся разница во времени создания проверяемых типов, когда изначально существовал только один.


WITH первый | второй | третий ELSE END

или

WITH | второй | третий ELSE END

Мозг бьет тревогу, не находя первого оператора на своём месте. Вдруг, это ошибка? Случайно стёрли или осознанно?

Автор:  Axcel [ Среда, 14 Март, 2012 16:03 ]
Заголовок сообщения:  Re: Какие предпочитаете отступления от конвенций ББ?

По поводу ";". Помнится в Алголе 68 на лишние ";" ругался компилятор. Так там был типовой рабочий момент: после компиляции получаешь простыню с ошибками, среди которых ошибок из-за ";" 99%.

Автор:  Евгений Темиргалеев [ Воскресенье, 22 Апрель, 2012 17:09 ]
Заголовок сообщения:  Re: Какие предпочитаете отступления от конвенций ББ?

Мне кажется, отступления должны быть объективно обоснованными. Если же говорить про отступления по причине "мне так больше нравится", то пропадает смысл упоминать про какие-либо соглашения...

Одна заметка (поправка) у меня есть: RETURN обозначает нелокальную передачу управления, если он не последний оператор в процедуре. Соответственно, если писать в стиле Оберона-07, то красить ретурны не надо... Вот я и перестал красить --- проку от покраски никакого, только глаза мозолит.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/