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
6874
Независимо от стиля архитектуры, так ли необходимы перила и ограждения, что бы из-за них заморачиваться? Можно просто не прыгать с края. А что-бы случайно не забыть, можно сделать таблички, например, "осторожно, здесь высоко!"

 Профиль  
                  
 
 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
6874
FomaNeverov в сообщении #1363393 писал(а):
Программирование не происходит в темноте, и дети там не гуляют.
То есть если в некотором месте всегда светло и дети там не гуляют, то перила не нужны, ага?

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

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

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

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


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

(Оффтоп)

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

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


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

 Профиль  
                  
 
 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
8347
Цюрих
Большие проекты работают в том числе потому, что за соблюдением довольно многих правил следит машина, и не даст добавить в них код, нарушающий эти правила.
(и кстати это одна из причин, почему большие проекты легче делать в языках со статической типизацией, например)

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


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


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

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


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

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

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


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

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


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

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


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

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

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

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

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



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

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


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

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