Добавлен модуль использования Variant
This commit is contained in:
		
							parent
							
								
									16c77dc28d
								
							
						
					
					
						commit
						516b80c0d0
					
				
					 5 changed files with 57 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -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(); });
 | 
			
		||||
			})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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`.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,3 +2,4 @@ module examples.common;
 | 
			
		|||
 | 
			
		||||
public import examples.common.isexists;
 | 
			
		||||
public import examples.common.splittext;
 | 
			
		||||
public import examples.common.variant;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										49
									
								
								source/examples/common/variant.d
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								source/examples/common/variant.d
									
										
									
									
									
										Normal 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)));
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
module examples.version_;
 | 
			
		||||
 | 
			
		||||
enum examplesVersion = "0.5.0";
 | 
			
		||||
enum examplesVersion = "0.6.0";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue