Страницы

Поиск по вопросам

суббота, 7 декабря 2019 г.

Переопределить ключевые слова Python на русском языке

#python


Добрый день!

Решил обучить ребенка (9 лет) программированию. Всякие игры типа Blockly уже пройдены,
пора переходить к тексту. Для обучения выбрал Python, как, на мой взгляд, самый простой
язык. 

Для упрощения понимания хочу чтоб ребенок писал по-русски и постепенно переводить
на английский. Очень порадовала возможность названия переменных и методов кириллицей.
Большую часть стандартных методов я обернул в методы с русскими названиями. Остались
только несколько проблем.

Без понятия, как перевести ветвления и циклы. Была идея написать функции типа

def ЕслиТоВыполнить(condition, code):
  if condition:
    eval(code)

ЕслиТоВыполнить(Правда, "вывести('да, это правда')")


Но тут есть 2 проблемы: 


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


Второе можно исправить, передав функцию в качестве параметра. Но это приводит к новым
вопросам.

Такая же ерунда с циклами и функциями. 
Кроме того мне не совсем нравятся методы И(expr1, expr2) и ИЛИ(expr1, expr2)
С классами проблем нет, так как думаю, что пока мы до них дойдём - уже будем писать
по-английски. 

Может, есть какая-нибудь возможность задефайнить ключевые слова? 
Вопрос "Зачем?" не обсуждается :) Я считаю, что надо максимально упростить задачу
для вхождения, чтобы не отпало настроение учиться с самого начала. 

Спасибо! :)
    


Ответы

Ответ 1



Похоже, что это невозможно. Язык Python не включает в себя механизмов для переопределения ключевых слов. Вольно перевожу ответ с enSO: Ключевые слова — жестко заданная часть языка. Вы можете написать свой собственный язык или интерпретатор, но переопределить ключевые слова в Python не можете (а в Lisp или C/C++ смогли бы). Это и не нужно. Язык программирования — это английский. Это может быть не очень честно, но это так. Вся документация — на английском, все методы во всех библиотеках — тоже. Цитируя Эрика Стивена Реймонда (ссылка выше): Английский — рабочий язык хакерского сообщества и интернета, и вам придется изучить его, чтобы стать частью этого сообщества. Линус Торвальдс, финн по национальности, комментирует свой код на английском. (Похоже, что он никогда и не пытался делать иначе.) То, что он хорошо владеет английским, помогло ему собрать международное сообщество разработчиков Линукса. Это поучительный пример. Добавлю от себя: конструкциями вроде ЕслиТоВыполнить("вывести('да, это правда')") вы прячете реальный красивый и лаконичный синтаксис языка и заменяете его уродливым и неестественным. Синтаксис Python приближен к естественным языкам, а они формируют наше сознание и мышление. Нам попросту легче изучать языки программирования, которые похожи на нашу речь. ЕслиТоВыполнить(оценить(вы будете применить(ребенок, обучение таким образом)), вернуть(ему будет значительно сложнее учиться)).

Ответ 2



Если вы твердо решили научить ребенка плохому и испортить ему жизнь, то такая мелочевка как "невозможность переопределить ключевые слова" не должна останавливать истинного родителя. Следует вспомнить, что исходные коды языка открыты и могут быть модифицированы. Причем вы можете не только приготовить патчсет для себя, но и выложить его на Гитхаб, чтобы другие родители тоже могли повторить свой опыт. Если банальной локализации будет недостаточно, то можно пойти дальше и начать применять сторонние патчи, которые меняют синтаксис или добавляют новые, уникальные методы, которых в нормальном языке нет и с отсутствием которых во внешнем мире ребенок рано или поздно столкнется. Можно пойти еще более жестоким образом и сразу изучать язык 1С - язык на русском языке как вы и хотите, бухгалтерия нужна почти везде, в ряде регионов на рынке труда нужны только 1С-ники, при желании на 1С можно писать игры и даже сложные утилитки, да и даже английский можно не учить - все равно за полями и лесами и высокими горами про такой язык и не слыхивали, потому и помощи от англоговорящих можно и не ждать.

Комментариев нет:

Отправить комментарий