Функции — это практически неисчерпаемая тема. Правда, при углубленном изучении придётся вдаваться в основы ФП, но, может, это и к лучшему.
Мне кажется, было бы полезно для начала рассказать о лямбде, map, reduce и прочих (как вариант следующих выпусков :) ). О карринге. Это достаточно универсальные вещи, которые в другом языке могут пригодиться.
С чего вы взяли, что нужно хранить пароль? В правильно спроектированной системе пароль вообще не хранится в открытом виде. И даже если злоумышленник сломает сервер и вытащит базу, это не даст ему списка паролей, ибо их в базе нет. За подробностями в гугль: google://hash+salt+password
> но когда программа, для удобства не слишком продвинутых пользователей прежде всего, хранит где-то в дебрях базы данных пароли, переписку и файлы — ооо катастрофа и нарушение прав и свобод.
Неужели вы не видите разницы между такими вещами? Вы в курсе, например, что процессинговым центрам запрещено хранить секьюрные компоненты кредиток? Пароль на то и пароль, чтобы левый дядя о нём ничего не знал. В крайнем случае, он может храниться в локальном менеджере паролей в зашифрованном виде, но уж никак не на сервервере стороннего левого дяди.
Вы удивитесь, но для кучи людей он совершенно не очевиден и воспринимается с трудом. Если человек не способен это понять, то можно на него не тратить усилия по обучению ФП.
А это уже отдельный вопрос :) Я всё жду, когда начнётся обсуждение исключений, чтобы там позадавать вопросы относительно соответствия реализации языка его формальной грамматике. Грамматика явно требует наличия как минимум одного блока except.
Насчёт try и else
try:
do_something
except E1:
# ловим исключение 1
except E2:
# ловим исключение 2
else:
# ловим все остальные исключения
finally:
# делаем что-то там в случае чего-то там
То есть смысл в том, чтобы отловить любое исключение, которое вылезет (считаем, что самого базового класса нет). В такой интерпретации я не вижу особого смысла в блоке finally.
Я бы заменил фразу «# выполнится, если выход из цикла не осуществлялся инструкцией break» на «# выполняется, если выход из цикла был произведён не инструкцией break» для единообразия.
Мне кажется, было бы полезно для начала рассказать о лямбде, map, reduce и прочих (как вариант следующих выпусков :) ). О карринге. Это достаточно универсальные вещи, которые в другом языке могут пригодиться.
Неужели вы не видите разницы между такими вещами? Вы в курсе, например, что процессинговым центрам запрещено хранить секьюрные компоненты кредиток? Пароль на то и пароль, чтобы левый дядя о нём ничего не знал. В крайнем случае, он может храниться в локальном менеджере паролей в зашифрованном виде, но уж никак не на сервервере стороннего левого дяди.
Этот пример позволяет легко понять и объяснить самые базовые вещи самым «упёртым» пэхапешникам.
Далее пример (finally выполняется всегда):
Насчёт try и else
То есть смысл в том, чтобы отловить любое исключение, которое вылезет (считаем, что самого базового класса нет). В такой интерпретации я не вижу особого смысла в блоке finally.