Добавлен модуль использования Variant

This commit is contained in:
Alexander Zhirov 2025-05-18 13:42:08 +03:00
parent 16c77dc28d
commit 516b80c0d0
5 changed files with 57 additions and 1 deletions

View file

@ -12,6 +12,7 @@ int main(string[] args)
"Проверяет наличие исполняемого файла в директориях,указанных в переменной окружения PATH"))
.add(new Command("splittext",
"Форматирует массив строк, разбивая их на строки указанной длины"))
.add(new Command("variant", "Динамическая работа с разными типами данных в одной переменной"))
)
.add(new Command("ncurses", "Использование библиотеки ncurses")
.add(new Command("menu", "Интерактивное консольное меню"))
@ -27,6 +28,7 @@ int main(string[] args)
argumets
.on("common", (common) { common
.on("variant", (variant) { fVariant(); })
.on("splittext", (splittext) { formatLines(); })
.on("isexists", (isexists) { isExists(); });
})

View file

@ -7,3 +7,7 @@
## isexists
Функция `isExecutableExists` проверяет наличие исполняемого файла `appName` в директориях, указанных в переменной окружения `PATH`. Разбивает `PATH` на директории, формирует полный путь к файлу и проверяет его существование и тип (файл). Возвращает `true`, если файл найден, иначе `false`. Использует модули `std.process`, `std.file`, `std.path`, `std.array`.
## variant
Функция `fVariant` демонстрирует использование типа `Variant` из модуля `std.variant` для работы с данными разных типов. Вспомогательная функция `getValue` возвращает `Variant`, содержащий `int` (42) при `arg=1`, `string` ("Hello, D!") при `arg=2` или `DList!int` ([1, 2, 3]) в остальных случаях. `fVariant` выводит тип и значение для каждого случая, преобразуя `DList!int` в массив для отображения. Использует модули `std.variant`, `std.container`, `std.stdio`, `std.array`.

View file

@ -2,3 +2,4 @@ module examples.common;
public import examples.common.isexists;
public import examples.common.splittext;
public import examples.common.variant;

View file

@ -0,0 +1,49 @@
module examples.common.variant;
import std.variant;
import std.container;
import std.stdio : writeln;
import std.array : array;
// Возвращает Variant с разными типами в зависимости от arg.
private auto getValue(int arg)
{
/**
* `Variant` в D это тип из модуля `std.variant`,
* который может хранить значение любого типа
* (int, string, объекты, списки и т.д.) и позволяет
* динамически определять его тип во время выполнения.
* Используется для гибкой работы с данными,
* когда тип заранее неизвестен.
*/
Variant result;
if (arg == 1)
{
result = 42; // int
}
else if (arg == 2)
{
result = "Hello, D!"; // string
}
else
{
DList!int list = [1, 2, 3]; // DList!int
result = list;
}
return result;
}
// Показывает типы и значения, возвращаемые getValue.
void fVariant()
{
// Вывод для arg=1 (int)
writeln("Тип при arg=1: ", getValue(1).type, ", значение: ", getValue(1));
// Вывод для arg=2 (string)
writeln("Тип при arg=2: ", getValue(2).type, ", значение: ", getValue(2));
// Вывод для arg=0 (DList!int)
auto listVariant = getValue(0);
writeln("Тип при arg=0: ", listVariant.type, ", значение: ", array(
listVariant.get!(DList!int)));
}

View file

@ -1,3 +1,3 @@
module examples.version_;
enum examplesVersion = "0.5.0";
enum examplesVersion = "0.6.0";