История изменений
Исправление Xenius, (текущая версия) :
Вроде нет, но количество памяти процесса меняется, значит эффект есть.
В семантике языка он не отражается, так что можно считать, что нет. Или вот процессор выделит какое-то количество тепла. Или например поменяется значение в его регистрах для генерации рандома — в любом случае это побочным эффектом не считается.
Вроде бы у нее побочного эффекта нет, но если ты добавишь логгирование промежуточных вычислений, то он появляется, или нет? Ведь на консоль выводятся значения.
Если обернёшь в условную компиляцию, то по умолчанию ПЭ нет, а если сделаешь -D DEBUG или как там, то появится, но я думаю, такое допустимо. Хотя можно через дебаггер запустить.
А вот запись на диск, которая, по идее, должна быть процедурой с побочным эффектом, на самом деле будет функцией, потому что кроме побочного эффекта записи на диск у тебя будет результат исполнения, который в случае си станет возвращаемым значением.
Если запись на диск - это процедура, то собственно запись на диск и есть главный эффект, а не побочный. Процедура для того и сделана, чтобы писать на диск.
который в случае си станет возвращаемым значением.
Можно возвращать значение через var-параметр или в случае с Си через параметр с амперсандом, как в scanf и оставить это процедурой или void-функцией.
Разница есть как раз таки в голове (программиста или читающего код). Если такие правила соблюдаются, то сразу видно, где вызов подпрограммы ради эффекта (не побочного, а именно основного), а где ради значения.
Но это не нужно на начальных этапах обучения, когда студент просто осваивает простейшие языковые конструкции.
А почему бы и нет? Если давать для начала Pascal и объяснить различие между функциями и процедурами, то автоматически всё будет.
В любом случае я не согласен с теми, кто вопит «Давайте выкинем Scheme / Pascal из обучения, они устарели!!1одинодин», потому что я считаю, что изучение двух языков далеко не обязательно займёт больше времени, чем изучение одного языка.
Исходная версия Xenius, :
Вроде нет, но количество памяти процесса меняется, значит эффект есть.
В семантике языка он не отражается, так что можно считать, что нет. Или вот процессор выделит какое-то количество тепла. Или например поменяется значение в его регистрах для генерации рандома — в любом случае это побочным эффектом не считается.
Вроде бы у нее побочного эффекта нет, но если ты добавишь логгирование промежуточных вычислений, то он появляется, или нет? Ведь на консоль выводятся значения.
Если обернёшь в условную компиляцию, то по умолчанию ПЭ нет, а если сделаешь -D DEBUG или как там, то появится, но я думаю, такое допустимо. Хотя можно через дебаггер запустить.
А вот запись на диск, которая, по идее, должна быть процедурой с побочным эффектом, на самом деле будет функцией, потому что кроме побочного эффекта записи на диск у тебя будет результат исполнения, который в случае си станет возвращаемым значением.
Если запись на диск - это процедура, то собственно запись на диск и есть главный эффект, а не побочный. Процедура для того и сделана, чтобы писать на диск.
который в случае си станет возвращаемым значением.
Можно возвращать значение через var-параметр или в случае с Си через параметр с амперсандом, как в scanf и оставить это процедурой или void-функцией.
Разница есть как раз таки в голове (программиста или читающего код). Если такие правила соблюдаются, то сразу видно, где вызов подпрограммы ради эффекта (не побочного, а именно основного), а где ради значения.
Но это не нужно на начальных этапах обучения, когда студент просто осваивает простейшие языковые конструкции.
А почему бы и нет? Если давать для начала Pascal и объяснить различие между функциями и процедурами, то автоматически всё будет.