[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Моддинг » 5.1. Уроки Lua » Урок 3. Переменные. (Переменные. Типы данных. Операторы. Простые примеры.)
Урок 3. Переменные.
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Это будет первым уроком, где мы что-то реальное будем писать.

Для начала небольшой трёп про то, что значит писать программу.
Небольшой вопрос: что такое программа, ну и вообще, что, по-вашему, значит написать программу?
Вот я считаю, что правильный ответ примерно такой:
Написать программу - значит объяснить компу, как решать какую-то задачу. Чтобы объяснить кому-то что-то, надо сначала представлять, как бы ты сам это делал. Таким образом, чтобы писать программу нужно продумать последовательность своих действий(алгоритм), а потом уже что-то программировать.

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

В lua переменную объявить очень легко. Вот так:

Code
имя переменной = значение

К примеру,
Code
a=10

При этом будет создана переменная с именем a, и значением 10

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

Code
a=10
b=a+40

b теперь будет равна 50.

Вы наверно щас задаётесь вопросом: "где это попробовать??". Объясняю. Любой код, который я тут привожу для примеров надо написать в SciTE, сохранить как lua файл, а потом запустить нажатием F5 или другими способами(смотри урок 2). Внизу в консольке будет написано, что выводит программа.
Под "выводит программа" понимается вызов функции print:

Code
a=10
print(a)
b=a+40
print(b)

print - это функция(это понятие вы поймёте позже, сейчас запомните, что в функцию в скобки можно подставлять параметры, и она что-то с ними сделает), которая выводит на экран значение того, что в неё передали. В нашем примере на экран выведено:
Code
10
50

Итак с переменными более или менее ясно. Важно сказать, что у переменных кроме имени и значения есть ещё и тип. В lua 8 типов данных:
nil (неопределенный)
boolean (логический)
number (числовой)
string (строковый)
function (функция)
userdata (пользовательские данные)
thread (поток)
table (таблица)

Пробежимся по типам данных:
1. nil - буквально означает "ничего". Это одновременно и тип данных и значение. Попробуйте следующий код:

Code
print(c)

на экран будет выведено:
Code
nil

это означает, что нету переменной c - мы её не объявили(точнее не задали) с помощью оператора =
Главная задача nil значения - поиск ошибок. Если вы сделаете так:
Code
print(nil+2)

то получите, что lua на вас ругнётся(потому что нельзя прибавлять 2 к ничему!), а вы узнаете, что забыли задать переменную.

2. boolean - тип данных, который означает правду или неправду(true или false).
Он используется при сравнении. К примеру выражение 1>2 вернёт false, потому что 1 меньше двойки. выражение 9==9 вернёт true, потому что 9 равно 9.
Задать булеву переменную можно так:

Code
a=true
b=false
c=10<4 or 2==2
print(a,b,c)

Как видите, для булевых переменных можно писать операции or, а также and и not. Правила, по которым они действуют описаны ниже:
Quote
true and true = true
true and false = false
false and true = false
false and false = false

true or true = true
true or false = true
false or true = true
false or false = false

not true = false
not false = true

Также есть операции сравнения между числами:

Quote
num1 == num2
num1 ~= num2
num1 < num2
num1 > num2
num1 <= num2
num1 >= num2

!= - это неравенство
== - равенство

Для строк текста(смотри ниже тип string) работают операторы ~= и ==, к примеру

Code
print("Вася"=="Вася")
print("Вася"=="вася")
print("Вася"~="Петя")

выведет на экран:
Code
true
false
true

3. number - тип данных, который используется для хранения чисел. Числа записываются как обычно. Десятичные дроби записываются с разделителем ".". Примеры:

Code
a=20
b=42.234
c=-124.412

Для чисел определены математические операции:
+ сложение
- вычитание
* умножение
/ деление
% деление по модулю
^ возведение в степень
примеры:

Code
print(10+20)
print(10-20)
print(10*20)
print(10/20)
print(39%7)
print(2^5)

будет выведено:
Code
30
-10
200
0.5
4
32

Деление по модулю - это получение остатка от деления(вспомните школьное деление столбиком)
При возведении в степень первое число возводится в степень второго.

4. string - строка текста. Под ней понимается какая-то последовательность букв или символов. Обычно строка задаётся в кавычках

Code
name="Вася"
print(name)

На экране появится гордая надпись Вася=)
Строки можно объединять с помощью оператора ..("две точки", а официально называется конкатенация или склейка).
Code
boy="Вася"
girl="Жанна"
print(boy.."+"..girl.."=love")

