Найти тему

Все языки программирования схожи, переосмысливаем подход к функциям на основе объектов.

Ребята, обратите внимание на нюанс.

Вот Александр(suntrope) обратил внимание, что верно.

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

Бовсуновский:

Важно понять, вот какую вещь.

Сама конструкция функции в большинстве языков устроена одинаково, за исключением С++, там идёт тип данных вместо имени, но другие популярные языки имеют ключевое слово для функции и .д.

Но в любом языке есть параметры функции, так как в этом весь смысл функции.

def fun(параметры)

Реализация параметров в каждом языке разная, но сама работа функции не отличается в языках и работает по определённым законам.

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

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

По сути дела работая с языками и встречаясь с функциями основные механизмы мы изучаем и они работают для всех языков.

Но каждый язык имеют свою реализацию по параметрам.

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

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

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

Но нельзя параметры одного языка ровнять с параметрами другого. Здесь работает система подобия. Ниже поясню.

Вот. что я выше писал по функциям высшего порядка, колтин то это тоже поддерживает:

https://kotlinlang.ru/docs/inline-functions.html, но ведь это очевидно, иначе как писать интерфейсы, например отзывчивые по действию.

Как быть. Все современные языки являются Си подобными, так как иного не придумано.

Где начинается путаница, она начинается с этого понятия, процитирую:"процитирую выдающегося человека: «Мне жаль, что я придумал для этого термин «объекты», и люди сфокусировались на побочной идее." -Алан Кей,

изобретатель ООП.

Добавлю:

весь смысл ООП в том, чтобы не беспокоиться о том, что находится внутри объекта. Объекты, созданные на разных машинах и использующие разные языки, должны иметь возможность общаться друг с другом [...]» ~ Алан Кей

Поясняю. Алан Кей под объектом имел в виду сообщение, которое смогут воспринимать все языки.

Объект == сообщению. (позже json реализовал примерно то, что имел в виду А. Кей)

С++ вообще никто не имел в виду.

Просто в язык С++ по своему решили назвать объекты, которые не имели ничего общего с сообщением, они взяли само слово у Алана Кея и добавил ему смысла, то есть в их понятии появилсь следующая картина:

Объект то, что в памяти (ни в коде. а в памяти - это важно)

Имеет:

  1. Состояние
  2. Поведение.

и дальше, согласно реализации языка, но состояние и поведение есть во всех языках. Это важно.

И с разницей понимания Алана Кея и реализации Си и С++ появились разные трактовки объектов.

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

Для ясности возьмём Питон здесь все объект.

Вот это то и путает многих, да так путает, что прочитали, что такое объект и сразу забыли и ковыряются наугад.

Все верно, ведь объект стало понятием, которое не только относится к классу, но и ко всему, хотя в глосарии, чётко трактуется объект. как:

Любые данные с состоянием (атрибуты или значение) и определенным поведением (методы). Также окончательный базовый класс любого нового стиля класс .

Но это описан объект класса

Но нужно по другому посмотреть на объекты:

Но если взять справочник по языку, то видим:

Объекты — это абстракция Python для данных. Все данные в программе Python представлен объектами или отношениями между объектами. (В некотором смысле и в В соответствии с моделью фон Неймана о «компьютере с хранимой программой» код также представлены предметами.)

Каждый объект имеет идентификатор, тип и значение. объекта Идентичность никогда не изменяется после его создания; вы можете думать об этом как об адресе объекта в Память. ' is' оператор сравнивает идентичность двух объектов; в id()функция возвращает целое число, представляющее ее идентификатор.

Такая же картина во всех языках современных таких, как Питон, Kotlin, JS и др, то принципиально берётся все как в С++, то есть объект в первую очередь - это то что уже в памяти и это главное.

Давайте разложим по полкам:

Объекты - id индефикатор памяти(адрес в памяти),

значения - объект хранит значение всегда, если значения нет, то в памяти его просто нет и не может быть. Нельзя создать место в памяти и там ничего не хранить. Поэтому в языках по разному решают этот вопрос, например в питон при помощи None, в котлин при помощи Unit, то это тоже объекты.

Если проще, то сам объект всегда хранит другой объект, который называется значением.

Все равно получается аналогия с С++, есть указатель, то есть то что указывает на конкретный адрес 123456 и есть объект который хранится по этому адресу, число, переменная, функция.

