Вместо функций начните с подпрограмм . Скажите им, что программа - это просто список инструкций, рецепт, чтобы рассказать компьютеру, как что-то сделать. И то, что он выполняется одна инструкция за другой (с возможностью сделать несколько шагов параллельно, но об этом позже).
Некоторые задачи являются довольно распространенными и повторяющимися, поэтому было бы ужасно, если бы нам приходилось записывать их снова и снова, поэтому мы пишем их только один раз и делаем из них «меньшую программу» - подпрограмму , которую можно использовать повторно другие части программы. Чтобы выполнить его несколько раз, мы даем ему осмысленное имя в нашей программе. И затем мы можем использовать это имя, когда хотим выполнить эту «маленькую программу» как часть более крупной, назвав ее по этому имени.
Вызов подпрограммы подобен вызову демона, который знает, как выполнить эту задачу, по имени этого демона. Поэтому, когда мы хотим выполнить эту конкретную задачу в нашей программе, мы пишем «вызвать демона по имени Аргот», и демон появляется и выполняет задачу за нас, как мы ему приказали, а затем уходит, и мы можем продолжать работа.
Иногда демону требуется некоторая дополнительная информация, без которой он не может решить, какую из задач выполнить, или чего мы действительно от него хотим. Например, если демон должен построить замок, ему, возможно, потребуется знать, где он должен его построить, или насколько велик и т. Д. Это аргументы, переданные демону ... Я имею в виду подпрограмму, которая теперь становится параметризованных .
Параметры - это те части информации, которые отсутствуют, но необходимы для выполнения задачи. Они немного меняют то, что может сделать подпрограмма. Они как пустые места в рецепте, которые нужно заполнить, прежде чем мы сможем его выполнить.
Аргументы , с другой стороны, представляют собой фактическую информацию (значения), которую мы предоставляем для этих параметров.
Что касается параллельного выполнения, мы можем думать об этом так: всегда есть кто-то (или что-то ), выполняющее программу (список инструкций). Это либо другой человек (вы знали, что «компьютер» когда-то был именем человека, который выполнял вычисления?), Либо машина. Программа - это просто список инструкций, она не работает сама по себе. Там должен быть кто-то или что-то, кто будет делать вычислительный процесс(выполните эти действия из списка). И иногда эти действия могут выполняться параллельно - мы можем раздать копии списка нескольким людям и позволить каждому из них выполнять различный набор задач из списка, если они не перебивают друг друга, или не нужно ждать результатов чужой работы. Это многопоточность для вас;)
Что касается различия между функциями и подпрограммами (также называемыми процедурами ), обычное отличие состоит в том, что функция вызывается для вычисления определенного значения, которое она возвращает в результате своего выполнения, в то время как процедуры выполняются просто для удовольствия;) AKA за их "побочные эффекты" - просто ради операций, выполняемых из списка.
Но если вызов процедуры или функции сначала вызывает некоторые проблемы, вы можете использовать другой термин, который когда-то был популярным: прыжки . Можно перейти в подпрограмму, что означает, что вы перестаете выполнять все, что делаете сейчас, и «перепрыгиваете» в другое место списка (или в другой список) - подпрограмму - для выполнения своих задач. Затем, когда вы закончите, вы «отпрыгнете», то есть вернетесь в место, где вас прервали, чтобы вы могли продолжить выполнение предыдущего задания. Разница между вызовом и прыжком в том, что теперь вы демон.
Что касается методов, упомянутых здесь кем-то, или того факта, что некоторые языки «не имеют функций, только методы» - это не совсем правильно, потому что методы - это функции! - особый их вид : это функции, которые используются для извлечения некоторой информации, инкапсулированной внутри объекта, или работы с ними. Они являются «методом оперирования этими данными». Название происходит от объектно-ориентированной парадигмы, в которой данные заключены в объекты и не могут работать напрямую, только с помощью специальных функций, называемых «методами».
Метод является особенным в некотором другом смысле: он должен знать, с каким конкретным объектом он должен работать / вызываться (объект "this"). Вот почему методы обычно украшаются дополнительным скрытым параметром, который хранит информацию об объекте, для которого он был вызван (указатель «this»). Это усложняет способ вызова функции, но это «деталь реализации», которой программист не должен сильно беспокоиться, если он знает, что делает.