열거형을 정의하는 방법은 다음 같습니다.
---------------------------------------------------------------------------------------------------
const 열거형 이름 = enum ( 태그 자료형 )
{
열거 요소 = 태그 값
};
( 태그 자료형 ) 은 생략 가능하며, 생략시 컴파일러가 알아서 적절한 크기의 unsigned 자료형을 사용합니다.
열거 요소 는 여러개 정의할 수 있으며, 콤마로 구분합니다.
태그 값 은 생략 가능하며, 생략시 열거 요소들... 을 적은 순서대로 0, 1, 2, ... 기본 태그 값이 부여됩니다.
---------------------------------------------------------------------------------------------------
예시
// 관행적으로 열거형 이름의 첫 글자는 대문자를 사용하는 편입니다.
const Color = enum ( u2 )
{
red,
green,
blue = 4 // 임의의 태그 값을 지정할 수도 있습니다.
};
var current_color : Color = .red ; // 열거형의 요소를 변수에 저장할 수 있습니다.
// @enumToInt 는 열거형 값을 정수 값으로 변환할 때 사용합니다.
// @intToEnum 는 반대로 정수 값을 열거형 값으로 변환할 때 사용합니다.
var color_value = @enumToInt( current_color ); // color_value 에는 0 이 저장될 것입니다. (red 가 열거 요소들 중 첫번째 요소 이므로)
std.debug.print("color_value : {} \n", .{ color_value });
// "color_value : 0" 가 출력됩니다.
예시 : 열거형 내 함수 (enum method)
const Color = enum ( u2 )
{
red, green, blue,
// 이렇게 열거형 내 함수 (enum method)를 정의해서 값을 검사하는 것도 좋은 방법입니다.
pub fn isGreen ( self: Color ) bool
{
return (self == Color.green) ;
}
};
const val = Color.green;
std.debug.print( "isGreen : {} \n", .{ val.isGreen() } );
// "isGreen : true" 가 출력됩니다.
예시 : 열거형 활용 switch 문 (enum switch)
const val = Color.green;
const what_is_it = switch (val)
{
Color.red => "sexy red",
Color.green => "greenish green",
Color.blue => "ocean blue",
};
std.debug.print( "{} \n", .{ what_is_it } );
// "greenish green" 이 출력됩니다.
'Zig' 카테고리의 다른 글
[Zig] 포인터(pointers) (0) | 2024.03.21 |
---|---|
[Zig] 구조체(structs) (0) | 2024.03.21 |
[Zig] 도달 불가능(unreachable) (0) | 2024.03.21 |
[Zig] switch 조건문(statement) (0) | 2024.03.21 |
[Zig] 지연(defer) (0) | 2024.03.20 |