Skip to content

Latest commit

 

History

History
428 lines (348 loc) · 7.99 KB

lua.md

File metadata and controls

428 lines (348 loc) · 7.99 KB

Комментарии

1C:

// это комментарий

lua:

-- это комментарий

Объявление переменной

1C:

Цена = 100;

lua:

local price = 100

Объявление процедуры

1C:

Процедура Тест()
    Цена = 100;
КонецПроцедуры

lua:

local function test()
    local price = 100
end

Переменные уровня модуля

1C:

Перем Количество;
Перем Сумма;

Процедура Тест()
    Цена = 100;
    Сумма = Цена * Количество;
КонецПроцедуры

Количество = 5;
Сумма = 0;

lua:

local quantity = 5
local amount = 0

local function test()
    local price = 100 -- без local будет создана глобальная переменная
    amount = price * quantity
end

Объявление функции

1C:

Функция Сумма(Знач Цена, Знач Количество = 1)
    Возврат Цена * Количество;
КонецФункции

lua:

local function amount(price, quantity)
    quantity = quantity or 1
    return price * quantity
end

Вызов функции

1C:

Сумма = Сумма(10)

lua:

x = amount(10) -- если присвоим в amount, то затрем функцию

Создание массива

1C:

Имена = Новый Массив;
Имена.Добавить("Саша");
Имена.Добавить("Маша");

lua:

local names = {}
names[#names+1] = "Саша"
names[#names+1] = "Маша"

# альтернативный вариант:
local names = {
    "Саша",
    "Маша",
}

Цикл по массиву

1C:

Для Каждого Имя Из Имена Цикл
    Сообщить(Имя);
КонецЦикла;

lua:

for i, name in ipairs(names) do
    print(name)
end

Проверка наличия значения в массиве

1C:

Если Имена.Найти("Катя") <> Неопределено Тогда
    Сообщить("Катя присутствует!");
КонецЕсли;

lua:

for i, name in ipairs(names) do
	if name == "Катя" then
		print("Катя присутствует!")
		break
	end
end

Поиск значения в массиве

1C:

Индекс = Имена.Найти("Катя");
Если Индекс <> Неопределено Тогда
    Сообщить(Индекс);
КонецЕсли;

lua:

for i, name in ipairs(names) do
	if name == "Катя" then
		print(i)
		break
	end
end

Создание соответствия

1C:

Возраст = Новый Соответствие;
Возраст["Саша"] = 18;
Возраст["Маша"] = 19;

lua:

local age = {}
age["Саша"] = 18
age["Маша"] = 19

-- альтернативный вариант:
local age = {
    ["Саша"] = 18,
    ["Маша"] = 19,
}

Цикл по соответствию

1C:

Для Каждого Элемент Из Возраст Цикл
    Сообщить(Элемент.Ключ + ": " + Строка(Элемент.Значение));
КонецЦикла;

lua:

for key, value in pairs(age) do
    print(key .. ": " .. tostring(value))
end

Обращение к соответствию по ключу

1C:

ВозрастКати = Возвраст["Катя"];
Если ВозрастКати <> Неопределено Тогда
    Сообщить(ВозрастКати);
КонецЕсли;

lua:

local kate_age = age["Катя"]
if kate_age then
    print(kate_age)
end

-- альтернативный вариант
local kate_age = age["Катя"]
if kate_age ~= nil then
    print(kate_age)
end

Проверка наличия ключа в соответствии

1C:

Если Возраст["Катя"] <> Неопределено Тогда
    Сообщить(Возраст["Катя"]);
КонецЕсли;

lua:

if age["Катя"] then
    print(age["Катя"])
end

-- альтернативный вариант
if age["Катя"] ~= nil then
    print(age["Катя"])
end

Цикл по диапазону чисел

1C:

Для Индекс = 1 По 10 Цикл
    Сообщить(Индекс);
КонецЦикла;

lua:

for i = 1, 10 do
    print(i)
end

Цикл с условием

1C:

Индекс = 0;
Пока Индекс < 10 Цикл
    Сообщить(Индекс);
    Индекс = Индекс + 1;
КонецЦикла;

lua:

local i = 0
while i < 10 do
    print(i)
    i = i + 1
end

Создание структуры

1C:

Сотрудник = Новый Структура("Имя, Возраст", "Катя", 19);
Сообщить(Сотрудник.Имя);

lua:

local employee = {
    name = "Катя";  -- вместо `;` можно `,`
    age = 19
}
print(employee.name)

-- альтернативный вариант
local employee = {}
employee.name = "Катя"
employee.age = 19
print(employee.name)

Добавление поля в структуру

1C:

Сотрудник.Вставить("Пол", "Мужской");
Сообщить(Сотрудник.Пол);

lua:

employee.gender = "male"
print(employee.gender)

-- альтернативный вариант
employee["gender"] = "male"
print(employee.gender)

Форматирование строк (шаблоны, интерполяция)

1C:

Имя = "Катя";
Возраст = 19;
Сообщить(СтрШаблон("%1: %2", Имя, Возраст));

lua:

local name = "Kate"
local age = 19
print(string.format("%s: %u", name, age))

-- альтернативный вариант
local name = "Kate"
local age = 19
print(("%s: %u"):format(name, age))

Конкатенация массива строк

1C:

Сообщить(СтрСоединить(Имена, Символы.ПС));

lua:

print(table.concat(names, "\n"))

Тернарный оператор

1C:

Сумма = Цена * ?(Количество > 0, Количество, 1);

lua:

local amount = price * (quantity > 0 and quantity or 1)

Условия

1C:

Если Икс = 0 Или Икс = Неопределено Тогда
    Сообщить("пусто")
ИначеЕсли 0 < Икс И Икс < 10 Тогда
    Сообщить("от 1 до 9")
Иначе
    Сообщить("меньше 0 или больше 9")
КонецЕсли;

lua:

if x == 0 or x == nil then
    print('пусто')
elseif 0 < x and x < 10 then
    print('от 1 до 9')
else
    print('меньше 0 или больше 9')
end

Чтение текстового файла в кодировке UTF-8

1C:

ЧтениеТекста = Новый ЧтениеТекста;
ЧтениеТекста.Открыть("log.txt", "UTF-8");
Сообщить(ЧтениеТекста.Прочитать());
ЧтениеТекста.Закрыть();

lua:

local file = io.open('log.txt', 'r')
print(file:read('*a'))
file:close()

Методы работы со строками

1C lua
Подстрока = Сред(Текст, 2, 2); substr = text:sub(2, 3)
Текст = ВРег(Текст); text = text:upper()
Текст = НРег(Текст); text = text:lower()
Текст = Лев(Текст, 2); text = text:sub(1, 2)
Текст = Прав(Текст, 2); text = text:sub(-2, -1)