# 커맨드

커맨드를 만들고 사용하는 방법입니다.

# 토스터 오브젝트 생성

// 토스터 오브젝트를 만듭니다
Toaster toaster = new();

toaster.Execute("1"); // 1
toaster.Execute("[1, 2, 3]") // [1, 2, 3]

초기 상태의 토스터 오브젝트에는 커맨드가 없습니다. AddCommand 메서드를 사용해서 커맨드를 추가해 사용할 수 있습니다.

# 커맨드 생성

toaster.AddCommand(ToastCommand.CreateAction<ToastContext, string>("print", (ctx, x) => Console.WriteLine(x)));
/* 
람다 식에서 타입을 명시하면 타입 파라미터를 생략할 수 있습니다
toaster.AddCommand(ToastCommand.CreateAction("print", (ToastContext ctx, string x) => Console.WriteLine(x)));
*/

toaster.AddCommand(ToastCommand.CreateFunc<ToastContext, string>("input", (ctx) => Console.ReadLine()));

토스트 커맨드에는 Action과 Func 두 종류가 있습니다.

< > 안에 적힌 타입 파라미터는 파라미터의 타입 또는 리턴 타입을 지정합니다.

ToastContext는 toaster 관련 데이터를 전달하는, 커맨드 사용시 유저가 전달하지 않는 파라미터입니다. ToastContext는 타입 파라미터에 단 한 개가 있어야됩니다.

# Action 커맨드

Action 커맨드는 리턴값이 없는 커맨드입니다.

ToastCommand cmd = ToastCommand.CreateAction<ToastContext, object>("print", (ctx, x) => Console.WriteLine(x));

오브젝트를 콘솔에 출력하는 코드입니다. 아래처럼 사용할 수 있습니다.

> print "This is an Action command."
This is an Action command.

# Func 커맨드

Func 커맨드는 리턴값이 있는 커맨드입니다. 타입 파라미터의 끝에 리턴 타입을 지정해야합니다.

toaster.AddCommand(ToastCommand.CreateFunc<ToastContext, string>("input", (ctx) => Console.ReadLine()));

콘솔에서 입력을 받아 출력하는 코드입니다.