Здравствуйте, alpha21264, Вы писали:
Pzz>>При чём тут модность-молодёжность?
A>При том, что в программистском мире тоже есть религиозные проповедники, которые проповедуют свою религию. A>Да, религии бывают разные, можно верить в непорочное зачатие, а можно верить в модификатор const. A>Поскольку мне за всю мою жизнь не встречались проблемы, которые лечит модификатор const, то я считаю его лишним.
Попробую еще раз объяснить.
У меня такое ощущение, что ты воспринимаешь предупреждения, как такую ненужную тебе защиту от случайностей. Ну, типа, передали функции строку, она
туда сдуру писанула. А со словом const не сможет. Но ты таких дурацких функций никогда не пишешь, поэтому тебе такая защита не нужна и только мешает.
Я же пытаюсь рассказать, что этот механизм можно и более интеллектуальным способом использовать.
Допустим, у меня есть некоторый тип. Ну, скажем, распарсенный HTTP URL, чтобы пример был простым, но уж не слишком.
HTTP URL, это не такая простая штука, как кажется, поэтому я хочу оставить себе свободу в выборе (и будущем изменении) его внутреннего устройства. Поэтому я представляю его интерфейс как opaque структуру с набором функций-аксессоров (или в виде класса с приватными полями и доступом через публичные методы, если мы про C++, не к ночи он будет упомянут).
Часть этих методов просто возвращает информацию. Ну, например, схему или hostname или TCP-порт. Они не модифицируют структуру. А часть модифицируют. Например, добавляют или удаляют IPv6-зону к адресу, или меняют путь или чего еще.
Так вот, const в данном случае помогает выразить некоторые вещи относительно семантики операции, да еще и компилятор за мной присматривает, что я не наврал. Это куда как удобнее, чем описывать семантические детали в виде комментариев и из методов контроля иметь только чистую совесть и внимательность разработчика.
Когда применяешь этот подход систематически, через некоторое время обнаруживаешь, что на языках без контроля типов, например, на Питоне, писать очень тяжело, приходится головой всё время думать о том, о чём бы мог подумать компилятор.
Pzz>>Предупреждения помогают. Просто надо уметь их готовить.
A>Ну вот gcc-шники не умеют. Полезное предупреждение тонет в массе бессмысленных и ненужных. A>Это как сказка про пастушка, который кричал "волки-волки" до тех пор, пока его не перестали слушать.
Ну, понимаешь, в нормальном проекте предупреждений 0. И он собирается с -Werror. Поэтому когда предупреждения вдруг появляются, они не тонут в шуме.
Да, иногда приходится тратить некоторое время, чтобы загасить предупреждение, возникшее без нужды. Например, почему-то на убунте компилятору очень важно, чтобы я обязательно проверял значение, которое вернул вызов write и подобные ему, и даже общепринятый метод (void) write(...) ее не берет. А на федоре gcc плюс-минус той же версии так себя не ведёт.
Но в целом, такая хрень встречается нечасто и много времени не занимает.