Skip to content

Commit

Permalink
add post 2025-01-05
Browse files Browse the repository at this point in the history
  • Loading branch information
maxmin93 committed Jan 5, 2025
1 parent 93fec7a commit 1c5f8e2
Show file tree
Hide file tree
Showing 3 changed files with 185 additions and 1 deletion.
12 changes: 11 additions & 1 deletion _posts/2025-01-03-zig-tutorial-1st.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,26 @@ brew install zig
# 0.13.0
```

### VSCode 의 Zig 확장 모듈 설치
#### VSCode 의 Zig 확장 모듈 설치

`Zig Language` 를 검색하여 선택한다.

<img src="/2025/01/03-vscode-ext-ziglang.png" alt="vscode-ext-ziglang" width="60%" />

### [Zig 언어 특징](https://www.openmymind.net/learning_zig/language_overview_1/)

- 강력하게 타입이 지정된 컴파일 언어
- 제네릭을 지원하고, 강력한 컴파일 타임 메타 프로그래밍 기능이 있고
- 가비지 수집을 포함하지 않습니다.
- 많은 사람들이 Zig 를 C 의 현대적인 대안으로 생각합니다.
- 문법도 C 와 유사 (중괄호 블록을 사용하고 세미콜론으로 문장 구분)

### 튜토리얼 문서

- [ziglang 공식문서](https://ziglang.org/documentation/master/)
- [zig.guide](https://zig.guide/getting-started/hello-world)
- [Introduction to Zig](https://pedropark99.github.io/zig-book/)
- [Learning Zig](https://www.openmymind.net/learning_zig/), [Learning Zig 한글 번역판](https://faultnote.github.io/posts/learning-zig/)
- [유튜브 - zig 비디오 강좌 (2023년)](https://www.youtube.com/playlist?list=PLtB7CL7EG7pCw7Xy1SQC53Gl8pI7aDg9t)


Expand Down
2 changes: 2 additions & 0 deletions _posts/2025-01-04-zig-tutorial-2nd.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ image: "https://upload.wikimedia.org/wikipedia/commons/b/b3/Zig_logo_2020.svg"

- [ziglang 공식문서](https://ziglang.org/documentation/master/)
- [zig.guide](https://zig.guide/getting-started/hello-world)
- [Introduction to Zig](https://pedropark99.github.io/zig-book/)
- [Learning Zig](https://www.openmymind.net/learning_zig/), [Learning Zig 한글 번역판](https://faultnote.github.io/posts/learning-zig/)
- [유튜브 - zig 비디오 강좌 (2023년)](https://www.youtube.com/playlist?list=PLtB7CL7EG7pCw7Xy1SQC53Gl8pI7aDg9t)


Expand Down
172 changes: 172 additions & 0 deletions _posts/2025-01-05-zig-tutorial-3rd.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
---
date: 2025-01-05 00:00:00 +0900
title: Zig Tutorial - 3일차
categories: ["language","zig"]
tags: ["tutorial","3rd-day"]
image: "https://upload.wikimedia.org/wikipedia/commons/b/b3/Zig_logo_2020.svg"
---

> Zig 언어 공부를 시작합니다. 설치부터 문법 및 간단한 응용까지 다룹니다.
{: .prompt-tip }

## 0. 튜토리얼 참고문서

- [ziglang 공식문서](https://ziglang.org/documentation/master/)
- [zig.guide](https://zig.guide/getting-started/hello-world)
- [Introduction to Zig](https://pedropark99.github.io/zig-book/)
- [Learning Zig](https://www.openmymind.net/learning_zig/), [Learning Zig 한글 번역판](https://faultnote.github.io/posts/learning-zig/)


## 1. 제어문

### [If 문](https://zig.guide/language-basics/if)

test 블록을 이용한 예제

```zig
const expect = @import("std").testing.expect;
test "if statement" {
const a = true;
var x: u16 = 0;
if (a) {
x += 1;
} else {
x += 2;
}
try expect(x == 1);
}
```

if 문 블록을 한 문장으로 축약할 수도 있다.

```zig
x += if (a) 1 else 2;
```

> test 실행 방법
{: .prompt-warning }

```bash
zig build test
# 테스트가 정상이면 오류 없이 종료
```

#### [또 다른 if 예제](https://pedropark99.github.io/zig-book/Chapters/03-structs.html#ifelse-statements)

- `try` 키워드를 사용하려면 `!void` 리턴 타입을 정의해야 한다.
- 이런 번거로움 없이 출력하려면 `std.debug.print` 가 최선이다.

```zig
const std = @import("std");
const stdout = std.io.getStdOut().writer();
pub fn main() !void {
const x = 5;
if (x > 10) {
try stdout.print(
"x > 10!\n", .{}
);
} else {
try stdout.print(
"x <= 10!\n", .{}
);
}
}
```

### [switch 문](https://pedropark99.github.io/zig-book/Chapters/03-structs.html#sec-switch)

```zig
const stdout = std.io.getStdOut().writer();
const Role = enum { SE, DPE, DE, DA, PM, PO, KS };
pub fn main() !void {
try switch_exam();
}
pub fn switch_exam() !void {
var area: []const u8 = undefined;
const role = Role.SE;
switch (role) {
.PM, .SE, .DPE, .PO => {
area = "Platform";
},
.DE, .DA => {
area = "Data & Analytics";
},
.KS => {
area = "Sales";
},
}
try stdout.print("{s}\n", .{area});
}
```


## 2. 반복문

### [while 문](https://zig.guide/language-basics/while-loops)

- 조건식에 이어 연속 실행 문장 `i += 1` 을 붙일 수 있고
- continue 와 break 명령을 사용할 수 있다.

```zig
test "while with continue expression" {
var sum: u8 = 0;
var i: u8 = 1;
while (i <= 10) : (i += 1) {
if (i == 2) continue;
if (i == 8) break;
sum += i;
}
std.debug.print("i = {d}, sum = {d}\n", .{ i, sum });
try expect(sum != 55);
}
// 출력
// i = 8, sum = 26
```

### [For 문](https://zig.guide/language-basics/for-loops)

- string 같은 반복 대상이 있고, `0..` 처럼 시작 위치를 지정할 수 있다.
- character 은 반복시 액세스 되는 값이고, index 는 인덱스를 지정

```zig
test "for" {
//character literals are equivalent to integer literals
const string = [_]u8{ 'a', 'b', 'c' };
for (string, 0..) |character, index| {
std.debug.print("character = {c}, index = {d}\n", .{ character, index });
}
for (string) |character| {
_ = character;
}
for (string, 0..) |_, index| {
_ = index;
}
for (string) |_| {}
}
// 출력
// character = a, index = 0
// character = b, index = 1
// character = c, index = 2
```


## 9. Review

- [Learning Zig 한글 번역판](https://faultnote.github.io/posts/learning-zig/) 을 먼저 정독해보는 것이 편하겠다.
- 이상한 구분자 기호들이 사용되어서 눈에 거슬리는데, 익숙해져야 할듯

&nbsp; <br />
&nbsp; <br />

> **끝!** &nbsp; 읽어주셔서 감사합니다.
{: .prompt-info }

0 comments on commit 1c5f8e2

Please sign in to comment.