LINUX.ORG.RU

История изменений

Исправление Xenius, (текущая версия) :

Вроде нет, но количество памяти процесса меняется, значит эффект есть.

В семантике языка он не отражается, так что можно считать, что нет. Или вот процессор выделит какое-то количество тепла. Или например поменяется значение в его регистрах для генерации рандома — в любом случае это побочным эффектом не считается.

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

Если обернёшь в условную компиляцию, то по умолчанию ПЭ нет, а если сделаешь -D DEBUG или как там, то появится, но я думаю, такое допустимо. Хотя можно через дебаггер запустить.

А вот запись на диск, которая, по идее, должна быть процедурой с побочным эффектом, на самом деле будет функцией, потому что кроме побочного эффекта записи на диск у тебя будет результат исполнения, который в случае си станет возвращаемым значением.

Если запись на диск - это процедура, то собственно запись на диск и есть главный эффект, а не побочный. Процедура для того и сделана, чтобы писать на диск.

который в случае си станет возвращаемым значением.

Можно возвращать значение через var-параметр или в случае с Си через параметр с амперсандом, как в scanf и оставить это процедурой или void-функцией.

Разница есть как раз таки в голове (программиста или читающего код). Если такие правила соблюдаются, то сразу видно, где вызов подпрограммы ради эффекта (не побочного, а именно основного), а где ради значения.

Но это не нужно на начальных этапах обучения, когда студент просто осваивает простейшие языковые конструкции.

А почему бы и нет? Если давать для начала Pascal и объяснить различие между функциями и процедурами, то автоматически всё будет.

В любом случае я не согласен с теми, кто вопит «Давайте выкинем Scheme / Pascal из обучения, они устарели!!1одинодин», потому что я считаю, что изучение двух языков далеко не обязательно займёт больше времени, чем изучение одного языка.

Исходная версия Xenius, :

Вроде нет, но количество памяти процесса меняется, значит эффект есть.

В семантике языка он не отражается, так что можно считать, что нет. Или вот процессор выделит какое-то количество тепла. Или например поменяется значение в его регистрах для генерации рандома — в любом случае это побочным эффектом не считается.

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

Если обернёшь в условную компиляцию, то по умолчанию ПЭ нет, а если сделаешь -D DEBUG или как там, то появится, но я думаю, такое допустимо. Хотя можно через дебаггер запустить.

А вот запись на диск, которая, по идее, должна быть процедурой с побочным эффектом, на самом деле будет функцией, потому что кроме побочного эффекта записи на диск у тебя будет результат исполнения, который в случае си станет возвращаемым значением.

Если запись на диск - это процедура, то собственно запись на диск и есть главный эффект, а не побочный. Процедура для того и сделана, чтобы писать на диск.

который в случае си станет возвращаемым значением.

Можно возвращать значение через var-параметр или в случае с Си через параметр с амперсандом, как в scanf и оставить это процедурой или void-функцией.

Разница есть как раз таки в голове (программиста или читающего код). Если такие правила соблюдаются, то сразу видно, где вызов подпрограммы ради эффекта (не побочного, а именно основного), а где ради значения.

Но это не нужно на начальных этапах обучения, когда студент просто осваивает простейшие языковые конструкции.

А почему бы и нет? Если давать для начала Pascal и объяснить различие между функциями и процедурами, то автоматически всё будет.