Browse Source

Merge branch 'master' of http://213.155.192.79:3001/ypv/ISRPO

ypv 2 years ago
parent
commit
8d00d365c9

+ 90 - 0
Лекции/Lua/Lua.md

@@ -0,0 +1,90 @@
+# Lua  
+![logo](images/logo.png)  
+**Lua** - скриптовый язык программирования, который в основном используется для создания бизнес-логики приложения.  
+Главная особенность **Lua** заключается в том, что он может использоваться как в качестве отдельного, так и встроенного скриптового языка. Уже в процессе создания разработчики поставили себе цель – сделать компактный и простой инструмент, который мог бы с легкостью работать в различных исполняющих средах и обеспечивать при этом должный уровень производительности  
+___  
+Помимо этого, **Lua** разрабатывался с учетом того, чтобы в последующем могли легко выучить его синтаксис и понять особенности. Причем простота языка делает его интересным даже непрофессиональным разработчикам.  
+**Lua** относится к языкам программирования ООП. Благодаря встроенным средствам параллельного программирования, разработчики могут создавать многопоточные приложения без обращения к внешним библиотекам или API. При этом, в языке эффективно реализованы возможности межъязыкового взаимодействия.  
+Где применяется язык **Lua**? Несмотря на достаточно широкое применение в промышленности, более активно он сегодня используется при разработке компьютерных игр.  
+Связано это с тем, что **Lua** позволяет довольно легко запрограммировать поведение так называемых NPC (от англ. Non-playable characters). Также, с помощью этого языка программируются и другие персонажи, поведение которых можно впоследствии быстро менять, не оказывая влияния на движок.  
+___  
+### Преимущества и недостатки  
+Lua обладает следующими преимуществами:  
+1. Хорошая переносимость. Например, можно без особых изменений перенести программу из Windows на Linux.  
+2. Большое количество библиотек. Несмотря на то, что по этому параметру **Lua** проигрывает **JavaScript**, на официальном сайте языка можно найти все необходимые библиотеки для работы, которых более чем достаточно для выполнения различных задач.  
+3. Возможность быстрого добавления новых библиотек, написанных на языке **С**.  
+4. Простота синтаксиса и развертывания. Изучение языка не потребует много времени у тех, кто уже занимается программированием. Для новичков этот язык также будет просто в изучении.  
+5. Приложения и программы, написанные на **Lua** потребляют мало памяти.  
+
+Что касается недостатков, к ним можно отнести то, что язык является скриптовым. Конечно, его можно использовать и самостоятельно, однако чаще всего он применяется вместе с другими языками программирования, например **С**. Поэтому для полноценной работы потребуется знание еще одного языка разработки.  
+___  
+### Основы  
+**Lua** является довольно простым в изучении языком, он имеет всего лишь 22 ключевых слова, для сравнения, в **C#** зарезервированно 77 ключевых слов  
+![syntax](images/syntax.jpg)  
+Синтаксис языка напоминает **Python** или **JavaScript**, но в отличии от них, выглядит более простым и свободным.   
+В языке практически нет строгих правил, поэтому написать одно и тоже действие можно разнообразными способами.  
+Пример стандартного Hello World! тремя разными способами:  
+![Hello World](images/hello-world.png)  
+![output 1](images/output-1.png)  
+___  
+Помимо этого **Lua** позволяет использовать на первый взгляд абсурдное написание кода:  
+![test print](images/test-print.png)  
+![output 2](images/output-2.png)  
+___  
+### Типы данных  
+В языке представлены  следующие типы данных:  
+1. Boolean - логический тип.  
+2. Nil - пустой тип, аналог null.  
+3. Number - любое число.  
+4. String - строка текста.  
+5. Function - функция.  
+6. Table - может быть массивом, словарём или некой реализацией класса.  
+
+Однако в **Lua** используется динамическая типизация, поэтому нельзя чётко указать тип данных, не считая функций.  
+___  
+### Пример скрипта  
+Рассмотрим пример самого простого алгоритма сортировки, реализованного в **Lua**:  
+![sort](images/sort.png)  
+Рассмотрим каждый блок в отдельности:  
+``` Lua
+function ShowTable(t)
+	print(table.concat(t, ", "))
+end
+```  
+
+Данный блок является очень простым и лишь выводит массив скрепив его в одну строку с помощью ``table.concat()``  
+Следующий уже является более интересным:  
+
+``` Lua
+function Sort(t)
+	for i = 1, #t - 1 do
+		for j = i + 1, #t do
+			if t[i] > t[j] then
+				x = t[i]
+				t[i] = t[j]
+				t[j] = x
+			end
+		end
+	end
+	return t
+end
+```  
+
+На первый взгляд ничего особенного, кроме самого алгоритма тут нет, однако есть пару вещей расказывающих о синтаксисе языка:  
+
++ Для получения размера массива используется символ #. ``#Переменная``  
++ Массивы начинаются с 1, а не с 0, как это принято обычно.  
+
+``` Lua
+print "Table:"
+a = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
+ShowTable(a)
+print ""
+
+print "After sort:"
+a = Sort(a)
+ShowTable(a)
+print ""
+```  
+
+Ну и само тело скрипта, в котором просто создаётся массив и вызываются функции.

BIN
Лекции/Lua/images/hello-world.png


BIN
Лекции/Lua/images/logo.png


BIN
Лекции/Lua/images/output-1.png


BIN
Лекции/Lua/images/output-2.png


BIN
Лекции/Lua/images/sort.png


BIN
Лекции/Lua/images/syntax.jpg


BIN
Лекции/Lua/images/test-print.png