2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3, 4, 5, 6  След.
 
 О константах и перилах
Сообщение23.12.2018, 22:24 


28/07/17

317
Независимо от языка, так ли необходимы константы, что бы из-за них заморачиваться? Можно просто не менять в программе переменную. А что-бы случайно не забыть, можно назвать, например, const_A.

 Профиль  
                  
 
 Re: Константы в Ruby
Сообщение23.12.2018, 22:44 
Заслуженный участник


02/08/11
7059
Независимо от стиля архитектуры, так ли необходимы перила и ограждения, что бы из-за них заморачиваться? Можно просто не прыгать с края. А что-бы случайно не забыть, можно сделать таблички, например, "осторожно, здесь высоко!"

 Профиль  
                  
 
 Re: Константы в Ruby
Сообщение24.12.2018, 08:31 


28/07/17

317
Ваш пример некорректен. Перила и ограждения жизненно важны и необходимы. Человек может не заметить опасности (например в темноте), или ребёнок может упасть.

Программирование не происходит в темноте, и дети там не гуляют. Я ничего не имею против констант, я просто говорю, что можно довольно безболезненно обойтись без них. Даже если это большой проект и работает много народа.

 Профиль  
                  
 
 Re: Константы в Ruby
Сообщение24.12.2018, 11:11 


28/07/13
165
warlock66613
С тем же успехом можно сказать, что строго типизированные языки тоже не нужны. И разрабы какого-нибудь Rust занимаются ерундой. Ведь можно не прыгать с края и в ноги себе не стрелять. И каменты все решают.

 Профиль  
                  
 
 Re: Константы в Ruby
Сообщение24.12.2018, 11:20 
Заслуженный участник


02/08/11
7059
FomaNeverov в сообщении #1363393 писал(а):
Программирование не происходит в темноте, и дети там не гуляют.
То есть если в некотором месте всегда светло и дети там не гуляют, то перила не нужны, ага?

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

А если это большой проект и работает много народа, то рано или поздно кто-то вашу "константу" поменяет (тем более если общий уровень таков, что ваши _const безболезненно прошли кодревью), и поскольку код написан так, что никто этого не ожидает, эффект будет неочевидный и вы ещё долго будете пытаться понять, что происходит. А когда поймёте - будете думать, как это исправить, ибо окажется, что логика работы уже существенно завязана на неконстатность константы. Но это ещё не самый интересный сценарий: вообще их можно придумать много, но один из самых интересных следующий.

Вы пишете библиотеку, которую юзают два плагина к некоторой программе. Каждый плагин меняет одну и ту же "константу" из вашей библиотеки (некоторые программисты любят "хаки" - очевидно неправильные, но работающие - до поры, до времени решения). В итоге каждый плагин по-отдельности работает прекрасно, но как только они загружены вместе... всё ломается. Хотя я бы, увидев в API библиотеки сonst в названиях вместо const там, где они должны быть, спросил бы WHAT? и поостерёгся использовать такую библиотеку - такую, которая написана тем, кто даже не знает язык программирования, на котором пишет.

 Профиль  
                  
 
 Re: Константы в Ruby
Сообщение24.12.2018, 11:43 
Заслуженный участник


20/08/14
11966
Россия, Москва
А мне пример с перилами понравился, очень правильный.

(Оффтоп)

warlock66613 в сообщении #1363418 писал(а):
Хотя я бы, увидев в API библиотеки сonst в названиях вместо const там, где они должны быть, спросил бы WHAT? и поостерёгся использовать такую библиотеку - такую, которая написана тем, кто даже не знает язык программирования, на котором пишет.
Тут есть одно важное исключение, к теме правда не относящееся: в гарвардской архитектуре указание const бывает автоматически помещает переменную в память программ, что иногда нежелательно (из-за совершенно других методов доступа), вот в таких случаях и могут появиться "константные" переменные без указания типа const (иногда правда делают честно, flash для указания памяти программ и flashconst). Но это скорее то самое исключение, лишь подтверждающее правило.

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение24.12.2018, 14:14 
Заслуженный участник
Аватара пользователя


