
Язык программирования Dark
Добро пожаловать в официальную документацию по языку программирования Dark.
Dark — это современный, динамический язык программирования, созданный для простоты и эффективности. Его синтаксис интуитивно понятен, что делает его отличным выбором как для начинающих, так и для опытных разработчиков. Эта документация поможет вам изучить основы языка, его синтаксис и стандартную библиотеку, чтобы вы могли начать создавать свои собственные программы.
Для удобной разработки на языке Dark рекомендуется использовать официальное расширение для Visual Studio Code, которое предоставляет подсветку синтаксиса, автодополнение и другие полезные функции.
Скачать установщик Dark-0.2.2Основы синтаксиса
Переменные
Переменные объявляются с помощью оператора присваивания =
. Имена переменных могут содержать буквы, цифры и знак подчеркивания, но не могут начинаться с цифры.
my_variable = 10
another_var = "Hello, Dark!"
is_active = true
Типы данных
- Числа (Number): Целые и с плавающей точкой. Например:
42
,3.14
. - Строки (String): Текст в двойных или одинарных кавычках. Например:
"some text"
.Строки поддерживают доступ к символам по индексу, как и списки.
- Булевы (Boolean):
true
илиfalse
. - Списки (List): Упорядоченная коллекция элементов в квадратных скобках. Например:
[1, "two", 3.0]
.Доступ к элементам осуществляется по индексу (нумерация с 0):
my_list = ["a", "b", "c"] println(my_list[1]) # Выведет "b"
- Словари (Dictionary): Коллекция пар ключ-значение в фигурных скобках. Например:
{"key": "value", "age": 30}
.Доступ к значениям осуществляется по ключу, двумя способами:
person = {"name": "Alex", "age": 30} # Через квадратные скобки println(person["name"]) # Выведет "Alex" # Через точку (если ключ - валидный идентификатор) println(person.age) # Выведет 30
Операторы
Dark поддерживает стандартные арифметические (+
, -
, *
, /
), сравнительные (==
, !=
, <
, >
, <=
, >=
) и логические операторы.
Логические операторы (and / or / not)
Для создания сложных условий используются логические операторы and
(логическое И), or
(логическое ИЛИ) и not
(логическое НЕ).
# Пример с 'and'
if age > 18 and has_license == true then
println("Можно водить машину")
end
# Пример с 'or'
if is_weekend or is_holiday then
println("Время отдыхать!")
end
# Пример с 'not'
is_ready = false
if not is_ready then
println("Ещё не готово.")
end
# Пример not с операторами сравнения
if not (a > b) then
println("a не больше b")
end
Операторы поддерживают "короткое замыкание" (short-circuiting). Например, в выражении A and B
, если A
ложно, то B
не будет вычисляться.
Управляющие конструкции
If-Then-Else
Условный оператор. Блок else
не является обязательным.
if x > 10 then
println("x is greater than 10")
else
println("x is not greater than 10")
end
While
Цикл, который выполняется, пока условие истинно.
i = 0
while i < 5 do
println(i)
i = i + 1
end
For
Цикл для итерации по элементам списка, строки или ключам словаря.
my_list = [1, 2, 3]
for item in my_list do
println(item)
end
Обработка ошибок (try...except)
Конструкция try...except
позволяет перехватывать ошибки времени выполнения, предотвращая аварийное завершение программы.
try do
# Код, который может вызвать ошибку
except e do
# Код, который выполнится в случае ошибки.
# 'e' - это словарь с информацией об ошибке.
end
Пример:
try do
result = 10 / 0
except e do
println("Произошла ошибка: " + e["message"])
end
Импорт модулей
Для использования кода из других файлов (модулей) используется ключевое слово import
. Путь к модулю указывается в двойных кавычках. Расширение .dark
или .py
указывать не нужно.
# Импортируем стандартный модуль os
import "os"
# Импортируем пользовательский модуль из файла my_module.dark
import "my_module"
# Используем функцию из импортированного модуля
os.system("cls")
my_module.my_function()
Функции
Определение пользовательских функций.
function add(a, b) do
return a + b
end
result = add(5, 3)
println(result) # Выведет 8
Функция может не возвращать значение. В этом случае можно использовать return
для досрочного выхода из функции.
function check_age(age) do
if age < 18 then
println("Доступ запрещен.")
return # Досрочный выход из функции
end
println("Доступ разрешен.")
end
Комментарии
Однострочные комментарии начинаются с символа #
.
# Это комментарий. Он будет проигнорирован.
variable = 1 # Это тоже комментарий.
Директивы
Если в начале фаила будет строка начинающаяся с символа #!
- это даст информацию о объявлении директивы.
#!nocache
# Это директива, которая отключает кеширование для этого файла.
# Полезно при разработке, чтобы изменения в файле сразу применялись.
Встроенные функции
print(value) / print()
Выводит значение в консоль без переноса строки. Если вызван без аргументов, ничего не делает.
println(value) / println()
Выводит значение в консоль и добавляет перенос строки. Если вызван без аргументов, просто добавляет перенос строки.
input()
Читает строку текста от пользователя.
to_int(value)
Преобразует значение в целое число. (Рекомендуется использовать конструкцию try...except
)
to_str(value)
Преобразует значение в строку.
to_float(value)
Преобразует значение в число с плавающей точкой. (Рекомендуется использовать конструкцию try...except
)
type(value)
Возвращает тип значения (например, "string", "number").
Встроенные методы
Некоторые типы данных имеют встроенные методы, которые можно вызывать через точку. Методы — это функции, связанные с конкретным объектом.
Методы строк (String)
"my string".len()
Возвращает количество символов в строке.
"my string".upper()
Возвращает новую строку в верхнем регистре.
"my string".lower()
Возвращает новую строку в нижнем регистре.
" str ".strip()
Удаляет пробельные символы в начале и в конце строки.
"string".startswith(prefix)
Возвращает true
, если строка начинается с prefix
.
"string".endswith(suffix)
Возвращает true
, если строка заканчивается на suffix
.
"string".find(substring)
Ищет подстроку и возвращает индекс первого вхождения или -1, если не найдено.
Методы списков (List)
my_list.len()
Возвращает количество элементов в списке.
my_list.append(item)
Добавляет элемент в конец списка.
my_list.pop()
Удаляет и возвращает последний элемент списка.
Методы словарей (Dictionary)
my_dict.len()
Возвращает количество пар ключ-значение в словаре.
my_dict.keys()
Возвращает список всех ключей в словаре.
Стандартная библиотека
Язык Dark поставляется с набором встроенных модулей для выполнения общих задач. Для использования функций модуля, импортируйте его: import "os"
, а затем вызывайте функции через точку: os.getcwd()
.
Модуль vsp210
vsp210.history()
Возвращает исторю создателя языка Dark.
vsp210.philosophy()
Возвращает философию языка Dark.(Секретная функция)
vsp210.calculator()
Запускает калькулятор написаный для примера.
vsp210.version()
Возвращает версию языка Dark.
vsp210.docs()
Отправляет пользователя на страницу документации языка Dark.
vsp210.telegram()
Отправляет пользователя в телеграм канал создателя языка Dark.
Модуль http
http.get(url)
Выполняет HTTP GET-запрос и возвращает словарь с `status_code`, `headers` и `body`.
http.post(url)
Выполняет HTTP POST-запрос и возвращает словарь с `status_code`, `headers` и `body`.
Модуль os
os.getcwd()
Возвращает текущую рабочую директорию.
os.path_exists(path)
Проверяет, существует ли путь. Возвращает True или False.
os.mkdir(path)
Создает директорию.
os.rmdir(path)
Удаляет директорию.
os.remove(path)
Удаляет файл.
os.rename(old, new)
Переименовывает файл или директорию.
os.listdir(path)
Возвращает список содержимого директории.
os.getsize(path)
Возвращает размер файла.
os.isdir(path)
Проверяет, является ли путь директорией.
os.system(command)
Выполняет системную команду (например, "cls"
или "clear"
).
os.exit(code)
Завершает выполнение программы с указанным кодом выхода.
Модуль math
math.sqrt(number)
Вычисляет квадратный корень числа.
math.pow(base, exp)
Вычисляет `base` в степени `exp`.
math.floor(number)
Возвращает наибольшее целое число, меньшее или равное `number`.
math.ceil(number)
Возвращает наименьшее целое число, большее или равное `number`.
math.pi()
Возвращает значение числа PI.
math.random()
Возвращает случайное число с плавающей точкой от 0.0 до 1.0.
math.randint(min, max)
Возвращает случайное целое число в диапазоне от min
до max
включительно.
Модуль stdlib
stdlib.range(start, stop)
Возвращает список чисел в диапазоне от `start` (включительно) до `stop` (не включительно).
stdlib.list_contains(list, item)
Проверяет, содержится ли `item` в `list`.
stdlib.list_join(list, separator)
Объединяет элементы списка в строку с указанным разделителем.
stdlib.dict_get(dict, key, default)
Получает значение из словаря по ключу, с возможностью указать значение по умолчанию.
stdlib.clamp(value, min, max)
Ограничивает значение `value` между `min` и `max`.
stdlib.json_decode(json_string)
Преобразует строку в формате JSON в словарь или список.
stdlib.read_file(path)
Читает содержимое файла и возвращает его в виде строки.
stdlib.write_file(path, content)
Записывает строку content
в файл по указанному пути path
.
stdlib.str_split(string, separator)
Разделяет строку по указанному разделителю и возвращает список.
stdlib.str_upper(string)
Преобразует строку в верхний регистр.
stdlib.str_lower(string)
Преобразует строку в нижний регистр.
stdlib.str_replace(string, old, new)
Заменяет все вхождения подстроки `old` на `new`.
Модуль time
time.time()
Возвращает текущее время в виде Unix timestamp (число секунд с 1 января 1970 года).
time.sleep(seconds)
Приостанавливает выполнение программы на указанное количество секунд.
Модуль file
Модуль для работы с файлами. Работает с одним файлом за раз. Сначала откройте файл с помощью file.open()
, затем используйте функции чтения/записи и не забудьте закрыть его с помощью file.close()
.
file.open(path, mode)
Открывает файл. mode
- это строка, например: "r"
(чтение), "w"
(запись), "a"
(дозапись), "r+"
(чтение и запись).
file.read()
Читает все содержимое открытого файла и возвращает его как строку.
file.readline()
Читает одну строку из файла.
file.readlines()
Читает все строки из файла и возвращает их в виде списка.
file.write(content)
Записывает строку content
в открытый файл.
file.close()
Закрывает ранее открытый файл.
Модуль gui
Простой модуль для создания графических интерфейсов на основе Tkinter.
gui.create_window(title, width, height)
Создает главное окно приложения с указанным заголовком и размерами.
gui.create_label(text)
Создает и размещает текстовую метку в окне.
gui.create_button(text, command)
Создает кнопку. command
- это имя функции (в виде строки), которая будет вызвана при нажатии.
gui.create_entry()
Создает поле для ввода текста.
gui.get_entry_value()
Возвращает текст, введенный в поле ввода (созданное через create_entry
).
gui.set_label_text(text)
Изменяет текст метки (созданной через create_label
).
gui.run_app()
Запускает главный цикл обработки событий GUI. Эта функция должна вызываться в конце скрипта.
Python-расширения
Одной из самых мощных возможностей Dark является способность подключать модули, написанные на Python. Это открывает доступ ко всей экосистеме библиотек Python.
Структура проекта
Для использования расширений создайте папку dark_extensions
в корне вашего проекта. В эту папку помещайте ваши .py
файлы-модули.
my_project/
├── dark_extensions/
│ └── math_ext.py
├── my_script.dark
└── ...
Создание модуля-расширения
Каждый Python-файл расширения должен содержать функцию get_module()
. Эта функция должна возвращать словарь, где ключи — это имена, которые будут доступны в Dark, а значения — это соответствующие функции или переменные из Python.
Все функции, предназначенные для вызова из Dark, должны принимать один аргумент — список (list) переданных параметров.
Пример: dark_extensions/math_ext.py
import math
# Функция принимает список аргументов от Dark
def power(args):
if len(args) != 2:
raise TypeError("pow() expects 2 arguments")
return math.pow(args[0], args[1])
# Эта функция будет вызвана интерпретатором Dark
def get_module():
return {
"pi": math.pi, # Экспорт переменной
"pow": power # Экспорт функции
}
Использование в Dark
Импортируйте ваше расширение как обычный модуль и используйте его содержимое.
import "math_ext"
println("Число PI из Python: " + math_ext.pi)
# Вызываем функцию из Python, передавая аргументы
# В Python они придут как список [2, 8]
result = math_ext.pow(2, 8)
println("2 в степени 8 = " + result) # Выведет 256.0