LuaBuzz: изучение нового языка программирования

Первые четыре недели моего курса программирования в Makers Academy были сосредоточены исключительно на Ruby, и у меня был четкий прогресс. Каждую неделю мы добавляли новый слой. Начав сначала с тестирования фреймворков и создания Дома TDD, затем добавив веб-фреймворки, такие как Sinatra (и тестирование с помощью Capybara), и, наконец, подключив базу данных для поддержки всего этого, казалось, что мы близки к созданию полезных программ. К концу четвертой недели я действительно почувствовал, что мои знания о Ruby значительно выросли.

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

Неделя началась с группового разговора о том, как мы можем применить наши знания о Ruby для изучения JavaScript. Можем ли мы перечислить все, что знаем о Ruby, и просто перевести это на JavaScript? Есть ли что-то, что, может быть, кажется невозможным для перевода между этими двумя языками? Другими словами, есть ли у каждого из них уникальные и непереводимые особенности? Это все интересные вопросы — или, скорее, указатели, — которые мы должны взять с собой при изучении нового языка.

Хотя мне очень нравится JavaScript, я напишу об этом в будущем. В начале недели наши тренеры в Makers поставили перед нами задачу выучить еще один язык помимо JS, и поэтому в пятницу я выделил час, чтобы выполнить классическое упражнение ~FizzBuzz~ на языке, которого я никогда раньше не видел. . Задача была проста: установить и скомпилировать язык, написать простую программу, которая работает гладко, и отправить все на Github за час.

Я выбрал язык Lua.

Я наткнулся на Lua, изучая языки программирования, написанные не на английской грамматике и не основанные на ней, — такие как латино или потигол. Хотя большинство языков программирования основаны на английском языке, некоторые известные из них были разработаны в неанглоязычных странах. Python, например, разработан в Нидерландах, а Ruby, разумеется, создан в Японии. Интересно, что в этой записи в Википедии наряду с Python и Ruby упоминается и третий язык.

Lua — Луна на португальском языке — был создан в Рио-де-Жанейро (Бразилия) в 1993 году. Перенесемся на пару десятилетий вперед, и Lua стал САМЫМ языком для игр: он используется в Angry Birds и является основным языком World из Варкрафта. В 2003 году он был признан самым популярным языком сценариев для программирования игр.

Отлично, но как выглядит Lua и как он работает?

Я установил Lua, следуя инструкциям на www.lua.org. Компиляция занимает всего несколько минут и создает три файла: lua (интерпретатор), luac (компилятор) и liblua.a (библиотека). Я открыл Atom и попытался создать свой первый файл .lua, но сначала Atom не распознал Lua и установил файл как обычный текст. Это было нехорошо, и в конце концов я нашел пакет Atom, обеспечивающий подсветку синтаксиса для Lua.

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

Lua предоставляет режим, называемый интерактивным режимом. В этом режиме вы можете вводить инструкции одну за другой и получать мгновенные результаты. Это можно вызвать в оболочке, используя lua -i или просто команду lua. Хотя набор тестов оказался немного сложным в использовании, простой запуск «lua fizzbuzz.lua» на терминале дал мне интересные ошибки; ошибки, которые позволили мне двигаться дальше.

lua: fizzbuzz.lua:5: ‹name› ожидается ближе к концу

Однако, как только программа работает гладко (при условии, что на данный момент она мало что делает) и вы больше не получаете сообщений об ошибках, вам нужно найти способ двигаться дальше. Я некоторое время играл с Lua REPL, а затем попытался написать FizzBuzz. Так как мне нужен был, по сути, цикл, выводящий числа, я бегло просмотрел эту страницу.

Это было довольно интуитивно понятно, очень похоже на Ruby — особенно синтаксис «do…end». вот что у меня получилось в итоге:

И вот после забега за первые 40 номеров.

В целом, Lua кажется легковесным по синтаксису и довольно интуитивно понятным. Большинство команд, которые я пробовал, работали после простых изменений. Менее чем через час LuaBuzz был готов и на Github.

*

В начале этой недели я записал все, что помнил о Ruby. Классы, операторы, условные операторы, REPL, Testing Suite… и пытался найти эквивалент для каждого из них в JavaScript. Я не делал того же, когда смотрел на Lua — среди прочего, потому что я выделил себе один час, чтобы закончить FizzBuzz — но я думаю, что это был общий урок этой недели: если я работаю методично, я могу научиться чему угодно.