LINUX.ORG.RU
ФорумTalks

Программирование для домохозяек

 , ,


0

1

Как бы вы понятным языком объяснили людям, далёким от программирования и математики, что такое замыкания и колбеки? Если с основными принципами ооп несложно, то тут возникают некоторые проблемы с языком метафор. Ваш вариант?


Ответ на: комментарий от PolarFox

Ну смысла ни в одном человеческом действии нет, поэтому почему бы не объяснить что такое замыкание, а?

by_zero
() автор топика

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

menangen ★★★★★
()
Ответ на: комментарий от menangen

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

Но при чём здесь замыкания и колбеки?

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

Кому, кстати?

Тот, кто просит маму сварить кашу, говорит ей также, кому об этом сообщить, когда каша будет готова.

KRoN73 ★★★★★
()

для домохозяек

Ландау, например, когда ему кто-то из учеников сказал, что нашёл барышню, которая хочет двигать науку, ответил: «Ты с ней спал?» - «Нет». «Хочешь переспать?» - «Нет». «Ну так и зачем ты с ней возишься?».

Deleted
()

Callback это когда вы оставляете номер и просите перезвонить и сказать как все прошло.

Closure это дом, жители которого, хотя и делают разную работу, но имеют доступ к одним и тем же домашним вещам.

grim ★☆☆☆
()

Бред какой-то. Ты хочешь научить человека программированию, или рассказать ему что такое коллбек?

Xellos ★★★★★
()
Ответ на: комментарий от PolarFox

А смысл далёким от программирования людям это объяснять?

Если ты не можешь объяснить что-то шестилетнему ребенку, то ты сам этого не знаешь.©

Axon ★★★★★
()
Последнее исправление: Axon (всего исправлений: 1)

Как говорил Эйнштейн: если ты не можешь объяснить что-то шестилетнему ребенку , то ты сам этого не понимаешь

gnu_anonymous
()
Ответ на: комментарий от DNA_Seq

И какое отношение программирование имеет к науке?

Снобы в треде? Наука тоже самое ремесленичество — на базе предыдущего опыта, методом предположений, проверок и опытным путем, подтверждаем или опровергаем эти предположения.

sdio ★★★★★
()
Ответ на: комментарий от sdio

Снобы в треде?

Ну начнем с того что домохозяйка это типаж и далеко не каждая женщина ей является.

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

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

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

DNA_Seq ★★☆☆☆
()

А в чём проблема объяснить коллбеки?
По своей сущности коллбек не отличается от вызова функции.
Отличия лишь в способе передачи указателя на функцию.

А что такое замыкания я, программист с почти 10-летним стажем, сам не знаю.

Stahl ★★☆
()
Ответ на: комментарий от grim

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

PolarFox ★★★★★
()
Ответ на: комментарий от Stahl

А что такое замыкания я, программист с почти 10-летним стажем, сам не знаю.

local function makeCounter(start)
    local a = start
    return function (x)
        a = a + x
        return a
    end
end

counter1 = makeCounter(1)
counter2 = makeCounter(100)

counter1(1)
counter1(1)
print(counter1(1))

counter2(50)
print(counter2(10))
4
160

counter1 и counter2 — замыкания, замыкают в себе переменную a, у каждого замыкания свой вариант переменной a, полученный из более высокой области видимости.

В скучных языках вроде С замыканий нет, и подобный код взорвёт компьютер и побреет кота.

PolarFox ★★★★★
()
Ответ на: комментарий от sci-fi

Я указал только прямые зависимости понятия.

PolarFox ★★★★★
()

Ты хочешь начать объяснять с замыканий и колбеков? Ну пять, если тебе самому в своё время начали с этого объяснять ты бы помер.

Dron ★★★★★
()
Ответ на: комментарий от PolarFox

Да, я пишу на «скучном» Си.
Хорошо, что ты приложил код из которого я понял почему мне такие «весёлости» не нужны.
А то твоё определение: «замыкания, замыкают в себе переменную a, у каждого замыкания свой вариант переменной a» как-то не очень:)

Stahl ★★☆
()
Ответ на: комментарий от Stahl

Это хелловорлдовый пример, а не определение. В реальном мире эти штуки полезны, в си в подобных случаях контекст запоминают в структуру и каким-либо образом таскают её с собой.

PolarFox ★★★★★
()

Нарисуй что-то такое:

a = 1
b = 2

f(x) = a + b + x

g(f, y) = f(y) + y

g(f, 1) = f(1) + 1 = 1 + 2 + 1 = 4

то есть функция f помнит переменные a и b.

crowbar
()

Где тут история успеха? То, что ты смог сформулировать вопрос? Ну да, молодец.

minakov ★★★★★
()
Ответ на: комментарий от PolarFox

Не берусь сказать.
В твоём примере я бы просто передал неименованой функции указатель на а, память для которой выделил бы в makeCounter.
Получилось бы где-то так же.
Придумать навскидку варианты, где замыкания сделали бы код намного проще сразу не могу.

Stahl ★★☆
()
Ответ на: комментарий от Stahl

Например функция для сортировки, фильтра, map, reduce и т.д., зависящая от каких-либо параметров текущего контекста, в си придётся всё явно таскать, а это ещё одно место возможного сегфолта или утечки.

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

PolarFox ★★★★★
()

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

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

alpha ★★★★★
()

Проще построчно разобрать код/псевдокод и обсудить его логику работы, чем городить такие аналогии.

Sadler ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.