16/07/14
9416
Цюрих
Предложение из серии "тесты не нужны, просто не делайте ошибок в коде".

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение24.12.2018, 16:43 
Заслуженный участник
Аватара пользователя


30/01/06
72407
FomaNeverov в сообщении #1363328 писал(а):
Можно просто не менять в программе переменную. А что-бы случайно не забыть, можно назвать, например, const_A.

    Любой инструмент можно применять неправильно.

 Профиль  
                  
 
 Re: Константы в Ruby
Сообщение24.12.2018, 21:07 


28/07/17

317
warlock66613 в сообщении #1363418 писал(а):
А если это большой проект и работает много народа, то рано или поздно кто-то вашу "константу" поменяет

Рано или поздно кто-то ещё что-нибудь (не константу) поменяет, или запишет не туда, или туда, но не то. Если так рассуждать, ни один большой проект работать не должен. Но они как-то работают.

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение24.12.2018, 21:13 
Заслуженный участник
Аватара пользователя


16/07/14
9416
Цюрих
Большие проекты работают в том числе потому, что за соблюдением довольно многих правил следит машина, и не даст добавить в них код, нарушающий эти правила.
(и кстати это одна из причин, почему большие проекты легче делать в языках со статической типизацией, например)

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 09:26 
Аватара пользователя


11/12/16
14485
уездный город Н
FomaNeverov в сообщении #1363328 писал(а):
Независимо от языка, так ли необходимы константы, что бы из-за них заморачиваться? Можно просто не менять в программе переменную.


А чем Вы эту переменную будете инициализировать? Она сама не проинициализируется.
Как только у Вас возникает необходимость задать какое-то значение, которое определено до начала выполнения кода, так сразу у Вас возникают константы.
Далее вопрос не в их необходимости, а почему в том или ином языке работа с константами устроена тем или иным образом.

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 10:20 


14/01/11
3125
EUgeneUS в сообщении #1363576 писал(а):
А чем Вы эту переменную будете инициализировать? Она сама не проинициализируется.

Обычно переменные, инициализированные при запуске программы, помещаются линковщиком в особую секцию инициализированных данных, которая на старте заполняется нужными значениями, хранящимися в бинарном образе программы.

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 10:26 
Аватара пользователя


11/12/16
14485
уездный город Н
Так "нужные значения, хранящиеся в бинарном образе программы" и есть константы.

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 10:28 


14/01/11
3125
Это смотря какой смысл вы вкладываете в это слово. Из тела программы вы не сможете обратиться к ним как к обычным константам.

 Профиль  
                  
 
 Re: О константах и перилах
Сообщение25.12.2018, 10:37 
Заслуженный участник


12/07/07
4543
EUgeneUS в сообщении #1363576 писал(а):
Как только у Вас возникает необходимость задать какое-то значение, которое определено до начала выполнения кода, так сразу у Вас возникают константы.
Так действительно бывает в некоторых языках, например в Borland Pascal старых версий, где инициализированные переменные должны были быть описаны в разделе const.
Но константа, которая может меняться во время выполнения программы — это как-то нелогично. Это историческая особенность, связанная, видимо, с расширением языка.

Более естественно описывать константами (помимо реальных констант) переменные, которые не меняются во время выполнения программы (подпрограммы).
А переменные разделять на инициализированные и неинициализированные (определение переменной помимо описания может содержать или не содержать инициализацию). Инициализированным глобальным переменным задаются начальные значения на этапе компиляции, и эти значения хранятся в исполняемом файле.

Upd. Пока набирал уже ответили. Пусть будет дополнением.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 87 ]  На страницу 1, 2, 3, 4, 5, 6  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

Сейчас этот форум просматривают: granit201z


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group