-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutility.zig
More file actions
43 lines (37 loc) · 1.67 KB
/
utility.zig
File metadata and controls
43 lines (37 loc) · 1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
const std = @import("std");
pub fn ping() []const u8 {
return "Pong!";
}
// Basit ve rekürsif olarak çalışan bir faktöriyel fonksiyonu
pub fn factorial(value: u64) u64 {
if (value == 0 or value == 1) return 1;
return value * factorial(value - 1);
}
// Daha kolay yolu var mı henüz bilmiyorum
// Ama çalışırken sürekli std.debug.print, \n ve .{} kullanmaktan sıkılınca
// Bu yardımcı fonksiyonu yazmaya karar verdim.
pub fn println() void {
std.debug.print("\n", .{});
}
// statik buffer kullanılarak bir dosya içeriğini satır bazlı ekrana yazdıran fonksiyon
// Dinamik buffer ihtiyacı olmadığı için herhangi bir Allocator kullanılmıyor
pub fn writeLines(filePath: []const u8) !void {
// Dosyamızı read only modda açıyoruz
var file = try std.fs.cwd().openFile(filePath, .{ .mode = .read_only });
// Defer kullanımı söz konusu. Yani metot sonlanırken dosya da kapatılacak
defer file.close();
// Buffer kullanarak okuma yapacağımız için gerekli hazırlıklar
var bufReader = std.io.bufferedReader(file.reader());
var reader = bufReader.reader();
// 256 byte uzunluğunda bir satır okuyacağımızı belirtiyoruz
// 256 karakterden fazla bir satır olursa ne olur mesela?
var lineBuffer: [256]u8 = undefined;
// Burada sonsuz bir döngü söz konusu
// line değişkeni End Of File'a gelene kadar satırları reader yardımıyla lineBuffer okuyacak
while (true) {
// orelse ve try kullanımlarına dikkat
const line = try reader.readUntilDelimiterOrEof(&lineBuffer, '\n') orelse break;
// satırı ekrana yazdırıyoruz
std.debug.print("{s}\n", .{line});
}
}