Нам нужно добавить ещё одно понимание Тип. То есть что бы можно было проводить действия нужно понимать Тип, например в Котлин, когда нет типа, пишут Unit, иными словами мы просто по ходу может поставить тип.

В питон, ставят None, это тоже объект(обозначает ничего), но тоже объект. То есть пит можем присвоить позже.

Но я говорю о том, как мы должны мыслить об объектах, хоть мы говорим о функциях, но ведь это тоже объект, который в себе имеет другие объекты параметры.

Теперь вернёмся к функциям от которых ранее отошли.

Что бы работать с разными языками и это было просто, нужно в голове иметь какую-то классическую схему, тогда будет легко разобраться в любом языке, так как будет происходить сравнение с аналогом и ответ будет Да или НЕТ, третьего не дано.

И обратите внимание все станет на место только в том случае, если мы понимаем, как будем работать с функцией, как с объектом.

Во всех языках функция имеет параметры.

Питон.

def fun(параметры):.........

JS

function fun(параметры){}

C++(вместо ключевого слова тип, но параметры то все равно есть)

int main(параметры)

котлин

fun double(x: Int): Int { return 2 * x }

Наша система может быть очень просто, ведь параметры имеют всего два положения:

переменной (может быть функция, переменная и все что угодно без знака присваивания)

Значением.(все , что имеет знак присваивания или )

Это классический вариант

def fun(param, param2="вася")

JS

function myFunc(theObject) { theObject.make = 'Toyota'; }

Kotlin

function map(f, a) { var result = [], // Создаём новый массив

Питон имеет самую сложную структуру параметров.

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

Где есть требования указывать тип (x: int)

где то как в С++ тип указывается вначале int sum(int a, int b) и указываются параметры с типом, но ведь если посмотреть на С++, то все равно a b не имеют значения они, могут быть чем угодно.

В питон нужно обратить внимание на строгую последовательность позиционных и именованных, так как именованные не передаются по позиции и если после именованного, поставить позиционный, то как можно отследить позицию, если предыдущий не имеет позиции(от чего считать то тогда), .................................выдаст исключение.

Вывод.

Все просто если поступить так, как описал. давайте подведёи итог:

Все языки имею функции, функции имеют параметры.

параметры могут быть двух видов со значением и без значения (переменная здесь тоже не очень верно, так как параметром может быть другая функция.)

Если к нашей системе мы добавим понимание три понятия:

объект, значение тип (нам просто нужно посмотреть саму запись параметров), при этом объект одинаков для всех языков современного программирования - это id памяти(место хранения), значит нам остаётся посмотреть

значение и тип - принципиально для всех языков, только запись может быть разная, но ведь обозначают они одно и то же в любых языках.

и останется добавить зачем все это делается, что бы определить два основных параметра:

состояние и поведение.

состояние - данные и значения (вкладывается в нашу парадигму? Да, так как это типы значения.), могут быть разные подходы, например в JS состояние назовут свойствами, но ведь смысо от этого не меняться.

Важно всего лишь понимать разницу между состоянием и подведением.

Состояние (параметры функции это объекты они имеют состояние, например тип int и значение 5), а поведение это то, что меняется, при выполнении действий над объектом, например если к пяти добавить 2, то у объекта появляться поведение, которое можно назвать сложением и в конечном итоге изменится конечное число.

Если Вы просто подходя к любому языку, будете начинать с объекта и смотреть на него и говорить себе, это объект, он имеет тип ..... имеет значение.......конечно это происходит моментально со временем.

Но важен сам подход.

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

--—-———————-—-—-——-

Интересен мой подход, получите доступ недорого:

Выбери свой доступ.

Рекомендуется оценить мощь. Обязательно глянь подборку видео, как растут ребята, у тебя тоже получится.

Подборка видео, для прорыва в мозгах, изменит подход к изучению программирования.

https://spb-tut.ru/programming_school/python-programming-video/

Джанго + Питон:

https://spb-tut.ru/programming_school/pay-django4/

Либо Джанго + Питон + Блокчейн:

(Хит продаж) Внизу страницы 400 BYN:

https://spb-tut.ru/programming_school/pay-dapp-spb-tut-ru/

Обучение программированию по индивидуальной программе.

https://spb-tut.ru/programming_school/individual-programming-training/

Групповые занятия по программированию.

https://spb-tut.ru/programming_school/group-programming-lessons/

Все получится точно.