Выведет на экран:
Code
Вася+Жанна=love

Часто надо вставить в текст специальный символ(перенос строки, кавычки, слэш). Для этого этот символ экранируют. То есть чтобы специальный символ ничего специального не значил перед ним ставят слэш.
Вот кратенький спискок самого нужного:
\n - вставка переноса на новую строку
\" - вставка кавычки
\\ - вставка слэша.
К примеру, чтобы записать текст C:\gerich\docs\ в lua надо писать так:

Code
path="C:\\gerich\\docs\\"

Чтобы вставить перенос строки:
Code
multiline="Я на первой строке\nА я на второй!"
print(multiline)

Код выведет на экран:
Code
Я на первой строке
А я на второй!

Надписи на разных строках.
Также можно многострочный текст можно писать внутри конструкции [[длинный-длинный текст]].
Вот так:
Code
multiline=[[BOX2D

Физический движок для создания rigidbody физики в 2D играх.
Движок-opensource, т.е. исходный код доступен каждому.
Исходный код на C++ уже портирован на несколько языков программирования: C#, Java, ActionScript, Python, Scala.
В основном применяется во флэш играх(в них используется ActionScript порт движка BOX2DFLASHAS3).
Для использования требуются умение программировать и знание языка.]]
print(multiline)

Этот код выведет этот текст.
5. function - особый тип данных. Он позволяет хранить в переменной не данные, а действие!
Подробней на этом типе данных мы остановимся в следующих уроках. А сейчас, чтобы вы хоть чуть-чуть поняли что это скажу: print- это функция, то есть это переменная типа function, в которой хранится действие(напечатать на экране то, что в неё передали).
6. userdata - Для lua этот тип данных - чёрный ящик. Это просто какие-то данные. Вы ничего не можете сделать с ними, кроме того, как передать эти данные в функцию или получить их и сохранить в переменной.
У вас возникает вопрос, зачем этот тип данных? Он нужен для внешней программы.

7. thread - ненужный для нас тип данных, позволяющий делать псевдо-потоки в lua

8. table - один из самых важных типов в lua. Почти всё в lua использует таблицы(даже все переменные хранятся в таблице). Таблица в lua не та, что в Excel'е - в ней всего две строчки: первая - заголовок, вторая - значения, но сколько уогдно колонок.
Про таблицы мы поговорим в следующих уроках гораздо подробнее, поэтому этот урок почти подходит к концу.

Напоследок напомню, что вам из этого урока надо запомнить:
1) как объявлять переменную
2) что такое тип данных
3) как работать с числами, логическими и строковыми значениями.

Ну и совсем на последок скажу ещё что такое оператор type. С его помощью можно узнать тип переменной, к примеру:

Code
a=1
b=true
c="Hello"
e=function(z)
       return z+1
     end
d=nil
e={}
print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))

выведет
Code
number
boolean
string
function
nil
table



[Прошлый урок]|[Список уроков]|[Следующий урок]


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
SW_Krash
Проверенные
Сообщений: 818
Реп: 28 / Инв: 7
всё понятно... просьба рассказать о переводе текста в число и числа в текст... это же возможно...
т.е. вот такой код
Code

a = 11
b = "13"
c = a < b
print(c)

выдаёт такую ошибку
Code

lua.exe: E:\¦+-\Worms 4 Mayhem\Data\scripts\+хчvь ээvщ2.lua:3: attempt to compare number with string
stack traceback:
  E:\¦+-\Worms 4 Mayhem\Data\scripts\+хчvь ээvщ2.lua:3: in main chunk
  [C]: ?

ну это и так можно было предугадать... так вопрос в том как всё же сравнить???


Всё что ни делается, делается в Китае(SW_Krash, 2009)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
Я отрицаю вашу реальность и заменяю её своей!(Адам Севидж, 200x)
OFFTOP SWEAT OFFTOP(фольклор)

 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
во-первых число и строку сравнивать нельзя. Нельзя строку "Вася" сравнить с 10.
Но если точно уверен в том, что в строке число, то так:
Code
a = 11  
b = "13"  
c = a < tonumber(b)  
print(c)

К тому же можно сделать проверку:

Code
s = "13"  
n = tonumber(s)
if n then
   print("is number")
else
   print("can't convert")
end  

Ещё есть обратная функция tostring(). Хотя вот такая запись:

Code
print("Вася ростом "..210.."см")

работает


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Форум » Моддинг » 5.1. Уроки Lua » Урок 3. Переменные. (Переменные. Типы данных. Операторы. Простые примеры.)
  • Страница 1 из 1
  • 1
Поиск: