OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 16 Сентябрь, 2019 08:00

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
СообщениеДобавлено: Среда, 14 Март, 2012 13:30 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 320
Откуда: Украина, Днепропетровская обл.
Я люблю называть константы с большой буквы, а переменные, напротив, с маленькой. Так в любом фрагменте кода сразу видно где значение постоянное, а где переменное. Без заглядываний вверх по тексту.

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

Цитата:
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, ну вобщем, перенял стиль, рекомендованный Александром. Оценил удобство. При работе с системами контроля версий это действительно очень экономит время и внимание.


Последний раз редактировалось Oleg N. Cher Среда, 14 Март, 2012 14:46, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Март, 2012 14:29 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2931
Откуда: г. Ярославль
Oleg N. Cher писал(а):
Вот так я перешёл на ";" перед и после END, ну вобщем, перенял стиль, рекомендованный Александром. Оценил удобство. При работе с системами контроля версий это действительно очень экономит время и внимание.


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Март, 2012 14:44 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 320
Откуда: Украина, Днепропетровская обл.
Иван Кузьмицкий писал(а):
Я, наоборот, стараюсь перед END не ставить ";" никогда, потому что отсутствие точки с запятой говорит про финальный вариант кода.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Март, 2012 14:45 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2601
Откуда: Россия, Ярославль
в операторах CASE и WITH пропускаю первый элемент и сразу ставлю |
Код:
WITH
   |x: MyType DO
   |x: YourType DO
ELSE END;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Март, 2012 14:49 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2931
Откуда: г. Ярославль
Пётр Кушнир писал(а):
в операторах CASE и WITH пропускаю первый элемент и сразу ставлю |
Код:
WITH
   |x: MyType DO
   |x: YourType DO
ELSE END;


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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Март, 2012 15:03 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2601
Откуда: Россия, Ярославль
в некоторых случаях можно сказать, что там все места - вторые. Выделение первого среди равных типа данных необъяснимо. Разве что какая-то исторически сложившаяся разница во времени создания проверяемых типов, когда изначально существовал только один.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Март, 2012 15:39 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2931
Откуда: г. Ярославль
Пётр Кушнир писал(а):
в некоторых случаях можно сказать, что там все места - вторые. Выделение первого среди равных типа данных необъяснимо. Разве что какая-то исторически сложившаяся разница во времени создания проверяемых типов, когда изначально существовал только один.


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

или

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Март, 2012 16:03 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
По поводу ";". Помнится в Алголе 68 на лишние ";" ругался компилятор. Так там был типовой рабочий момент: после компиляции получаешь простыню с ошибками, среди которых ошибок из-за ";" 99%.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Апрель, 2012 17:09 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
Мне кажется, отступления должны быть объективно обоснованными. Если же говорить про отступления по причине "мне так больше нравится", то пропадает смысл упоминать про какие-либо соглашения...

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB