Информация об изменениях

Сообщение Re[6]: Как можно было так протупить с const параметрами? от 22.08.2022 5:01

Изменено 22.08.2022 5:10 vsb

Re[6]: Как можно было так протупить с const параметрами?
Здравствуйте, Marty, Вы писали:

vsb>>Я знаю си, это в любом языке работает так же. Это не меняет моего мнения. Современный код вообще должен быть в основном иммутабельным. Мутабельная переменная это должно быть, ну не исключение, но точно не большинство кода.


M>Не в любом. В твоей джаве все по ссылкам передается, и вот там, да, const имеет некоторый смысл.


В жаве нет передачи по ссылке. В жаве исключительно передача по значению. В жаве ссылок в языке вообще нет, только указатели.

> Ну и, я не помню, как там в джаве, но если в плюсах передавать указатель на интерфейс, да или просто на объект, то все его вызываемые методы должны быть const, если указатель объявлен как const. Это уже прорастает в интерфейс объекта. Особенно это весело, если это интерфейс, там обычно методы const'ом не обмазывают.


В С++ это выглядит как my_class * const mc.

vsb>>Вот открываю рандомный кусок в nginx-е. Ни параметры не меняются, ни 2 локальные переменные не меняются. Это норма.

M>Там две переменные, которые константы, считай, и вполне можно обойтись и без них. А то, что по указателю — меняется. А вот указатель сам — не const, хотя можно было бы так сделать (но зачем? Если ты его в функции случайно поменяешь — а поменять там, кроме как на ноль — особо и не на что — и сразу seg fault при повторном использовании, а если после использования — то вообще и не заметишь). И буквально одной функцией выше — там всё меняется —
M> https://github.com/nginx/nginx/blob/f7ea8c76b55f730daa3b63f5511feb564b44d901/src/http/ngx_http_request_body.c#L820. Такое впечатление, что ты этот случайно тыкнутый фрагмент долго и тщательно выбирал

Не выбирал. В твоем примере параметры не меняются. Из четырех локальных переменных только 2 меняются.
Re[6]: Как можно было так протупить с const параметрами?
Здравствуйте, Marty, Вы писали:

vsb>>Я знаю си, это в любом языке работает так же. Это не меняет моего мнения. Современный код вообще должен быть в основном иммутабельным. Мутабельная переменная это должно быть, ну не исключение, но точно не большинство кода.


M>Не в любом. В твоей джаве все по ссылкам передается, и вот там, да, const имеет некоторый смысл.


В жаве нет передачи по ссылке. В жаве исключительно передача по значению. В жаве ссылок в языке вообще нет, только указатели.

> Ну и, я не помню, как там в джаве, но если в плюсах передавать указатель на интерфейс, да или просто на объект, то все его вызываемые методы должны быть const, если указатель объявлен как const. Это уже прорастает в интерфейс объекта. Особенно это весело, если это интерфейс, там обычно методы const'ом не обмазывают.


В С++ это выглядит как my_class * const mc.

vsb>>Вот открываю рандомный кусок в nginx-е. Ни параметры не меняются, ни 2 локальные переменные не меняются. Это норма.

M>Там две переменные, которые константы, считай, и вполне можно обойтись и без них. А то, что по указателю — меняется. А вот указатель сам — не const, хотя можно было бы так сделать (но зачем? Если ты его в функции случайно поменяешь — а поменять там, кроме как на ноль — особо и не на что — и сразу seg fault при повторном использовании, а если после использования — то вообще и не заметишь). И буквально одной функцией выше — там всё меняется —
M> https://github.com/nginx/nginx/blob/f7ea8c76b55f730daa3b63f5511feb564b44d901/src/http/ngx_http_request_body.c#L820. Такое впечатление, что ты этот случайно тыкнутый фрагмент долго и тщательно выбирал

Не выбирал. В твоем примере параметры не меняются. Из четырех локальных переменных только 1 меняется.