diff options
| author | Li Jin <dragon-fly@qq.com> | 2026-02-24 00:35:05 +0800 |
|---|---|---|
| committer | Li Jin <dragon-fly@qq.com> | 2026-02-24 00:35:05 +0800 |
| commit | 50221313c577a2e9f01a3a6b12c8e54594f13126 (patch) | |
| tree | c2e45b3a7d2392d6cbb5aea9b7de4e2d35b03f69 /doc/yue-id-id.md | |
| parent | 52974cf6d560c123ecfcb20963e60e6caac87828 (diff) | |
| download | yuescript-50221313c577a2e9f01a3a6b12c8e54594f13126.tar.gz yuescript-50221313c577a2e9f01a3a6b12c8e54594f13126.tar.bz2 yuescript-50221313c577a2e9f01a3a6b12c8e54594f13126.zip | |
Updated all-in-one docs.v0.33.2
Diffstat (limited to 'doc/yue-id-id.md')
| -rw-r--r-- | doc/yue-id-id.md | 2497 |
1 files changed, 2 insertions, 2495 deletions
diff --git a/doc/yue-id-id.md b/doc/yue-id-id.md index ca90d85..200438e 100644 --- a/doc/yue-id-id.md +++ b/doc/yue-id-id.md | |||
| @@ -1,11 +1,5 @@ | |||
| 1 | --- | ||
| 2 | title: Referensi | ||
| 3 | --- | ||
| 4 | |||
| 5 | # Dokumentasi YueScript | 1 | # Dokumentasi YueScript |
| 6 | 2 | ||
| 7 | <img src="/image/yuescript.svg" width="250px" height="250px" alt="logo" style="padding-top: 3em; padding-bottom: 2em;"/> | ||
| 8 | |||
| 9 | Selamat datang di dokumentasi resmi <b>YueScript</b>!<br/> | 3 | Selamat datang di dokumentasi resmi <b>YueScript</b>!<br/> |
| 10 | Di sini Anda dapat menemukan fitur bahasa, penggunaan, contoh referensi, dan sumber daya.<br/> | 4 | Di sini Anda dapat menemukan fitur bahasa, penggunaan, contoh referensi, dan sumber daya.<br/> |
| 11 | Silakan pilih bab dari sidebar untuk mulai mempelajari YueScript. | 5 | Silakan pilih bab dari sidebar untuk mulai mempelajari YueScript. |
| @@ -21,17 +15,6 @@ do | |||
| 21 | print var -- nil di sini | 15 | print var -- nil di sini |
| 22 | ``` | 16 | ``` |
| 23 | 17 | ||
| 24 | <YueDisplay> | ||
| 25 | |||
| 26 | ```yue | ||
| 27 | do | ||
| 28 | var = "hello" | ||
| 29 | print var | ||
| 30 | print var -- nil di sini | ||
| 31 | ``` | ||
| 32 | |||
| 33 | </YueDisplay> | ||
| 34 | |||
| 35 | `do` di YueScript juga bisa digunakan sebagai ekspresi, memungkinkan Anda menggabungkan beberapa baris menjadi satu. Hasil ekspresi `do` adalah pernyataan terakhir di badannya. Ekspresi `do` mendukung penggunaan `break` untuk memutus alur eksekusi dan mengembalikan banyak nilai lebih awal. | 18 | `do` di YueScript juga bisa digunakan sebagai ekspresi, memungkinkan Anda menggabungkan beberapa baris menjadi satu. Hasil ekspresi `do` adalah pernyataan terakhir di badannya. Ekspresi `do` mendukung penggunaan `break` untuk memutus alur eksekusi dan mengembalikan banyak nilai lebih awal. |
| 36 | 19 | ||
| 37 | ```yuescript | 20 | ```yuescript |
| @@ -42,18 +25,6 @@ status, value = do | |||
| 42 | break "small", n | 25 | break "small", n |
| 43 | ``` | 26 | ``` |
| 44 | 27 | ||
| 45 | <YueDisplay> | ||
| 46 | |||
| 47 | ```yue | ||
| 48 | status, value = do | ||
| 49 | n = 12 | ||
| 50 | if n > 10 | ||
| 51 | break "large", n | ||
| 52 | break "small", n | ||
| 53 | ``` | ||
| 54 | |||
| 55 | </YueDisplay> | ||
| 56 | |||
| 57 | ```yuescript | 28 | ```yuescript |
| 58 | counter = do | 29 | counter = do |
| 59 | i = 0 | 30 | i = 0 |
| @@ -65,21 +36,6 @@ print counter! | |||
| 65 | print counter! | 36 | print counter! |
| 66 | ``` | 37 | ``` |
| 67 | 38 | ||
| 68 | <YueDisplay> | ||
| 69 | |||
| 70 | ```yue | ||
| 71 | counter = do | ||
| 72 | i = 0 | ||
| 73 | -> | ||
| 74 | i += 1 | ||
| 75 | i | ||
| 76 | |||
| 77 | print counter! | ||
| 78 | print counter! | ||
| 79 | ``` | ||
| 80 | |||
| 81 | </YueDisplay> | ||
| 82 | |||
| 83 | ```yuescript | 39 | ```yuescript |
| 84 | tbl = { | 40 | tbl = { |
| 85 | key: do | 41 | key: do |
| @@ -88,18 +44,6 @@ tbl = { | |||
| 88 | } | 44 | } |
| 89 | ``` | 45 | ``` |
| 90 | 46 | ||
| 91 | <YueDisplay> | ||
| 92 | |||
| 93 | ```yue | ||
| 94 | tbl = { | ||
| 95 | key: do | ||
| 96 | print "assigning key!" | ||
| 97 | 1234 | ||
| 98 | } | ||
| 99 | ``` | ||
| 100 | |||
| 101 | </YueDisplay> | ||
| 102 | |||
| 103 | # Dekorator Baris | 47 | # Dekorator Baris |
| 104 | 48 | ||
| 105 | Untuk kemudahan, loop for dan pernyataan if dapat diterapkan pada pernyataan tunggal di akhir baris: | 49 | Untuk kemudahan, loop for dan pernyataan if dapat diterapkan pada pernyataan tunggal di akhir baris: |
| @@ -108,28 +52,12 @@ Untuk kemudahan, loop for dan pernyataan if dapat diterapkan pada pernyataan tun | |||
| 108 | print "hello world" if name == "Rob" | 52 | print "hello world" if name == "Rob" |
| 109 | ``` | 53 | ``` |
| 110 | 54 | ||
| 111 | <YueDisplay> | ||
| 112 | |||
| 113 | ```yue | ||
| 114 | print "hello world" if name == "Rob" | ||
| 115 | ``` | ||
| 116 | |||
| 117 | </YueDisplay> | ||
| 118 | |||
| 119 | Dan dengan loop dasar: | 55 | Dan dengan loop dasar: |
| 120 | 56 | ||
| 121 | ```yuescript | 57 | ```yuescript |
| 122 | print "item: ", item for item in *items | 58 | print "item: ", item for item in *items |
| 123 | ``` | 59 | ``` |
| 124 | 60 | ||
| 125 | <YueDisplay> | ||
| 126 | |||
| 127 | ```yue | ||
| 128 | print "item: ", item for item in *items | ||
| 129 | ``` | ||
| 130 | |||
| 131 | </YueDisplay> | ||
| 132 | |||
| 133 | Dan dengan loop while: | 61 | Dan dengan loop while: |
| 134 | 62 | ||
| 135 | ```yuescript | 63 | ```yuescript |
| @@ -138,16 +66,6 @@ game\update! while game\isRunning! | |||
| 138 | reader\parse_line! until reader\eof! | 66 | reader\parse_line! until reader\eof! |
| 139 | ``` | 67 | ``` |
| 140 | 68 | ||
| 141 | <YueDisplay> | ||
| 142 | |||
| 143 | ```yue | ||
| 144 | game\update! while game\isRunning! | ||
| 145 | |||
| 146 | reader\parse_line! until reader\eof! | ||
| 147 | ``` | ||
| 148 | |||
| 149 | </YueDisplay> | ||
| 150 | |||
| 151 | # Makro | 69 | # Makro |
| 152 | 70 | ||
| 153 | ## Penggunaan Umum | 71 | ## Penggunaan Umum |
| @@ -183,39 +101,6 @@ if $and f1!, f2!, f3! | |||
| 183 | print "OK" | 101 | print "OK" |
| 184 | ``` | 102 | ``` |
| 185 | 103 | ||
| 186 | <YueDisplay> | ||
| 187 | |||
| 188 | ```yue | ||
| 189 | macro PI2 = -> math.pi * 2 | ||
| 190 | area = $PI2 * 5 | ||
| 191 | |||
| 192 | macro HELLO = -> "'hello world'" | ||
| 193 | print $HELLO | ||
| 194 | |||
| 195 | macro config = (debugging) -> | ||
| 196 | global debugMode = debugging == "true" | ||
| 197 | "" | ||
| 198 | |||
| 199 | macro asserts = (cond) -> | ||
| 200 | debugMode and "assert #{cond}" or "" | ||
| 201 | |||
| 202 | macro assert = (cond) -> | ||
| 203 | debugMode and "assert #{cond}" or "#{cond}" | ||
| 204 | |||
| 205 | $config true | ||
| 206 | $asserts item ~= nil | ||
| 207 | |||
| 208 | $config false | ||
| 209 | value = $assert item | ||
| 210 | |||
| 211 | -- ekspresi yang dikirim diperlakukan sebagai string | ||
| 212 | macro and = (...) -> "#{ table.concat {...}, ' and ' }" | ||
| 213 | if $and f1!, f2!, f3! | ||
| 214 | print "OK" | ||
| 215 | ``` | ||
| 216 | |||
| 217 | </YueDisplay> | ||
| 218 | |||
| 219 | ## Menyisipkan Kode Mentah | 104 | ## Menyisipkan Kode Mentah |
| 220 | 105 | ||
| 221 | Fungsi macro bisa mengembalikan string YueScript atau tabel konfigurasi yang berisi kode Lua. | 106 | Fungsi macro bisa mengembalikan string YueScript atau tabel konfigurasi yang berisi kode Lua. |
| @@ -246,36 +131,6 @@ end | |||
| 246 | ]==] | 131 | ]==] |
| 247 | ``` | 132 | ``` |
| 248 | 133 | ||
| 249 | <YueDisplay> | ||
| 250 | |||
| 251 | ```yue | ||
| 252 | macro yueFunc = (var) -> "local #{var} = ->" | ||
| 253 | $yueFunc funcA | ||
| 254 | funcA = -> "gagal meng-assign ke variabel yang didefinisikan oleh macro Yue" | ||
| 255 | |||
| 256 | macro luaFunc = (var) -> { | ||
| 257 | code: "local function #{var}() end" | ||
| 258 | type: "lua" | ||
| 259 | } | ||
| 260 | $luaFunc funcB | ||
| 261 | funcB = -> "gagal meng-assign ke variabel yang didefinisikan oleh macro Lua" | ||
| 262 | |||
| 263 | macro lua = (code) -> { | ||
| 264 | :code | ||
| 265 | type: "lua" | ||
| 266 | } | ||
| 267 | |||
| 268 | -- simbol awal dan akhir string mentah otomatis di-trim | ||
| 269 | $lua[==[ | ||
| 270 | -- penyisipan kode Lua mentah | ||
| 271 | if cond then | ||
| 272 | print("output") | ||
| 273 | end | ||
| 274 | ]==] | ||
| 275 | ``` | ||
| 276 | |||
| 277 | </YueDisplay> | ||
| 278 | |||
| 279 | ## Export Macro | 134 | ## Export Macro |
| 280 | 135 | ||
| 281 | Fungsi macro dapat diekspor dari modul dan diimpor di modul lain. Anda harus menaruh fungsi macro export dalam satu file agar dapat digunakan, dan hanya definisi macro, impor macro, dan ekspansi macro yang boleh ada di modul export macro. | 136 | Fungsi macro dapat diekspor dari modul dan diimpor di modul lain. Anda harus menaruh fungsi macro export dalam satu file agar dapat digunakan, dan hanya definisi macro, impor macro, dan ekspansi macro yang boleh ada di modul export macro. |
| @@ -295,28 +150,6 @@ import "utils" as { | |||
| 295 | [1, 2, 3] |> $map(_ * 2) |> $filter(_ > 4) |> $each print _ | 150 | [1, 2, 3] |> $map(_ * 2) |> $filter(_ > 4) |> $each print _ |
| 296 | ``` | 151 | ``` |
| 297 | 152 | ||
| 298 | <YueDisplay> | ||
| 299 | |||
| 300 | ```yue | ||
| 301 | -- file: utils.yue | ||
| 302 | export macro map = (items, action) -> "[#{action} for _ in *#{items}]" | ||
| 303 | export macro filter = (items, action) -> "[_ for _ in *#{items} when #{action}]" | ||
| 304 | export macro foreach = (items, action) -> "for _ in *#{items} | ||
| 305 | #{action}" | ||
| 306 | |||
| 307 | -- file main.yue | ||
| 308 | -- fungsi import tidak tersedia di browser, coba di lingkungan nyata | ||
| 309 | --[[ | ||
| 310 | import "utils" as { | ||
| 311 | $, -- simbol untuk mengimpor semua macro | ||
| 312 | $foreach: $each -- ganti nama macro $foreach menjadi $each | ||
| 313 | } | ||
| 314 | [1, 2, 3] |> $map(_ * 2) |> $filter(_ > 4) |> $each print _ | ||
| 315 | ]] | ||
| 316 | ``` | ||
| 317 | |||
| 318 | </YueDisplay> | ||
| 319 | |||
| 320 | ## Macro Bawaan | 153 | ## Macro Bawaan |
| 321 | 154 | ||
| 322 | Ada beberapa macro bawaan tetapi Anda bisa menimpanya dengan mendeklarasikan macro dengan nama yang sama. | 155 | Ada beberapa macro bawaan tetapi Anda bisa menimpanya dengan mendeklarasikan macro dengan nama yang sama. |
| @@ -326,15 +159,6 @@ print $FILE -- mendapatkan string nama modul saat ini | |||
| 326 | print $LINE -- mendapatkan angka 2 | 159 | print $LINE -- mendapatkan angka 2 |
| 327 | ``` | 160 | ``` |
| 328 | 161 | ||
| 329 | <YueDisplay> | ||
| 330 | |||
| 331 | ```yue | ||
| 332 | print $FILE -- mendapatkan string nama modul saat ini | ||
| 333 | print $LINE -- mendapatkan angka 2 | ||
| 334 | ``` | ||
| 335 | |||
| 336 | </YueDisplay> | ||
| 337 | |||
| 338 | ## Menghasilkan Macro dengan Macro | 162 | ## Menghasilkan Macro dengan Macro |
| 339 | 163 | ||
| 340 | Di YueScript, fungsi macro memungkinkan Anda menghasilkan kode pada waktu kompilasi. Dengan menumpuk fungsi macro, Anda dapat membuat pola generasi yang lebih kompleks. Fitur ini memungkinkan Anda mendefinisikan fungsi macro yang menghasilkan fungsi macro lain, sehingga menghasilkan kode yang lebih dinamis. | 164 | Di YueScript, fungsi macro memungkinkan Anda menghasilkan kode pada waktu kompilasi. Dengan menumpuk fungsi macro, Anda dapat membuat pola generasi yang lebih kompleks. Fitur ini memungkinkan Anda mendefinisikan fungsi macro yang menghasilkan fungsi macro lain, sehingga menghasilkan kode yang lebih dinamis. |
| @@ -357,28 +181,6 @@ print "Valid enum type:", $BodyType Static | |||
| 357 | -- print "Compilation error with enum type:", $BodyType Unknown | 181 | -- print "Compilation error with enum type:", $BodyType Unknown |
| 358 | ``` | 182 | ``` |
| 359 | 183 | ||
| 360 | <YueDisplay> | ||
| 361 | |||
| 362 | ```yue | ||
| 363 | macro Enum = (...) -> | ||
| 364 | items = {...} | ||
| 365 | itemSet = {item, true for item in *items} | ||
| 366 | (item) -> | ||
| 367 | error "got \"#{item}\", expecting one of #{table.concat items, ', '}" unless itemSet[item] | ||
| 368 | "\"#{item}\"" | ||
| 369 | |||
| 370 | macro BodyType = $Enum( | ||
| 371 | Static | ||
| 372 | Dynamic | ||
| 373 | Kinematic | ||
| 374 | ) | ||
| 375 | |||
| 376 | print "Valid enum type:", $BodyType Static | ||
| 377 | -- print "Compilation error with enum type:", $BodyType Unknown | ||
| 378 | ``` | ||
| 379 | |||
| 380 | </YueDisplay> | ||
| 381 | |||
| 382 | ## Validasi Argumen | 184 | ## Validasi Argumen |
| 383 | 185 | ||
| 384 | Anda dapat mendeklarasikan tipe node AST yang diharapkan dalam daftar argumen, dan memeriksa apakah argumen macro yang masuk memenuhi harapan pada waktu kompilasi. | 186 | Anda dapat mendeklarasikan tipe node AST yang diharapkan dalam daftar argumen, dan memeriksa apakah argumen macro yang masuk memenuhi harapan pada waktu kompilasi. |
| @@ -393,20 +195,6 @@ macro printNumAndStr = (num `Num, str `String) -> | | |||
| 393 | $printNumAndStr 123, "hello" | 195 | $printNumAndStr 123, "hello" |
| 394 | ``` | 196 | ``` |
| 395 | 197 | ||
| 396 | <YueDisplay> | ||
| 397 | |||
| 398 | ```yue | ||
| 399 | macro printNumAndStr = (num `Num, str `String) -> | | ||
| 400 | print( | ||
| 401 | #{num} | ||
| 402 | #{str} | ||
| 403 | ) | ||
| 404 | |||
| 405 | $printNumAndStr 123, "hello" | ||
| 406 | ``` | ||
| 407 | |||
| 408 | </YueDisplay> | ||
| 409 | |||
| 410 | Jika Anda membutuhkan pengecekan argumen yang lebih fleksibel, Anda dapat menggunakan fungsi macro bawaan `$is_ast` untuk memeriksa secara manual pada tempat yang tepat. | 198 | Jika Anda membutuhkan pengecekan argumen yang lebih fleksibel, Anda dapat menggunakan fungsi macro bawaan `$is_ast` untuk memeriksa secara manual pada tempat yang tepat. |
| 411 | 199 | ||
| 412 | ```yuescript | 200 | ```yuescript |
| @@ -418,19 +206,6 @@ macro printNumAndStr = (num, str) -> | |||
| 418 | $printNumAndStr 123, "hello" | 206 | $printNumAndStr 123, "hello" |
| 419 | ``` | 207 | ``` |
| 420 | 208 | ||
| 421 | <YueDisplay> | ||
| 422 | |||
| 423 | ```yue | ||
| 424 | macro printNumAndStr = (num, str) -> | ||
| 425 | error "expected Num as first argument" unless $is_ast Num, num | ||
| 426 | error "expected String as second argument" unless $is_ast String, str | ||
| 427 | "print(#{num}, #{str})" | ||
| 428 | |||
| 429 | $printNumAndStr 123, "hello" | ||
| 430 | ``` | ||
| 431 | |||
| 432 | </YueDisplay> | ||
| 433 | |||
| 434 | Untuk detail lebih lanjut tentang node AST yang tersedia, silakan lihat definisi huruf besar di [yue_parser.cpp](https://github.com/IppClub/YueScript/blob/main/src/yuescript/yue_parser.cpp). | 209 | Untuk detail lebih lanjut tentang node AST yang tersedia, silakan lihat definisi huruf besar di [yue_parser.cpp](https://github.com/IppClub/YueScript/blob/main/src/yuescript/yue_parser.cpp). |
| 435 | 210 | ||
| 436 | # Try | 211 | # Try |
| @@ -465,38 +240,6 @@ catch err | |||
| 465 | print result | 240 | print result |
| 466 | ``` | 241 | ``` |
| 467 | 242 | ||
| 468 | <YueDisplay> | ||
| 469 | |||
| 470 | ```yue | ||
| 471 | try | ||
| 472 | func 1, 2, 3 | ||
| 473 | catch err | ||
| 474 | print yue.traceback err | ||
| 475 | |||
| 476 | success, result = try | ||
| 477 | func 1, 2, 3 | ||
| 478 | catch err | ||
| 479 | yue.traceback err | ||
| 480 | |||
| 481 | try func 1, 2, 3 | ||
| 482 | catch err | ||
| 483 | print yue.traceback err | ||
| 484 | |||
| 485 | success, result = try func 1, 2, 3 | ||
| 486 | |||
| 487 | try | ||
| 488 | print "trying" | ||
| 489 | func 1, 2, 3 | ||
| 490 | |||
| 491 | -- bekerja dengan pola if assignment | ||
| 492 | if success, result := try func 1, 2, 3 | ||
| 493 | catch err | ||
| 494 | print yue.traceback err | ||
| 495 | print result | ||
| 496 | ``` | ||
| 497 | |||
| 498 | </YueDisplay> | ||
| 499 | |||
| 500 | ## Try? | 243 | ## Try? |
| 501 | 244 | ||
| 502 | `try?` adalah bentuk sederhana untuk penanganan error yang menghilangkan status boolean dari pernyataan `try`, dan akan mengembalikan hasil dari blok try ketika berhasil, atau mengembalikan nil alih-alih objek error bila gagal. | 245 | `try?` adalah bentuk sederhana untuk penanganan error yang menghilangkan status boolean dari pernyataan `try`, dan akan mengembalikan hasil dari blok try ketika berhasil, atau mengembalikan nil alih-alih objek error bila gagal. |
| @@ -519,44 +262,14 @@ catch e | |||
| 519 | e | 262 | e |
| 520 | ``` | 263 | ``` |
| 521 | 264 | ||
| 522 | <YueDisplay> | ||
| 523 | |||
| 524 | ```yue | ||
| 525 | a, b, c = try? func! | ||
| 526 | |||
| 527 | -- dengan operator nil coalescing | ||
| 528 | a = (try? func!) ?? "default" | ||
| 529 | |||
| 530 | -- sebagai argumen fungsi | ||
| 531 | f try? func! | ||
| 532 | |||
| 533 | -- dengan blok catch | ||
| 534 | f try? | ||
| 535 | print 123 | ||
| 536 | func! | ||
| 537 | catch e | ||
| 538 | print e | ||
| 539 | e | ||
| 540 | ``` | ||
| 541 | |||
| 542 | </YueDisplay> | ||
| 543 | |||
| 544 | # Literal Tabel | 265 | # Literal Tabel |
| 545 | 266 | ||
| 546 | Seperti di Lua, tabel dibatasi dengan kurung kurawal. | 267 | Seperti di Lua, tabel dibatasi dengan kurung kurawal. |
| 547 | 268 | ||
| 548 | ```yuescript | 269 | ```yuescript |
| 549 | some_values = [1, 2, 3, 4] | 270 | some_values = {1, 2, 3, 4} |
| 550 | ``` | ||
| 551 | |||
| 552 | <YueDisplay> | ||
| 553 | |||
| 554 | ```yue | ||
| 555 | some_values = [1, 2, 3, 4] | ||
| 556 | ``` | 271 | ``` |
| 557 | 272 | ||
| 558 | </YueDisplay> | ||
| 559 | |||
| 560 | Berbeda dengan Lua, assignment nilai ke sebuah kunci di tabel dilakukan dengan **:** (bukan **=**). | 273 | Berbeda dengan Lua, assignment nilai ke sebuah kunci di tabel dilakukan dengan **:** (bukan **=**). |
| 561 | 274 | ||
| 562 | ```yuescript | 275 | ```yuescript |
| @@ -567,18 +280,6 @@ some_values = { | |||
| 567 | } | 280 | } |
| 568 | ``` | 281 | ``` |
| 569 | 282 | ||
| 570 | <YueDisplay> | ||
| 571 | |||
| 572 | ```yue | ||
| 573 | some_values = { | ||
| 574 | name: "Bill", | ||
| 575 | age: 200, | ||
| 576 | ["favorite food"]: "rice" | ||
| 577 | } | ||
| 578 | ``` | ||
| 579 | |||
| 580 | </YueDisplay> | ||
| 581 | |||
| 582 | Kurung kurawal dapat dihilangkan jika hanya satu tabel pasangan key-value yang di-assign. | 283 | Kurung kurawal dapat dihilangkan jika hanya satu tabel pasangan key-value yang di-assign. |
| 583 | 284 | ||
| 584 | ```yuescript | 285 | ```yuescript |
| @@ -588,17 +289,6 @@ profile = | |||
| 588 | favorite_foods: ["ice cream", "donuts"] | 289 | favorite_foods: ["ice cream", "donuts"] |
| 589 | ``` | 290 | ``` |
| 590 | 291 | ||
| 591 | <YueDisplay> | ||
| 592 | |||
| 593 | ```yue | ||
| 594 | profile = | ||
| 595 | height: "4 feet", | ||
| 596 | shoe_size: 13, | ||
| 597 | favorite_foods: ["ice cream", "donuts"] | ||
| 598 | ``` | ||
| 599 | |||
| 600 | </YueDisplay> | ||
| 601 | |||
| 602 | Baris baru dapat digunakan untuk memisahkan nilai sebagai ganti koma (atau keduanya): | 292 | Baris baru dapat digunakan untuk memisahkan nilai sebagai ganti koma (atau keduanya): |
| 603 | 293 | ||
| 604 | ```yuescript | 294 | ```yuescript |
| @@ -610,19 +300,6 @@ values = { | |||
| 610 | } | 300 | } |
| 611 | ``` | 301 | ``` |
| 612 | 302 | ||
| 613 | <YueDisplay> | ||
| 614 | |||
| 615 | ```yue | ||
| 616 | values = { | ||
| 617 | 1, 2, 3, 4 | ||
| 618 | 5, 6, 7, 8 | ||
| 619 | name: "superman" | ||
| 620 | occupation: "crime fighting" | ||
| 621 | } | ||
| 622 | ``` | ||
| 623 | |||
| 624 | </YueDisplay> | ||
| 625 | |||
| 626 | Saat membuat literal tabel satu baris, kurung kurawal juga bisa dihilangkan: | 303 | Saat membuat literal tabel satu baris, kurung kurawal juga bisa dihilangkan: |
| 627 | 304 | ||
| 628 | ```yuescript | 305 | ```yuescript |
| @@ -631,16 +308,6 @@ my_function dance: "Tango", partner: "none" | |||
| 631 | y = type: "dog", legs: 4, tails: 1 | 308 | y = type: "dog", legs: 4, tails: 1 |
| 632 | ``` | 309 | ``` |
| 633 | 310 | ||
| 634 | <YueDisplay> | ||
| 635 | |||
| 636 | ```yue | ||
| 637 | my_function dance: "Tango", partner: "none" | ||
| 638 | |||
| 639 | y = type: "dog", legs: 4, tails: 1 | ||
| 640 | ``` | ||
| 641 | |||
| 642 | </YueDisplay> | ||
| 643 | |||
| 644 | Kunci literal tabel dapat berupa kata kunci bahasa tanpa perlu di-escape: | 311 | Kunci literal tabel dapat berupa kata kunci bahasa tanpa perlu di-escape: |
| 645 | 312 | ||
| 646 | ```yuescript | 313 | ```yuescript |
| @@ -650,17 +317,6 @@ tbl = { | |||
| 650 | } | 317 | } |
| 651 | ``` | 318 | ``` |
| 652 | 319 | ||
| 653 | <YueDisplay> | ||
| 654 | |||
| 655 | ```yue | ||
| 656 | tbl = { | ||
| 657 | do: "something" | ||
| 658 | end: "hunger" | ||
| 659 | } | ||
| 660 | ``` | ||
| 661 | |||
| 662 | </YueDisplay> | ||
| 663 | |||
| 664 | Jika Anda membangun tabel dari variabel dan ingin kunci sama dengan nama variabel, maka operator prefiks **:** dapat digunakan: | 320 | Jika Anda membangun tabel dari variabel dan ingin kunci sama dengan nama variabel, maka operator prefiks **:** dapat digunakan: |
| 665 | 321 | ||
| 666 | ```yuescript | 322 | ```yuescript |
| @@ -671,18 +327,6 @@ person = { :hair, :height, shoe_size: 40 } | |||
| 671 | print_table :hair, :height | 327 | print_table :hair, :height |
| 672 | ``` | 328 | ``` |
| 673 | 329 | ||
| 674 | <YueDisplay> | ||
| 675 | |||
| 676 | ```yue | ||
| 677 | hair = "golden" | ||
| 678 | height = 200 | ||
| 679 | person = { :hair, :height, shoe_size: 40 } | ||
| 680 | |||
| 681 | print_table :hair, :height | ||
| 682 | ``` | ||
| 683 | |||
| 684 | </YueDisplay> | ||
| 685 | |||
| 686 | Jika Anda ingin kunci field dalam tabel menjadi hasil suatu ekspresi, Anda dapat membungkusnya dengan **[ ]**, seperti di Lua. Anda juga bisa menggunakan literal string langsung sebagai kunci tanpa tanda kurung siku. Ini berguna jika kunci memiliki karakter khusus. | 330 | Jika Anda ingin kunci field dalam tabel menjadi hasil suatu ekspresi, Anda dapat membungkusnya dengan **[ ]**, seperti di Lua. Anda juga bisa menggunakan literal string langsung sebagai kunci tanpa tanda kurung siku. Ini berguna jika kunci memiliki karakter khusus. |
| 687 | 331 | ||
| 688 | ```yuescript | 332 | ```yuescript |
| @@ -692,33 +336,13 @@ t = { | |||
| 692 | } | 336 | } |
| 693 | ``` | 337 | ``` |
| 694 | 338 | ||
| 695 | <YueDisplay> | 339 | Tabel Lua memiliki bagian array dan bagian hash, tetapi kadang-kadang berguna untuk membuat perbedaan semantik di antara keduanya. Anda dapat menggunakan **[ ]** sebagai ganti **{ }** untuk mendeklarasikan tabel secara eksplisit sebagai array, dengan begitu akan mencegah pasangan key-value dituliskan di dalamnya. |
| 696 | |||
| 697 | ```yue | ||
| 698 | t = { | ||
| 699 | [1 + 2]: "hello" | ||
| 700 | "hello world": true | ||
| 701 | } | ||
| 702 | ``` | ||
| 703 | |||
| 704 | </YueDisplay> | ||
| 705 | |||
| 706 | Tabel Lua memiliki bagian array dan bagian hash, tetapi terkadang Anda ingin membedakan penggunaan array dan hash secara semantik saat menulis tabel Lua. Maka Anda bisa menulis tabel Lua dengan **[ ]** alih-alih **{ }** untuk merepresentasikan tabel array, dan menuliskan pasangan key-value di tabel list tidak akan diizinkan. | ||
| 707 | 340 | ||
| 708 | ```yuescript | 341 | ```yuescript |
| 709 | some_values = [1, 2, 3, 4] | 342 | some_values = [1, 2, 3, 4] |
| 710 | list_with_one_element = [1, ] | 343 | list_with_one_element = [1, ] |
| 711 | ``` | 344 | ``` |
| 712 | 345 | ||
| 713 | <YueDisplay> | ||
| 714 | |||
| 715 | ```yue | ||
| 716 | some_values = [1, 2, 3, 4] | ||
| 717 | list_with_one_element = [1, ] | ||
| 718 | ``` | ||
| 719 | |||
| 720 | </YueDisplay> | ||
| 721 | |||
| 722 | # Komprehensi | 346 | # Komprehensi |
| 723 | 347 | ||
| 724 | Komprehensi menyediakan sintaks yang nyaman untuk membangun tabel baru dengan mengiterasi objek yang ada dan menerapkan ekspresi pada nilainya. Ada dua jenis komprehensi: komprehensi list dan komprehensi tabel. Keduanya menghasilkan tabel Lua; komprehensi list mengakumulasi nilai ke tabel mirip array, dan komprehensi tabel memungkinkan Anda menetapkan kunci dan nilai pada setiap iterasi. | 348 | Komprehensi menyediakan sintaks yang nyaman untuk membangun tabel baru dengan mengiterasi objek yang ada dan menerapkan ekspresi pada nilainya. Ada dua jenis komprehensi: komprehensi list dan komprehensi tabel. Keduanya menghasilkan tabel Lua; komprehensi list mengakumulasi nilai ke tabel mirip array, dan komprehensi tabel memungkinkan Anda menetapkan kunci dan nilai pada setiap iterasi. |
| @@ -732,43 +356,18 @@ items = [ 1, 2, 3, 4 ] | |||
| 732 | doubled = [item * 2 for i, item in ipairs items] | 356 | doubled = [item * 2 for i, item in ipairs items] |
| 733 | ``` | 357 | ``` |
| 734 | 358 | ||
| 735 | <YueDisplay> | ||
| 736 | |||
| 737 | ```yue | ||
| 738 | items = [ 1, 2, 3, 4 ] | ||
| 739 | doubled = [item * 2 for i, item in ipairs items] | ||
| 740 | ``` | ||
| 741 | |||
| 742 | </YueDisplay> | ||
| 743 | |||
| 744 | Item yang disertakan dalam tabel baru bisa dibatasi dengan klausa `when`: | 359 | Item yang disertakan dalam tabel baru bisa dibatasi dengan klausa `when`: |
| 745 | 360 | ||
| 746 | ```yuescript | 361 | ```yuescript |
| 747 | slice = [item for i, item in ipairs items when i > 1 and i < 3] | 362 | slice = [item for i, item in ipairs items when i > 1 and i < 3] |
| 748 | ``` | 363 | ``` |
| 749 | 364 | ||
| 750 | <YueDisplay> | ||
| 751 | |||
| 752 | ```yue | ||
| 753 | slice = [item for i, item in ipairs items when i > 1 and i < 3] | ||
| 754 | ``` | ||
| 755 | |||
| 756 | </YueDisplay> | ||
| 757 | |||
| 758 | Karena umum untuk mengiterasi nilai dari tabel berindeks numerik, operator **\*** diperkenalkan. Contoh `doubled` bisa ditulis ulang sebagai: | 365 | Karena umum untuk mengiterasi nilai dari tabel berindeks numerik, operator **\*** diperkenalkan. Contoh `doubled` bisa ditulis ulang sebagai: |
| 759 | 366 | ||
| 760 | ```yuescript | 367 | ```yuescript |
| 761 | doubled = [item * 2 for item in *items] | 368 | doubled = [item * 2 for item in *items] |
| 762 | ``` | 369 | ``` |
| 763 | 370 | ||
| 764 | <YueDisplay> | ||
| 765 | |||
| 766 | ```yue | ||
| 767 | doubled = [item * 2 for item in *items] | ||
| 768 | ``` | ||
| 769 | |||
| 770 | </YueDisplay> | ||
| 771 | |||
| 772 | Dalam komprehensi list, Anda juga bisa menggunakan operator spread `...` untuk meratakan list bertingkat, menghasilkan efek flat map: | 371 | Dalam komprehensi list, Anda juga bisa menggunakan operator spread `...` untuk meratakan list bertingkat, menghasilkan efek flat map: |
| 773 | 372 | ||
| 774 | ```yuescript | 373 | ```yuescript |
| @@ -780,19 +379,6 @@ flat = [...v for k,v in pairs data] | |||
| 780 | -- flat sekarang [1, 2, 3, 4, 5, 6] | 379 | -- flat sekarang [1, 2, 3, 4, 5, 6] |
| 781 | ``` | 380 | ``` |
| 782 | 381 | ||
| 783 | <YueDisplay> | ||
| 784 | |||
| 785 | ```yue | ||
| 786 | data = | ||
| 787 | a: [1, 2, 3] | ||
| 788 | b: [4, 5, 6] | ||
| 789 | |||
| 790 | flat = [...v for k,v in pairs data] | ||
| 791 | -- flat sekarang [1, 2, 3, 4, 5, 6] | ||
| 792 | ``` | ||
| 793 | |||
| 794 | </YueDisplay> | ||
| 795 | |||
| 796 | Klausa `for` dan `when` dapat dirantai sebanyak yang diinginkan. Satu-satunya syarat adalah komprehensi memiliki setidaknya satu klausa `for`. | 382 | Klausa `for` dan `when` dapat dirantai sebanyak yang diinginkan. Satu-satunya syarat adalah komprehensi memiliki setidaknya satu klausa `for`. |
| 797 | 383 | ||
| 798 | Menggunakan beberapa klausa `for` sama seperti menggunakan loop bertingkat: | 384 | Menggunakan beberapa klausa `for` sama seperti menggunakan loop bertingkat: |
| @@ -805,32 +391,12 @@ points = [ [x, y] for x in *x_coords \ | |||
| 805 | for y in *y_coords] | 391 | for y in *y_coords] |
| 806 | ``` | 392 | ``` |
| 807 | 393 | ||
| 808 | <YueDisplay> | ||
| 809 | |||
| 810 | ```yue | ||
| 811 | x_coords = [4, 5, 6, 7] | ||
| 812 | y_coords = [9, 2, 3] | ||
| 813 | |||
| 814 | points = [ [x, y] for x in *x_coords \ | ||
| 815 | for y in *y_coords] | ||
| 816 | ``` | ||
| 817 | |||
| 818 | </YueDisplay> | ||
| 819 | |||
| 820 | Perulangan for numerik juga bisa digunakan dalam komprehensi: | 394 | Perulangan for numerik juga bisa digunakan dalam komprehensi: |
| 821 | 395 | ||
| 822 | ```yuescript | 396 | ```yuescript |
| 823 | evens = [i for i = 1, 100 when i % 2 == 0] | 397 | evens = [i for i = 1, 100 when i % 2 == 0] |
| 824 | ``` | 398 | ``` |
| 825 | 399 | ||
| 826 | <YueDisplay> | ||
| 827 | |||
| 828 | ```yue | ||
| 829 | evens = [i for i = 1, 100 when i % 2 == 0] | ||
| 830 | ``` | ||
| 831 | |||
| 832 | </YueDisplay> | ||
| 833 | |||
| 834 | ## Komprehensi Tabel | 400 | ## Komprehensi Tabel |
| 835 | 401 | ||
| 836 | Sintaks untuk komprehensi tabel sangat mirip, hanya berbeda dengan penggunaan **{** dan **}** serta mengambil dua nilai dari setiap iterasi. | 402 | Sintaks untuk komprehensi tabel sangat mirip, hanya berbeda dengan penggunaan **{** dan **}** serta mengambil dua nilai dari setiap iterasi. |
| @@ -847,32 +413,10 @@ thing = { | |||
| 847 | thing_copy = {k, v for k, v in pairs thing} | 413 | thing_copy = {k, v for k, v in pairs thing} |
| 848 | ``` | 414 | ``` |
| 849 | 415 | ||
| 850 | <YueDisplay> | ||
| 851 | |||
| 852 | ```yue | ||
| 853 | thing = { | ||
| 854 | color: "red" | ||
| 855 | name: "fast" | ||
| 856 | width: 123 | ||
| 857 | } | ||
| 858 | |||
| 859 | thing_copy = {k, v for k, v in pairs thing} | ||
| 860 | ``` | ||
| 861 | |||
| 862 | </YueDisplay> | ||
| 863 | |||
| 864 | ```yuescript | 416 | ```yuescript |
| 865 | no_color = {k, v for k, v in pairs thing when k != "color"} | 417 | no_color = {k, v for k, v in pairs thing when k != "color"} |
| 866 | ``` | 418 | ``` |
| 867 | 419 | ||
| 868 | <YueDisplay> | ||
| 869 | |||
| 870 | ```yue | ||
| 871 | no_color = {k, v for k, v in pairs thing when k != "color"} | ||
| 872 | ``` | ||
| 873 | |||
| 874 | </YueDisplay> | ||
| 875 | |||
| 876 | Operator **\*** juga didukung. Di sini kita membuat tabel lookup akar kuadrat untuk beberapa angka. | 420 | Operator **\*** juga didukung. Di sini kita membuat tabel lookup akar kuadrat untuk beberapa angka. |
| 877 | 421 | ||
| 878 | ```yuescript | 422 | ```yuescript |
| @@ -880,15 +424,6 @@ numbers = [1, 2, 3, 4] | |||
| 880 | sqrts = {i, math.sqrt i for i in *numbers} | 424 | sqrts = {i, math.sqrt i for i in *numbers} |
| 881 | ``` | 425 | ``` |
| 882 | 426 | ||
| 883 | <YueDisplay> | ||
| 884 | |||
| 885 | ```yue | ||
| 886 | numbers = [1, 2, 3, 4] | ||
| 887 | sqrts = {i, math.sqrt i for i in *numbers} | ||
| 888 | ``` | ||
| 889 | |||
| 890 | </YueDisplay> | ||
| 891 | |||
| 892 | Tuple key-value dalam komprehensi tabel juga bisa berasal dari satu ekspresi, yang berarti ekspresi tersebut harus mengembalikan dua nilai. Nilai pertama digunakan sebagai kunci dan nilai kedua digunakan sebagai nilai: | 427 | Tuple key-value dalam komprehensi tabel juga bisa berasal dari satu ekspresi, yang berarti ekspresi tersebut harus mengembalikan dua nilai. Nilai pertama digunakan sebagai kunci dan nilai kedua digunakan sebagai nilai: |
| 893 | 428 | ||
| 894 | Dalam contoh ini kita mengonversi array pasangan menjadi tabel di mana item pertama dalam pasangan menjadi kunci dan item kedua menjadi nilai. | 429 | Dalam contoh ini kita mengonversi array pasangan menjadi tabel di mana item pertama dalam pasangan menjadi kunci dan item kedua menjadi nilai. |
| @@ -898,15 +433,6 @@ tuples = [ ["hello", "world"], ["foo", "bar"]] | |||
| 898 | tbl = {unpack tuple for tuple in *tuples} | 433 | tbl = {unpack tuple for tuple in *tuples} |
| 899 | ``` | 434 | ``` |
| 900 | 435 | ||
| 901 | <YueDisplay> | ||
| 902 | |||
| 903 | ```yue | ||
| 904 | tuples = [ ["hello", "world"], ["foo", "bar"]] | ||
| 905 | tbl = {unpack tuple for tuple in *tuples} | ||
| 906 | ``` | ||
| 907 | |||
| 908 | </YueDisplay> | ||
| 909 | |||
| 910 | ## Slicing | 436 | ## Slicing |
| 911 | 437 | ||
| 912 | Sintaks khusus disediakan untuk membatasi item yang diiterasi saat menggunakan operator **\***. Ini setara dengan mengatur batas iterasi dan ukuran langkah pada loop for. | 438 | Sintaks khusus disediakan untuk membatasi item yang diiterasi saat menggunakan operator **\***. Ini setara dengan mengatur batas iterasi dan ukuran langkah pada loop for. |
| @@ -917,42 +443,18 @@ Di sini kita bisa menetapkan batas minimum dan maksimum, mengambil semua item de | |||
| 917 | slice = [item for item in *items[1, 5]] | 443 | slice = [item for item in *items[1, 5]] |
| 918 | ``` | 444 | ``` |
| 919 | 445 | ||
| 920 | <YueDisplay> | ||
| 921 | |||
| 922 | ```yue | ||
| 923 | slice = [item for item in *items[1, 5]] | ||
| 924 | ``` | ||
| 925 | |||
| 926 | </YueDisplay> | ||
| 927 | |||
| 928 | Salah satu argumen slice boleh dikosongkan untuk menggunakan default yang masuk akal. Pada contoh ini, jika indeks maksimum dikosongkan, defaultnya adalah panjang tabel. Ini akan mengambil semua item kecuali elemen pertama: | 446 | Salah satu argumen slice boleh dikosongkan untuk menggunakan default yang masuk akal. Pada contoh ini, jika indeks maksimum dikosongkan, defaultnya adalah panjang tabel. Ini akan mengambil semua item kecuali elemen pertama: |
| 929 | 447 | ||
| 930 | ```yuescript | 448 | ```yuescript |
| 931 | slice = [item for item in *items[2,]] | 449 | slice = [item for item in *items[2,]] |
| 932 | ``` | 450 | ``` |
| 933 | 451 | ||
| 934 | <YueDisplay> | ||
| 935 | |||
| 936 | ```yue | ||
| 937 | slice = [item for item in *items[2,]] | ||
| 938 | ``` | ||
| 939 | |||
| 940 | </YueDisplay> | ||
| 941 | |||
| 942 | Jika batas minimum dikosongkan, defaultnya adalah 1. Di sini kita hanya memberikan ukuran langkah dan membiarkan batas lainnya kosong. Ini akan mengambil semua item berindeks ganjil: (1, 3, 5, …) | 452 | Jika batas minimum dikosongkan, defaultnya adalah 1. Di sini kita hanya memberikan ukuran langkah dan membiarkan batas lainnya kosong. Ini akan mengambil semua item berindeks ganjil: (1, 3, 5, …) |
| 943 | 453 | ||
| 944 | ```yuescript | 454 | ```yuescript |
| 945 | slice = [item for item in *items[,,2]] | 455 | slice = [item for item in *items[,,2]] |
| 946 | ``` | 456 | ``` |
| 947 | 457 | ||
| 948 | <YueDisplay> | ||
| 949 | |||
| 950 | ```yue | ||
| 951 | slice = [item for item in *items[,,2]] | ||
| 952 | ``` | ||
| 953 | |||
| 954 | </YueDisplay> | ||
| 955 | |||
| 956 | Batas minimum dan maksimum bisa bernilai negatif, yang berarti batas dihitung dari akhir tabel. | 458 | Batas minimum dan maksimum bisa bernilai negatif, yang berarti batas dihitung dari akhir tabel. |
| 957 | 459 | ||
| 958 | ```yuescript | 460 | ```yuescript |
| @@ -960,29 +462,12 @@ Batas minimum dan maksimum bisa bernilai negatif, yang berarti batas dihitung da | |||
| 960 | slice = [item for item in *items[-4,-1]] | 462 | slice = [item for item in *items[-4,-1]] |
| 961 | ``` | 463 | ``` |
| 962 | 464 | ||
| 963 | <YueDisplay> | ||
| 964 | |||
| 965 | ```yue | ||
| 966 | -- ambil 4 item terakhir | ||
| 967 | slice = [item for item in *items[-4,-1]] | ||
| 968 | ``` | ||
| 969 | |||
| 970 | </YueDisplay> | ||
| 971 | |||
| 972 | Ukuran langkah juga bisa negatif, yang berarti item diambil dalam urutan terbalik. | 465 | Ukuran langkah juga bisa negatif, yang berarti item diambil dalam urutan terbalik. |
| 973 | 466 | ||
| 974 | ```yuescript | 467 | ```yuescript |
| 975 | reverse_slice = [item for item in *items[-1,1,-1]] | 468 | reverse_slice = [item for item in *items[-1,1,-1]] |
| 976 | ``` | 469 | ``` |
| 977 | 470 | ||
| 978 | <YueDisplay> | ||
| 979 | |||
| 980 | ```yue | ||
| 981 | reverse_slice = [item for item in *items[-1,1,-1]] | ||
| 982 | ``` | ||
| 983 | |||
| 984 | </YueDisplay> | ||
| 985 | |||
| 986 | ### Ekspresi Slicing | 471 | ### Ekspresi Slicing |
| 987 | 472 | ||
| 988 | Slicing juga bisa digunakan sebagai ekspresi. Ini berguna untuk mendapatkan sub-list dari sebuah tabel. | 473 | Slicing juga bisa digunakan sebagai ekspresi. Ini berguna untuk mendapatkan sub-list dari sebuah tabel. |
| @@ -995,18 +480,6 @@ sub_list = items[2, 4] | |||
| 995 | last_four_items = items[-4, -1] | 480 | last_four_items = items[-4, -1] |
| 996 | ``` | 481 | ``` |
| 997 | 482 | ||
| 998 | <YueDisplay> | ||
| 999 | |||
| 1000 | ```yue | ||
| 1001 | -- ambil item ke-2 dan ke-4 sebagai list baru | ||
| 1002 | sub_list = items[2, 4] | ||
| 1003 | |||
| 1004 | -- ambil 4 item terakhir | ||
| 1005 | last_four_items = items[-4, -1] | ||
| 1006 | ``` | ||
| 1007 | |||
| 1008 | </YueDisplay> | ||
| 1009 | |||
| 1010 | # Pemrograman Berorientasi Objek | 483 | # Pemrograman Berorientasi Objek |
| 1011 | 484 | ||
| 1012 | Dalam contoh-contoh ini, kode Lua yang dihasilkan mungkin tampak berat. Sebaiknya fokus dulu pada makna kode YueScript, lalu lihat kode Lua jika Anda ingin mengetahui detail implementasinya. | 485 | Dalam contoh-contoh ini, kode Lua yang dihasilkan mungkin tampak berat. Sebaiknya fokus dulu pada makna kode YueScript, lalu lihat kode Lua jika Anda ingin mengetahui detail implementasinya. |
| @@ -1025,22 +498,6 @@ class Inventory | |||
| 1025 | @items[name] = 1 | 498 | @items[name] = 1 |
| 1026 | ``` | 499 | ``` |
| 1027 | 500 | ||
| 1028 | <YueDisplay> | ||
| 1029 | |||
| 1030 | ```yue | ||
| 1031 | class Inventory | ||
| 1032 | new: => | ||
| 1033 | @items = {} | ||
| 1034 | |||
| 1035 | add_item: (name) => | ||
| 1036 | if @items[name] | ||
| 1037 | @items[name] += 1 | ||
| 1038 | else | ||
| 1039 | @items[name] = 1 | ||
| 1040 | ``` | ||
| 1041 | |||
| 1042 | </YueDisplay> | ||
| 1043 | |||
| 1044 | Kelas dideklarasikan dengan pernyataan `class` diikuti deklarasi mirip tabel di mana semua method dan properti dicantumkan. | 501 | Kelas dideklarasikan dengan pernyataan `class` diikuti deklarasi mirip tabel di mana semua method dan properti dicantumkan. |
| 1045 | 502 | ||
| 1046 | Properti `new` bersifat khusus karena akan menjadi konstruktor. | 503 | Properti `new` bersifat khusus karena akan menjadi konstruktor. |
| @@ -1057,16 +514,6 @@ inv\add_item "t-shirt" | |||
| 1057 | inv\add_item "pants" | 514 | inv\add_item "pants" |
| 1058 | ``` | 515 | ``` |
| 1059 | 516 | ||
| 1060 | <YueDisplay> | ||
| 1061 | |||
| 1062 | ```yue | ||
| 1063 | inv = Inventory! | ||
| 1064 | inv\add_item "t-shirt" | ||
| 1065 | inv\add_item "pants" | ||
| 1066 | ``` | ||
| 1067 | |||
| 1068 | </YueDisplay> | ||
| 1069 | |||
| 1070 | Karena instance kelas perlu dikirim ke method saat dipanggil, operator `\` digunakan. | 517 | Karena instance kelas perlu dikirim ke method saat dipanggil, operator `\` digunakan. |
| 1071 | 518 | ||
| 1072 | Semua properti kelas dibagikan di antara instance. Ini baik untuk fungsi, tetapi untuk jenis objek lain dapat menimbulkan hasil yang tidak diinginkan. | 519 | Semua properti kelas dibagikan di antara instance. Ini baik untuk fungsi, tetapi untuk jenis objek lain dapat menimbulkan hasil yang tidak diinginkan. |
| @@ -1089,26 +536,6 @@ b\give_item "shirt" | |||
| 1089 | print item for item in *a.clothes | 536 | print item for item in *a.clothes |
| 1090 | ``` | 537 | ``` |
| 1091 | 538 | ||
| 1092 | <YueDisplay> | ||
| 1093 | |||
| 1094 | ```yue | ||
| 1095 | class Person | ||
| 1096 | clothes: [] | ||
| 1097 | give_item: (name) => | ||
| 1098 | table.insert @clothes, name | ||
| 1099 | |||
| 1100 | a = Person! | ||
| 1101 | b = Person! | ||
| 1102 | |||
| 1103 | a\give_item "pants" | ||
| 1104 | b\give_item "shirt" | ||
| 1105 | |||
| 1106 | -- akan mencetak pants dan shirt | ||
| 1107 | print item for item in *a.clothes | ||
| 1108 | ``` | ||
| 1109 | |||
| 1110 | </YueDisplay> | ||
| 1111 | |||
| 1112 | Cara yang benar untuk menghindari masalah ini adalah membuat state yang dapat berubah di konstruktor: | 539 | Cara yang benar untuk menghindari masalah ini adalah membuat state yang dapat berubah di konstruktor: |
| 1113 | 540 | ||
| 1114 | ```yuescript | 541 | ```yuescript |
| @@ -1117,16 +544,6 @@ class Person | |||
| 1117 | @clothes = [] | 544 | @clothes = [] |
| 1118 | ``` | 545 | ``` |
| 1119 | 546 | ||
| 1120 | <YueDisplay> | ||
| 1121 | |||
| 1122 | ```yue | ||
| 1123 | class Person | ||
| 1124 | new: => | ||
| 1125 | @clothes = [] | ||
| 1126 | ``` | ||
| 1127 | |||
| 1128 | </YueDisplay> | ||
| 1129 | |||
| 1130 | ## Pewarisan | 547 | ## Pewarisan |
| 1131 | 548 | ||
| 1132 | Kata kunci `extends` dapat digunakan dalam deklarasi kelas untuk mewarisi properti dan method dari kelas lain. | 549 | Kata kunci `extends` dapat digunakan dalam deklarasi kelas untuk mewarisi properti dan method dari kelas lain. |
| @@ -1139,18 +556,6 @@ class BackPack extends Inventory | |||
| 1139 | super name | 556 | super name |
| 1140 | ``` | 557 | ``` |
| 1141 | 558 | ||
| 1142 | <YueDisplay> | ||
| 1143 | |||
| 1144 | ```yue | ||
| 1145 | class BackPack extends Inventory | ||
| 1146 | size: 10 | ||
| 1147 | add_item: (name) => | ||
| 1148 | if #@items > size then error "backpack is full" | ||
| 1149 | super name | ||
| 1150 | ``` | ||
| 1151 | |||
| 1152 | </YueDisplay> | ||
| 1153 | |||
| 1154 | Di sini kita memperluas kelas Inventory, dan membatasi jumlah item yang bisa dibawa. | 559 | Di sini kita memperluas kelas Inventory, dan membatasi jumlah item yang bisa dibawa. |
| 1155 | 560 | ||
| 1156 | Dalam contoh ini, kita tidak mendefinisikan konstruktor pada subclass, sehingga konstruktor kelas induk dipanggil ketika membuat instance baru. Jika kita mendefinisikan konstruktor, kita bisa menggunakan method `super` untuk memanggil konstruktor induk. | 561 | Dalam contoh ini, kita tidak mendefinisikan konstruktor pada subclass, sehingga konstruktor kelas induk dipanggil ketika membuat instance baru. Jika kita mendefinisikan konstruktor, kita bisa menggunakan method `super` untuk memanggil konstruktor induk. |
| @@ -1166,19 +571,6 @@ class Shelf | |||
| 1166 | class Cupboard extends Shelf | 571 | class Cupboard extends Shelf |
| 1167 | ``` | 572 | ``` |
| 1168 | 573 | ||
| 1169 | <YueDisplay> | ||
| 1170 | |||
| 1171 | ```yue | ||
| 1172 | class Shelf | ||
| 1173 | @__inherited: (child) => | ||
| 1174 | print @__name, "was inherited by", child.__name | ||
| 1175 | |||
| 1176 | -- akan mencetak: Shelf was inherited by Cupboard | ||
| 1177 | class Cupboard extends Shelf | ||
| 1178 | ``` | ||
| 1179 | |||
| 1180 | </YueDisplay> | ||
| 1181 | |||
| 1182 | ## Super | 574 | ## Super |
| 1183 | 575 | ||
| 1184 | **super** adalah kata kunci khusus yang dapat digunakan dengan dua cara: sebagai objek, atau dipanggil seperti fungsi. Ia hanya memiliki fungsi khusus ketika berada di dalam kelas. | 576 | **super** adalah kata kunci khusus yang dapat digunakan dengan dua cara: sebagai objek, atau dipanggil seperti fungsi. Ia hanya memiliki fungsi khusus ketika berada di dalam kelas. |
| @@ -1205,22 +597,6 @@ class MyClass extends ParentClass | |||
| 1205 | assert super == ParentClass | 597 | assert super == ParentClass |
| 1206 | ``` | 598 | ``` |
| 1207 | 599 | ||
| 1208 | <YueDisplay> | ||
| 1209 | |||
| 1210 | ```yue | ||
| 1211 | class MyClass extends ParentClass | ||
| 1212 | a_method: => | ||
| 1213 | -- berikut memiliki efek yang sama: | ||
| 1214 | super "hello", "world" | ||
| 1215 | super\a_method "hello", "world" | ||
| 1216 | super.a_method self, "hello", "world" | ||
| 1217 | |||
| 1218 | -- super sebagai nilai sama dengan kelas induk: | ||
| 1219 | assert super == ParentClass | ||
| 1220 | ``` | ||
| 1221 | |||
| 1222 | </YueDisplay> | ||
| 1223 | |||
| 1224 | **super** juga dapat digunakan di sisi kiri Function Stub. Perbedaan utamanya adalah, alih-alih fungsi hasil terikat pada nilai `super`, fungsi terikat pada `self`. | 600 | **super** juga dapat digunakan di sisi kiri Function Stub. Perbedaan utamanya adalah, alih-alih fungsi hasil terikat pada nilai `super`, fungsi terikat pada `self`. |
| 1225 | 601 | ||
| 1226 | ## Tipe | 602 | ## Tipe |
| @@ -1234,17 +610,6 @@ assert b.__class == BackPack | |||
| 1234 | print BackPack.size -- mencetak 10 | 610 | print BackPack.size -- mencetak 10 |
| 1235 | ``` | 611 | ``` |
| 1236 | 612 | ||
| 1237 | <YueDisplay> | ||
| 1238 | |||
| 1239 | ```yue | ||
| 1240 | b = BackPack! | ||
| 1241 | assert b.__class == BackPack | ||
| 1242 | |||
| 1243 | print BackPack.size -- mencetak 10 | ||
| 1244 | ``` | ||
| 1245 | |||
| 1246 | </YueDisplay> | ||
| 1247 | |||
| 1248 | ## Objek Kelas | 613 | ## Objek Kelas |
| 1249 | 614 | ||
| 1250 | Objek kelas adalah yang kita buat saat menggunakan pernyataan `class`. Objek kelas disimpan dalam variabel dengan nama yang sama dengan kelas. | 615 | Objek kelas adalah yang kita buat saat menggunakan pernyataan `class`. Objek kelas disimpan dalam variabel dengan nama yang sama dengan kelas. |
| @@ -1265,14 +630,6 @@ Nama kelas saat dideklarasikan disimpan sebagai string di field `__name` pada ob | |||
| 1265 | print BackPack.__name -- mencetak Backpack | 630 | print BackPack.__name -- mencetak Backpack |
| 1266 | ``` | 631 | ``` |
| 1267 | 632 | ||
| 1268 | <YueDisplay> | ||
| 1269 | |||
| 1270 | ```yue | ||
| 1271 | print BackPack.__name -- mencetak Backpack | ||
| 1272 | ``` | ||
| 1273 | |||
| 1274 | </YueDisplay> | ||
| 1275 | |||
| 1276 | Objek base disimpan di `__base`. Kita dapat memodifikasi tabel ini untuk menambahkan fungsionalitas ke instance yang sudah dibuat maupun yang akan dibuat. | 633 | Objek base disimpan di `__base`. Kita dapat memodifikasi tabel ini untuk menambahkan fungsionalitas ke instance yang sudah dibuat maupun yang akan dibuat. |
| 1277 | 634 | ||
| 1278 | Jika kelas memperluas kelas lain, objek kelas induk disimpan di `__parent`. | 635 | Jika kelas memperluas kelas lain, objek kelas induk disimpan di `__parent`. |
| @@ -1291,20 +648,6 @@ Things\some_func! | |||
| 1291 | assert Things().some_func == nil | 648 | assert Things().some_func == nil |
| 1292 | ``` | 649 | ``` |
| 1293 | 650 | ||
| 1294 | <YueDisplay> | ||
| 1295 | |||
| 1296 | ```yue | ||
| 1297 | class Things | ||
| 1298 | @some_func: => print "Hello from", @__name | ||
| 1299 | |||
| 1300 | Things\some_func! | ||
| 1301 | |||
| 1302 | -- variabel kelas tidak terlihat pada instance | ||
| 1303 | assert Things().some_func == nil | ||
| 1304 | ``` | ||
| 1305 | |||
| 1306 | </YueDisplay> | ||
| 1307 | |||
| 1308 | Dalam ekspresi, kita dapat menggunakan `@@` untuk mengakses nilai yang disimpan di `__class` milik `self`. Jadi, `@@hello` adalah singkatan dari `self.__class.hello`. | 651 | Dalam ekspresi, kita dapat menggunakan `@@` untuk mengakses nilai yang disimpan di `__class` milik `self`. Jadi, `@@hello` adalah singkatan dari `self.__class.hello`. |
| 1309 | 652 | ||
| 1310 | ```yuescript | 653 | ```yuescript |
| @@ -1320,37 +663,12 @@ Counter! | |||
| 1320 | print Counter.count -- mencetak 2 | 663 | print Counter.count -- mencetak 2 |
| 1321 | ``` | 664 | ``` |
| 1322 | 665 | ||
| 1323 | <YueDisplay> | ||
| 1324 | |||
| 1325 | ```yue | ||
| 1326 | class Counter | ||
| 1327 | @count: 0 | ||
| 1328 | |||
| 1329 | new: => | ||
| 1330 | @@count += 1 | ||
| 1331 | |||
| 1332 | Counter! | ||
| 1333 | Counter! | ||
| 1334 | |||
| 1335 | print Counter.count -- mencetak 2 | ||
| 1336 | ``` | ||
| 1337 | |||
| 1338 | </YueDisplay> | ||
| 1339 | |||
| 1340 | Semantik pemanggilan `@@` mirip dengan `@`. Memanggil nama `@@` akan meneruskan kelas sebagai argumen pertama menggunakan sintaks kolon Lua. | 666 | Semantik pemanggilan `@@` mirip dengan `@`. Memanggil nama `@@` akan meneruskan kelas sebagai argumen pertama menggunakan sintaks kolon Lua. |
| 1341 | 667 | ||
| 1342 | ```yuescript | 668 | ```yuescript |
| 1343 | @@hello 1,2,3,4 | 669 | @@hello 1,2,3,4 |
| 1344 | ``` | 670 | ``` |
| 1345 | 671 | ||
| 1346 | <YueDisplay> | ||
| 1347 | |||
| 1348 | ```yue | ||
| 1349 | @@hello 1,2,3,4 | ||
| 1350 | ``` | ||
| 1351 | |||
| 1352 | </YueDisplay> | ||
| 1353 | |||
| 1354 | ## Pernyataan Deklarasi Kelas | 672 | ## Pernyataan Deklarasi Kelas |
| 1355 | 673 | ||
| 1356 | Di dalam badan deklarasi kelas, kita bisa memiliki ekspresi normal selain pasangan key/value. Dalam konteks ini, `self` sama dengan objek kelas. | 674 | Di dalam badan deklarasi kelas, kita bisa memiliki ekspresi normal selain pasangan key/value. Dalam konteks ini, `self` sama dengan objek kelas. |
| @@ -1362,15 +680,6 @@ class Things | |||
| 1362 | @class_var = "hello world" | 680 | @class_var = "hello world" |
| 1363 | ``` | 681 | ``` |
| 1364 | 682 | ||
| 1365 | <YueDisplay> | ||
| 1366 | |||
| 1367 | ```yue | ||
| 1368 | class Things | ||
| 1369 | @class_var = "hello world" | ||
| 1370 | ``` | ||
| 1371 | |||
| 1372 | </YueDisplay> | ||
| 1373 | |||
| 1374 | Ekspresi ini dieksekusi setelah semua properti ditambahkan ke base. | 683 | Ekspresi ini dieksekusi setelah semua properti ditambahkan ke base. |
| 1375 | 684 | ||
| 1376 | Semua variabel yang dideklarasikan di badan kelas bersifat lokal terhadap properti kelas. Ini berguna untuk menempatkan nilai privat atau fungsi pembantu yang hanya dapat diakses oleh method kelas: | 685 | Semua variabel yang dideklarasikan di badan kelas bersifat lokal terhadap properti kelas. Ini berguna untuk menempatkan nilai privat atau fungsi pembantu yang hanya dapat diakses oleh method kelas: |
| @@ -1384,19 +693,6 @@ class MoreThings | |||
| 1384 | log "hello world: " .. secret | 693 | log "hello world: " .. secret |
| 1385 | ``` | 694 | ``` |
| 1386 | 695 | ||
| 1387 | <YueDisplay> | ||
| 1388 | |||
| 1389 | ```yue | ||
| 1390 | class MoreThings | ||
| 1391 | secret = 123 | ||
| 1392 | log = (msg) -> print "LOG:", msg | ||
| 1393 | |||
| 1394 | some_method: => | ||
| 1395 | log "hello world: " .. secret | ||
| 1396 | ``` | ||
| 1397 | |||
| 1398 | </YueDisplay> | ||
| 1399 | |||
| 1400 | ## Nilai @ dan @@ | 696 | ## Nilai @ dan @@ |
| 1401 | 697 | ||
| 1402 | Ketika `@` dan `@@` diprefiks di depan sebuah nama, masing-masing merepresentasikan nama tersebut yang diakses di `self` dan `self.__class`. | 698 | Ketika `@` dan `@@` diprefiks di depan sebuah nama, masing-masing merepresentasikan nama tersebut yang diakses di `self` dan `self.__class`. |
| @@ -1408,29 +704,12 @@ assert @ == self | |||
| 1408 | assert @@ == self.__class | 704 | assert @@ == self.__class |
| 1409 | ``` | 705 | ``` |
| 1410 | 706 | ||
| 1411 | <YueDisplay> | ||
| 1412 | |||
| 1413 | ```yue | ||
| 1414 | assert @ == self | ||
| 1415 | assert @@ == self.__class | ||
| 1416 | ``` | ||
| 1417 | |||
| 1418 | </YueDisplay> | ||
| 1419 | |||
| 1420 | Contohnya, cara cepat untuk membuat instance baru dari kelas yang sama dari method instance menggunakan `@@`: | 707 | Contohnya, cara cepat untuk membuat instance baru dari kelas yang sama dari method instance menggunakan `@@`: |
| 1421 | 708 | ||
| 1422 | ```yuescript | 709 | ```yuescript |
| 1423 | some_instance_method = (...) => @@ ... | 710 | some_instance_method = (...) => @@ ... |
| 1424 | ``` | 711 | ``` |
| 1425 | 712 | ||
| 1426 | <YueDisplay> | ||
| 1427 | |||
| 1428 | ```yue | ||
| 1429 | some_instance_method = (...) => @@ ... | ||
| 1430 | ``` | ||
| 1431 | |||
| 1432 | </YueDisplay> | ||
| 1433 | |||
| 1434 | ## Promosi Properti Konstruktor | 713 | ## Promosi Properti Konstruktor |
| 1435 | 714 | ||
| 1436 | Untuk mengurangi boilerplate saat mendefinisikan objek nilai sederhana, Anda dapat menulis kelas sederhana seperti: | 715 | Untuk mengurangi boilerplate saat mendefinisikan objek nilai sederhana, Anda dapat menulis kelas sederhana seperti: |
| @@ -1449,24 +728,6 @@ class Something | |||
| 1449 | @@baz = baz | 728 | @@baz = baz |
| 1450 | ``` | 729 | ``` |
| 1451 | 730 | ||
| 1452 | <YueDisplay> | ||
| 1453 | |||
| 1454 | ```yue | ||
| 1455 | class Something | ||
| 1456 | new: (@foo, @bar, @@biz, @@baz) => | ||
| 1457 | |||
| 1458 | -- Yang merupakan singkatan dari | ||
| 1459 | |||
| 1460 | class Something | ||
| 1461 | new: (foo, bar, biz, baz) => | ||
| 1462 | @foo = foo | ||
| 1463 | @bar = bar | ||
| 1464 | @@biz = biz | ||
| 1465 | @@baz = baz | ||
| 1466 | ``` | ||
| 1467 | |||
| 1468 | </YueDisplay> | ||
| 1469 | |||
| 1470 | Anda juga bisa menggunakan sintaks ini untuk fungsi umum guna menginisialisasi field objek. | 731 | Anda juga bisa menggunakan sintaks ini untuk fungsi umum guna menginisialisasi field objek. |
| 1471 | 732 | ||
| 1472 | ```yuescript | 733 | ```yuescript |
| @@ -1475,16 +736,6 @@ obj = new {}, 123, "abc" | |||
| 1475 | print obj | 736 | print obj |
| 1476 | ``` | 737 | ``` |
| 1477 | 738 | ||
| 1478 | <YueDisplay> | ||
| 1479 | |||
| 1480 | ```yue | ||
| 1481 | new = (@fieldA, @fieldB) => @ | ||
| 1482 | obj = new {}, 123, "abc" | ||
| 1483 | print obj | ||
| 1484 | ``` | ||
| 1485 | |||
| 1486 | </YueDisplay> | ||
| 1487 | |||
| 1488 | ## Ekspresi Kelas | 739 | ## Ekspresi Kelas |
| 1489 | 740 | ||
| 1490 | Sintaks kelas juga bisa digunakan sebagai ekspresi yang dapat di-assign ke variabel atau di-return secara eksplisit. | 741 | Sintaks kelas juga bisa digunakan sebagai ekspresi yang dapat di-assign ke variabel atau di-return secara eksplisit. |
| @@ -1495,16 +746,6 @@ x = class Bucket | |||
| 1495 | add_drop: => @drops += 1 | 746 | add_drop: => @drops += 1 |
| 1496 | ``` | 747 | ``` |
| 1497 | 748 | ||
| 1498 | <YueDisplay> | ||
| 1499 | |||
| 1500 | ```yue | ||
| 1501 | x = class Bucket | ||
| 1502 | drops: 0 | ||
| 1503 | add_drop: => @drops += 1 | ||
| 1504 | ``` | ||
| 1505 | |||
| 1506 | </YueDisplay> | ||
| 1507 | |||
| 1508 | ## Kelas Anonim | 749 | ## Kelas Anonim |
| 1509 | 750 | ||
| 1510 | Nama bisa dihilangkan saat mendeklarasikan kelas. Atribut `__name` akan bernilai nil, kecuali ekspresi kelas berada dalam assignment. Nama di sisi kiri assignment digunakan sebagai ganti nil. | 751 | Nama bisa dihilangkan saat mendeklarasikan kelas. Atribut `__name` akan bernilai nil, kecuali ekspresi kelas berada dalam assignment. Nama di sisi kiri assignment digunakan sebagai ganti nil. |
| @@ -1516,31 +757,12 @@ BigBucket = class extends Bucket | |||
| 1516 | assert Bucket.__name == "BigBucket" | 757 | assert Bucket.__name == "BigBucket" |
| 1517 | ``` | 758 | ``` |
| 1518 | 759 | ||
| 1519 | <YueDisplay> | ||
| 1520 | |||
| 1521 | ```yue | ||
| 1522 | BigBucket = class extends Bucket | ||
| 1523 | add_drop: => @drops += 10 | ||
| 1524 | |||
| 1525 | assert Bucket.__name == "BigBucket" | ||
| 1526 | ``` | ||
| 1527 | |||
| 1528 | </YueDisplay> | ||
| 1529 | |||
| 1530 | Anda bahkan bisa menghilangkan badan kelas, artinya Anda bisa menulis kelas anonim kosong seperti ini: | 760 | Anda bahkan bisa menghilangkan badan kelas, artinya Anda bisa menulis kelas anonim kosong seperti ini: |
| 1531 | 761 | ||
| 1532 | ```yuescript | 762 | ```yuescript |
| 1533 | x = class | 763 | x = class |
| 1534 | ``` | 764 | ``` |
| 1535 | 765 | ||
| 1536 | <YueDisplay> | ||
| 1537 | |||
| 1538 | ```yue | ||
| 1539 | x = class | ||
| 1540 | ``` | ||
| 1541 | |||
| 1542 | </YueDisplay> | ||
| 1543 | |||
| 1544 | ## Pencampuran Kelas | 766 | ## Pencampuran Kelas |
| 1545 | 767 | ||
| 1546 | Anda bisa melakukan mixing dengan kata kunci `using` untuk menyalin fungsi dari tabel biasa atau objek kelas yang sudah didefinisikan ke kelas baru Anda. Saat mixing dengan tabel biasa, Anda dapat mengganti fungsi pengindeksan kelas (metamethod `__index`) dengan implementasi kustom. Saat mixing dengan objek kelas yang sudah ada, metamethod objek kelas tidak akan disalin. | 768 | Anda bisa melakukan mixing dengan kata kunci `using` untuk menyalin fungsi dari tabel biasa atau objek kelas yang sudah didefinisikan ke kelas baru Anda. Saat mixing dengan tabel biasa, Anda dapat mengganti fungsi pengindeksan kelas (metamethod `__index`) dengan implementasi kustom. Saat mixing dengan objek kelas yang sudah ada, metamethod objek kelas tidak akan disalin. |
| @@ -1563,28 +785,6 @@ y\func! | |||
| 1563 | assert y.__class.__parent ~= X -- X bukan parent dari Y | 785 | assert y.__class.__parent ~= X -- X bukan parent dari Y |
| 1564 | ``` | 786 | ``` |
| 1565 | 787 | ||
| 1566 | <YueDisplay> | ||
| 1567 | |||
| 1568 | ```yue | ||
| 1569 | MyIndex = __index: var: 1 | ||
| 1570 | |||
| 1571 | class X using MyIndex | ||
| 1572 | func: => | ||
| 1573 | print 123 | ||
| 1574 | |||
| 1575 | x = X! | ||
| 1576 | print x.var | ||
| 1577 | |||
| 1578 | class Y using X | ||
| 1579 | |||
| 1580 | y = Y! | ||
| 1581 | y\func! | ||
| 1582 | |||
| 1583 | assert y.__class.__parent ~= X -- X bukan parent dari Y | ||
| 1584 | ``` | ||
| 1585 | |||
| 1586 | </YueDisplay> | ||
| 1587 | |||
| 1588 | # Pernyataan With | 788 | # Pernyataan With |
| 1589 | 789 | ||
| 1590 | Pola umum saat membuat objek adalah memanggil serangkaian fungsi dan mengatur serangkaian properti segera setelah objek dibuat. | 790 | Pola umum saat membuat objek adalah memanggil serangkaian fungsi dan mengatur serangkaian properti segera setelah objek dibuat. |
| @@ -1603,18 +803,6 @@ with Person! | |||
| 1603 | print .name | 803 | print .name |
| 1604 | ``` | 804 | ``` |
| 1605 | 805 | ||
| 1606 | <YueDisplay> | ||
| 1607 | |||
| 1608 | ```yue | ||
| 1609 | with Person! | ||
| 1610 | .name = "Oswald" | ||
| 1611 | \add_relative my_dad | ||
| 1612 | \save! | ||
| 1613 | print .name | ||
| 1614 | ``` | ||
| 1615 | |||
| 1616 | </YueDisplay> | ||
| 1617 | |||
| 1618 | Pernyataan `with` juga bisa digunakan sebagai ekspresi yang mengembalikan nilai yang diberi akses. | 806 | Pernyataan `with` juga bisa digunakan sebagai ekspresi yang mengembalikan nilai yang diberi akses. |
| 1619 | 807 | ||
| 1620 | ```yuescript | 808 | ```yuescript |
| @@ -1622,15 +810,6 @@ file = with File "favorite_foods.txt" | |||
| 1622 | \set_encoding "utf8" | 810 | \set_encoding "utf8" |
| 1623 | ``` | 811 | ``` |
| 1624 | 812 | ||
| 1625 | <YueDisplay> | ||
| 1626 | |||
| 1627 | ```yue | ||
| 1628 | file = with File "favorite_foods.txt" | ||
| 1629 | \set_encoding "utf8" | ||
| 1630 | ``` | ||
| 1631 | |||
| 1632 | </YueDisplay> | ||
| 1633 | |||
| 1634 | Ekspresi `with` mendukung `break` dengan satu nilai: | 813 | Ekspresi `with` mendukung `break` dengan satu nilai: |
| 1635 | 814 | ||
| 1636 | ```yuescript | 815 | ```yuescript |
| @@ -1638,15 +817,6 @@ result = with obj | |||
| 1638 | break .value | 817 | break .value |
| 1639 | ``` | 818 | ``` |
| 1640 | 819 | ||
| 1641 | <YueDisplay> | ||
| 1642 | |||
| 1643 | ```yue | ||
| 1644 | result = with obj | ||
| 1645 | break .value | ||
| 1646 | ``` | ||
| 1647 | |||
| 1648 | </YueDisplay> | ||
| 1649 | |||
| 1650 | Setelah `break value` digunakan di dalam `with`, ekspresi `with` tidak lagi mengembalikan objek targetnya, melainkan mengembalikan nilai dari `break`. | 820 | Setelah `break value` digunakan di dalam `with`, ekspresi `with` tidak lagi mengembalikan objek targetnya, melainkan mengembalikan nilai dari `break`. |
| 1651 | 821 | ||
| 1652 | ```yuescript | 822 | ```yuescript |
| @@ -1659,20 +829,6 @@ b = with obj | |||
| 1659 | -- b adalah .x, bukan obj | 829 | -- b adalah .x, bukan obj |
| 1660 | ``` | 830 | ``` |
| 1661 | 831 | ||
| 1662 | <YueDisplay> | ||
| 1663 | |||
| 1664 | ```yue | ||
| 1665 | a = with obj | ||
| 1666 | .x = 1 | ||
| 1667 | -- a adalah obj | ||
| 1668 | |||
| 1669 | b = with obj | ||
| 1670 | break .x | ||
| 1671 | -- b adalah .x, bukan obj | ||
| 1672 | ``` | ||
| 1673 | |||
| 1674 | </YueDisplay> | ||
| 1675 | |||
| 1676 | Berbeda dari `for` / `while` / `repeat` / `do`, `with` hanya mendukung satu nilai `break`. | 832 | Berbeda dari `for` / `while` / `repeat` / `do`, `with` hanya mendukung satu nilai `break`. |
| 1677 | 833 | ||
| 1678 | Atau… | 834 | Atau… |
| @@ -1686,19 +842,6 @@ create_person = (name, relatives) -> | |||
| 1686 | me = create_person "Leaf", [dad, mother, sister] | 842 | me = create_person "Leaf", [dad, mother, sister] |
| 1687 | ``` | 843 | ``` |
| 1688 | 844 | ||
| 1689 | <YueDisplay> | ||
| 1690 | |||
| 1691 | ```yue | ||
| 1692 | create_person = (name, relatives) -> | ||
| 1693 | with Person! | ||
| 1694 | .name = name | ||
| 1695 | \add_relative relative for relative in *relatives | ||
| 1696 | |||
| 1697 | me = create_person "Leaf", [dad, mother, sister] | ||
| 1698 | ``` | ||
| 1699 | |||
| 1700 | </YueDisplay> | ||
| 1701 | |||
| 1702 | Dalam penggunaan ini, `with` dapat dilihat sebagai bentuk khusus dari kombinator K. | 845 | Dalam penggunaan ini, `with` dapat dilihat sebagai bentuk khusus dari kombinator K. |
| 1703 | 846 | ||
| 1704 | Ekspresi pada pernyataan `with` juga bisa berupa assignment jika Anda ingin memberi nama pada ekspresi tersebut. | 847 | Ekspresi pada pernyataan `with` juga bisa berupa assignment jika Anda ingin memberi nama pada ekspresi tersebut. |
| @@ -1709,16 +852,6 @@ with str := "Hello" | |||
| 1709 | print "upper:", \upper! | 852 | print "upper:", \upper! |
| 1710 | ``` | 853 | ``` |
| 1711 | 854 | ||
| 1712 | <YueDisplay> | ||
| 1713 | |||
| 1714 | ```yue | ||
| 1715 | with str := "Hello" | ||
| 1716 | print "original:", str | ||
| 1717 | print "upper:", \upper! | ||
| 1718 | ``` | ||
| 1719 | |||
| 1720 | </YueDisplay> | ||
| 1721 | |||
| 1722 | Anda bisa mengakses kunci khusus dengan `[]` di dalam pernyataan `with`. | 855 | Anda bisa mengakses kunci khusus dengan `[]` di dalam pernyataan `with`. |
| 1723 | 856 | ||
| 1724 | ```yuescript | 857 | ```yuescript |
| @@ -1731,20 +864,6 @@ with tb | |||
| 1731 | [] = "abc" -- menambahkan ke "tb" | 864 | [] = "abc" -- menambahkan ke "tb" |
| 1732 | ``` | 865 | ``` |
| 1733 | 866 | ||
| 1734 | <YueDisplay> | ||
| 1735 | |||
| 1736 | ```yue | ||
| 1737 | with tb | ||
| 1738 | [1] = 1 | ||
| 1739 | print [2] | ||
| 1740 | with [abc] | ||
| 1741 | [3] = [2]\func! | ||
| 1742 | ["key-name"] = value | ||
| 1743 | [] = "abc" -- menambahkan ke "tb" | ||
| 1744 | ``` | ||
| 1745 | |||
| 1746 | </YueDisplay> | ||
| 1747 | |||
| 1748 | `with?` adalah versi yang ditingkatkan dari sintaks `with`, yang memperkenalkan pengecekan keberadaan untuk mengakses objek yang mungkin nil secara aman tanpa pemeriksaan null eksplisit. | 867 | `with?` adalah versi yang ditingkatkan dari sintaks `with`, yang memperkenalkan pengecekan keberadaan untuk mengakses objek yang mungkin nil secara aman tanpa pemeriksaan null eksplisit. |
| 1749 | 868 | ||
| 1750 | ```yuescript | 869 | ```yuescript |
| @@ -1752,15 +871,6 @@ with? obj | |||
| 1752 | print obj.name | 871 | print obj.name |
| 1753 | ``` | 872 | ``` |
| 1754 | 873 | ||
| 1755 | <YueDisplay> | ||
| 1756 | |||
| 1757 | ```yue | ||
| 1758 | with? obj | ||
| 1759 | print obj.name | ||
| 1760 | ``` | ||
| 1761 | |||
| 1762 | </YueDisplay> | ||
| 1763 | |||
| 1764 | # Penugasan | 874 | # Penugasan |
| 1765 | 875 | ||
| 1766 | Variabel bersifat bertipe dinamis dan secara default dideklarasikan sebagai local. Namun Anda dapat mengubah cakupan deklarasi dengan pernyataan **local** dan **global**. | 876 | Variabel bersifat bertipe dinamis dan secara default dideklarasikan sebagai local. Namun Anda dapat mengubah cakupan deklarasi dengan pernyataan **local** dan **global**. |
| @@ -1771,16 +881,6 @@ a, b, c = 1, 2, 3 | |||
| 1771 | hello = 123 -- menggunakan variabel yang sudah ada | 881 | hello = 123 -- menggunakan variabel yang sudah ada |
| 1772 | ``` | 882 | ``` |
| 1773 | 883 | ||
| 1774 | <YueDisplay> | ||
| 1775 | |||
| 1776 | ```yue | ||
| 1777 | hello = "world" | ||
| 1778 | a, b, c = 1, 2, 3 | ||
| 1779 | hello = 123 -- menggunakan variabel yang sudah ada | ||
| 1780 | ``` | ||
| 1781 | |||
| 1782 | </YueDisplay> | ||
| 1783 | |||
| 1784 | ## Pembaruan Nilai | 884 | ## Pembaruan Nilai |
| 1785 | 885 | ||
| 1786 | Anda dapat melakukan assignment pembaruan dengan banyak operator biner. | 886 | Anda dapat melakukan assignment pembaruan dengan banyak operator biner. |
| @@ -1796,21 +896,6 @@ s ..= "world" -- akan menambah local baru jika variabel local belum ada | |||
| 1796 | arg or= "default value" | 896 | arg or= "default value" |
| 1797 | ``` | 897 | ``` |
| 1798 | 898 | ||
| 1799 | <YueDisplay> | ||
| 1800 | |||
| 1801 | ```yue | ||
| 1802 | x = 1 | ||
| 1803 | x += 1 | ||
| 1804 | x -= 1 | ||
| 1805 | x *= 10 | ||
| 1806 | x /= 10 | ||
| 1807 | x %= 10 | ||
| 1808 | s ..= "world" -- akan menambah local baru jika variabel local belum ada | ||
| 1809 | arg or= "default value" | ||
| 1810 | ``` | ||
| 1811 | |||
| 1812 | </YueDisplay> | ||
| 1813 | |||
| 1814 | ## Assignment Berantai | 899 | ## Assignment Berantai |
| 1815 | 900 | ||
| 1816 | Anda bisa melakukan assignment berantai untuk menetapkan beberapa item ke nilai yang sama. | 901 | Anda bisa melakukan assignment berantai untuk menetapkan beberapa item ke nilai yang sama. |
| @@ -1820,15 +905,6 @@ a = b = c = d = e = 0 | |||
| 1820 | x = y = z = f! | 905 | x = y = z = f! |
| 1821 | ``` | 906 | ``` |
| 1822 | 907 | ||
| 1823 | <YueDisplay> | ||
| 1824 | |||
| 1825 | ```yue | ||
| 1826 | a = b = c = d = e = 0 | ||
| 1827 | x = y = z = f! | ||
| 1828 | ``` | ||
| 1829 | |||
| 1830 | </YueDisplay> | ||
| 1831 | |||
| 1832 | ## Local Eksplisit | 908 | ## Local Eksplisit |
| 1833 | 909 | ||
| 1834 | ```yuescript | 910 | ```yuescript |
| @@ -1848,27 +924,6 @@ do | |||
| 1848 | B = 2 | 924 | B = 2 |
| 1849 | ``` | 925 | ``` |
| 1850 | 926 | ||
| 1851 | <YueDisplay> | ||
| 1852 | |||
| 1853 | ```yue | ||
| 1854 | do | ||
| 1855 | local a = 1 | ||
| 1856 | local * | ||
| 1857 | print "deklarasikan semua variabel sebagai local di awal" | ||
| 1858 | x = -> 1 + y + z | ||
| 1859 | y, z = 2, 3 | ||
| 1860 | global instance = Item\new! | ||
| 1861 | |||
| 1862 | do | ||
| 1863 | local X = 1 | ||
| 1864 | local ^ | ||
| 1865 | print "hanya deklarasikan variabel huruf besar sebagai local di awal" | ||
| 1866 | a = 1 | ||
| 1867 | B = 2 | ||
| 1868 | ``` | ||
| 1869 | |||
| 1870 | </YueDisplay> | ||
| 1871 | |||
| 1872 | ## Global Eksplisit | 927 | ## Global Eksplisit |
| 1873 | 928 | ||
| 1874 | ```yuescript | 929 | ```yuescript |
| @@ -1888,27 +943,6 @@ do | |||
| 1888 | local Temp = "a local value" | 943 | local Temp = "a local value" |
| 1889 | ``` | 944 | ``` |
| 1890 | 945 | ||
| 1891 | <YueDisplay> | ||
| 1892 | |||
| 1893 | ```yue | ||
| 1894 | do | ||
| 1895 | global a = 1 | ||
| 1896 | global * | ||
| 1897 | print "deklarasikan semua variabel sebagai global" | ||
| 1898 | x = -> 1 + y + z | ||
| 1899 | y, z = 2, 3 | ||
| 1900 | |||
| 1901 | do | ||
| 1902 | global X = 1 | ||
| 1903 | global ^ | ||
| 1904 | print "hanya deklarasikan variabel huruf besar sebagai global" | ||
| 1905 | a = 1 | ||
| 1906 | B = 2 | ||
| 1907 | local Temp = "a local value" | ||
| 1908 | ``` | ||
| 1909 | |||
| 1910 | </YueDisplay> | ||
| 1911 | |||
| 1912 | # Penugasan Varargs | 946 | # Penugasan Varargs |
| 1913 | 947 | ||
| 1914 | Anda dapat meng-assign hasil yang dikembalikan dari sebuah fungsi ke simbol varargs `...`. Lalu akses isinya menggunakan cara Lua. | 948 | Anda dapat meng-assign hasil yang dikembalikan dari sebuah fungsi ke simbol varargs `...`. Lalu akses isinya menggunakan cara Lua. |
| @@ -1922,19 +956,6 @@ first = select 1, ... | |||
| 1922 | print ok, count, first | 956 | print ok, count, first |
| 1923 | ``` | 957 | ``` |
| 1924 | 958 | ||
| 1925 | <YueDisplay> | ||
| 1926 | |||
| 1927 | ```yue | ||
| 1928 | list = [1, 2, 3, 4, 5] | ||
| 1929 | fn = (ok) -> ok, table.unpack list | ||
| 1930 | ok, ... = fn true | ||
| 1931 | count = select '#', ... | ||
| 1932 | first = select 1, ... | ||
| 1933 | print ok, count, first | ||
| 1934 | ``` | ||
| 1935 | |||
| 1936 | </YueDisplay> | ||
| 1937 | |||
| 1938 | # Penugasan pada If | 959 | # Penugasan pada If |
| 1939 | 960 | ||
| 1940 | Blok `if` dan `elseif` dapat menerima assignment sebagai ganti ekspresi kondisional. Saat kondisi dievaluasi, assignment akan dilakukan dan nilai yang di-assign akan digunakan sebagai ekspresi kondisional. Variabel yang di-assign hanya berada dalam scope badan kondisional, artinya tidak pernah tersedia jika nilai tidak truthy. Dan Anda harus menggunakan "walrus operator" `:=` sebagai ganti `=` untuk melakukan assignment. | 961 | Blok `if` dan `elseif` dapat menerima assignment sebagai ganti ekspresi kondisional. Saat kondisi dievaluasi, assignment akan dilakukan dan nilai yang di-assign akan digunakan sebagai ekspresi kondisional. Variabel yang di-assign hanya berada dalam scope badan kondisional, artinya tidak pernah tersedia jika nilai tidak truthy. Dan Anda harus menggunakan "walrus operator" `:=` sebagai ganti `=` untuk melakukan assignment. |
| @@ -1944,15 +965,6 @@ if user := database.find_user "moon" | |||
| 1944 | print user.name | 965 | print user.name |
| 1945 | ``` | 966 | ``` |
| 1946 | 967 | ||
| 1947 | <YueDisplay> | ||
| 1948 | |||
| 1949 | ```yue | ||
| 1950 | if user := database.find_user "moon" | ||
| 1951 | print user.name | ||
| 1952 | ``` | ||
| 1953 | |||
| 1954 | </YueDisplay> | ||
| 1955 | |||
| 1956 | ```yuescript | 968 | ```yuescript |
| 1957 | if hello := os.getenv "hello" | 969 | if hello := os.getenv "hello" |
| 1958 | print "You have hello", hello | 970 | print "You have hello", hello |
| @@ -1962,19 +974,6 @@ else | |||
| 1962 | print "nothing :(" | 974 | print "nothing :(" |
| 1963 | ``` | 975 | ``` |
| 1964 | 976 | ||
| 1965 | <YueDisplay> | ||
| 1966 | |||
| 1967 | ```yue | ||
| 1968 | if hello := os.getenv "hello" | ||
| 1969 | print "You have hello", hello | ||
| 1970 | elseif world := os.getenv "world" | ||
| 1971 | print "you have world", world | ||
| 1972 | else | ||
| 1973 | print "nothing :(" | ||
| 1974 | ``` | ||
| 1975 | |||
| 1976 | </YueDisplay> | ||
| 1977 | |||
| 1978 | Assignment if dengan beberapa nilai return. Hanya nilai pertama yang dicek, nilai lainnya tetap berada dalam scope. | 977 | Assignment if dengan beberapa nilai return. Hanya nilai pertama yang dicek, nilai lainnya tetap berada dalam scope. |
| 1979 | 978 | ||
| 1980 | ```yuescript | 979 | ```yuescript |
| @@ -1983,16 +982,6 @@ if success, result := pcall -> "get result without problems" | |||
| 1983 | print "OK" | 982 | print "OK" |
| 1984 | ``` | 983 | ``` |
| 1985 | 984 | ||
| 1986 | <YueDisplay> | ||
| 1987 | |||
| 1988 | ```yue | ||
| 1989 | if success, result := pcall -> "get result without problems" | ||
| 1990 | print result -- variabel result berada dalam scope | ||
| 1991 | print "OK" | ||
| 1992 | ``` | ||
| 1993 | |||
| 1994 | </YueDisplay> | ||
| 1995 | |||
| 1996 | ## Assignment pada While | 985 | ## Assignment pada While |
| 1997 | 986 | ||
| 1998 | Anda juga bisa menggunakan assignment if di loop while untuk mendapatkan nilai sebagai kondisi loop. | 987 | Anda juga bisa menggunakan assignment if di loop while untuk mendapatkan nilai sebagai kondisi loop. |
| @@ -2003,16 +992,6 @@ while byte := stream\read_one! | |||
| 2003 | print byte | 992 | print byte |
| 2004 | ``` | 993 | ``` |
| 2005 | 994 | ||
| 2006 | <YueDisplay> | ||
| 2007 | |||
| 2008 | ```yue | ||
| 2009 | while byte := stream\read_one! | ||
| 2010 | -- lakukan sesuatu dengan byte | ||
| 2011 | print byte | ||
| 2012 | ``` | ||
| 2013 | |||
| 2014 | </YueDisplay> | ||
| 2015 | |||
| 2016 | # Penugasan Destrukturisasi | 995 | # Penugasan Destrukturisasi |
| 2017 | 996 | ||
| 2018 | Assignment destrukturisasi adalah cara cepat untuk mengekstrak nilai dari sebuah tabel berdasarkan nama kunci atau posisinya pada tabel berbasis array. | 997 | Assignment destrukturisasi adalah cara cepat untuk mengekstrak nilai dari sebuah tabel berdasarkan nama kunci atau posisinya pada tabel berbasis array. |
| @@ -2028,17 +1007,6 @@ thing = [1, 2] | |||
| 2028 | print a, b | 1007 | print a, b |
| 2029 | ``` | 1008 | ``` |
| 2030 | 1009 | ||
| 2031 | <YueDisplay> | ||
| 2032 | |||
| 2033 | ```yue | ||
| 2034 | thing = [1, 2] | ||
| 2035 | |||
| 2036 | [a, b] = thing | ||
| 2037 | print a, b | ||
| 2038 | ``` | ||
| 2039 | |||
| 2040 | </YueDisplay> | ||
| 2041 | |||
| 2042 | Di literal tabel destrukturisasi, kunci mewakili kunci yang dibaca dari sisi kanan, dan nilai mewakili nama yang akan menerima nilai tersebut. | 1010 | Di literal tabel destrukturisasi, kunci mewakili kunci yang dibaca dari sisi kanan, dan nilai mewakili nama yang akan menerima nilai tersebut. |
| 2043 | 1011 | ||
| 2044 | ```yuescript | 1012 | ```yuescript |
| @@ -2054,23 +1022,6 @@ print hello, the_day | |||
| 2054 | :day = obj -- OK untuk destrukturisasi sederhana tanpa kurung | 1022 | :day = obj -- OK untuk destrukturisasi sederhana tanpa kurung |
| 2055 | ``` | 1023 | ``` |
| 2056 | 1024 | ||
| 2057 | <YueDisplay> | ||
| 2058 | |||
| 2059 | ```yue | ||
| 2060 | obj = { | ||
| 2061 | hello: "world" | ||
| 2062 | day: "tuesday" | ||
| 2063 | length: 20 | ||
| 2064 | } | ||
| 2065 | |||
| 2066 | {hello: hello, day: the_day} = obj | ||
| 2067 | print hello, the_day | ||
| 2068 | |||
| 2069 | :day = obj -- OK untuk destrukturisasi sederhana tanpa kurung | ||
| 2070 | ``` | ||
| 2071 | |||
| 2072 | </YueDisplay> | ||
| 2073 | |||
| 2074 | Ini juga bekerja pada struktur data bertingkat: | 1025 | Ini juga bekerja pada struktur data bertingkat: |
| 2075 | 1026 | ||
| 2076 | ```yuescript | 1027 | ```yuescript |
| @@ -2086,23 +1037,6 @@ obj2 = { | |||
| 2086 | print first, second, color | 1037 | print first, second, color |
| 2087 | ``` | 1038 | ``` |
| 2088 | 1039 | ||
| 2089 | <YueDisplay> | ||
| 2090 | |||
| 2091 | ```yue | ||
| 2092 | obj2 = { | ||
| 2093 | numbers: [1, 2, 3, 4] | ||
| 2094 | properties: { | ||
| 2095 | color: "green" | ||
| 2096 | height: 13.5 | ||
| 2097 | } | ||
| 2098 | } | ||
| 2099 | |||
| 2100 | {numbers: [first, second], properties: {color: color}} = obj2 | ||
| 2101 | print first, second, color | ||
| 2102 | ``` | ||
| 2103 | |||
| 2104 | </YueDisplay> | ||
| 2105 | |||
| 2106 | Jika pernyataan destrukturisasi kompleks, Anda bisa memecahnya ke beberapa baris. Contoh yang sedikit lebih rumit: | 1040 | Jika pernyataan destrukturisasi kompleks, Anda bisa memecahnya ke beberapa baris. Contoh yang sedikit lebih rumit: |
| 2107 | 1041 | ||
| 2108 | ```yuescript | 1042 | ```yuescript |
| @@ -2114,75 +1048,30 @@ Jika pernyataan destrukturisasi kompleks, Anda bisa memecahnya ke beberapa baris | |||
| 2114 | } = obj2 | 1048 | } = obj2 |
| 2115 | ``` | 1049 | ``` |
| 2116 | 1050 | ||
| 2117 | <YueDisplay> | ||
| 2118 | |||
| 2119 | ```yue | ||
| 2120 | { | ||
| 2121 | numbers: [first, second] | ||
| 2122 | properties: { | ||
| 2123 | color: color | ||
| 2124 | } | ||
| 2125 | } = obj2 | ||
| 2126 | ``` | ||
| 2127 | |||
| 2128 | </YueDisplay> | ||
| 2129 | |||
| 2130 | Umumnya mengekstrak nilai dari tabel lalu menugaskannya ke variabel local dengan nama yang sama dengan kuncinya. Untuk menghindari pengulangan, kita bisa menggunakan operator prefiks **:**: | 1051 | Umumnya mengekstrak nilai dari tabel lalu menugaskannya ke variabel local dengan nama yang sama dengan kuncinya. Untuk menghindari pengulangan, kita bisa menggunakan operator prefiks **:**: |
| 2131 | 1052 | ||
| 2132 | ```yuescript | 1053 | ```yuescript |
| 2133 | {:concat, :insert} = table | 1054 | {:concat, :insert} = table |
| 2134 | ``` | 1055 | ``` |
| 2135 | 1056 | ||
| 2136 | <YueDisplay> | ||
| 2137 | |||
| 2138 | ```yue | ||
| 2139 | {:concat, :insert} = table | ||
| 2140 | ``` | ||
| 2141 | |||
| 2142 | </YueDisplay> | ||
| 2143 | |||
| 2144 | Ini secara efektif sama seperti import, tetapi kita dapat mengganti nama field yang ingin diekstrak dengan menggabungkan sintaks: | 1057 | Ini secara efektif sama seperti import, tetapi kita dapat mengganti nama field yang ingin diekstrak dengan menggabungkan sintaks: |
| 2145 | 1058 | ||
| 2146 | ```yuescript | 1059 | ```yuescript |
| 2147 | {:mix, :max, random: rand} = math | 1060 | {:mix, :max, random: rand} = math |
| 2148 | ``` | 1061 | ``` |
| 2149 | 1062 | ||
| 2150 | <YueDisplay> | ||
| 2151 | |||
| 2152 | ```yue | ||
| 2153 | {:mix, :max, random: rand} = math | ||
| 2154 | ``` | ||
| 2155 | |||
| 2156 | </YueDisplay> | ||
| 2157 | |||
| 2158 | Anda bisa menulis nilai default saat destrukturisasi seperti: | 1063 | Anda bisa menulis nilai default saat destrukturisasi seperti: |
| 2159 | 1064 | ||
| 2160 | ```yuescript | 1065 | ```yuescript |
| 2161 | {:name = "nameless", :job = "jobless"} = person | 1066 | {:name = "nameless", :job = "jobless"} = person |
| 2162 | ``` | 1067 | ``` |
| 2163 | 1068 | ||
| 2164 | <YueDisplay> | ||
| 2165 | |||
| 2166 | ```yue | ||
| 2167 | {:name = "nameless", :job = "jobless"} = person | ||
| 2168 | ``` | ||
| 2169 | |||
| 2170 | </YueDisplay> | ||
| 2171 | |||
| 2172 | Anda dapat menggunakan `_` sebagai placeholder saat destrukturisasi list: | 1069 | Anda dapat menggunakan `_` sebagai placeholder saat destrukturisasi list: |
| 2173 | 1070 | ||
| 2174 | ```yuescript | 1071 | ```yuescript |
| 2175 | [_, two, _, four] = items | 1072 | [_, two, _, four] = items |
| 2176 | ``` | 1073 | ``` |
| 2177 | 1074 | ||
| 2178 | <YueDisplay> | ||
| 2179 | |||
| 2180 | ```yue | ||
| 2181 | [_, two, _, four] = items | ||
| 2182 | ``` | ||
| 2183 | |||
| 2184 | </YueDisplay> | ||
| 2185 | |||
| 2186 | ## Destrukturisasi Rentang | 1075 | ## Destrukturisasi Rentang |
| 2187 | 1076 | ||
| 2188 | Anda dapat menggunakan operator spread `...` pada destrukturisasi list untuk menangkap rentang nilai. Ini berguna ketika Anda ingin mengekstrak elemen tertentu dari awal dan akhir list sambil mengumpulkan sisanya di tengah. | 1077 | Anda dapat menggunakan operator spread `...` pada destrukturisasi list untuk menangkap rentang nilai. Ini berguna ketika Anda ingin mengekstrak elemen tertentu dari awal dan akhir list sambil mengumpulkan sisanya di tengah. |
| @@ -2195,18 +1084,6 @@ print bulk -- prints: {"second", "third", "fourth"} | |||
| 2195 | print last -- prints: last | 1084 | print last -- prints: last |
| 2196 | ``` | 1085 | ``` |
| 2197 | 1086 | ||
| 2198 | <YueDisplay> | ||
| 2199 | |||
| 2200 | ```yue | ||
| 2201 | orders = ["first", "second", "third", "fourth", "last"] | ||
| 2202 | [first, ...bulk, last] = orders | ||
| 2203 | print first -- prints: first | ||
| 2204 | print bulk -- prints: {"second", "third", "fourth"} | ||
| 2205 | print last -- prints: last | ||
| 2206 | ``` | ||
| 2207 | |||
| 2208 | </YueDisplay> | ||
| 2209 | |||
| 2210 | Operator spread dapat digunakan pada posisi berbeda untuk menangkap rentang yang berbeda, dan Anda bisa memakai `_` sebagai placeholder untuk nilai yang tidak ingin ditangkap: | 1087 | Operator spread dapat digunakan pada posisi berbeda untuk menangkap rentang yang berbeda, dan Anda bisa memakai `_` sebagai placeholder untuk nilai yang tidak ingin ditangkap: |
| 2211 | 1088 | ||
| 2212 | ```yuescript | 1089 | ```yuescript |
| @@ -2220,21 +1097,6 @@ Operator spread dapat digunakan pada posisi berbeda untuk menangkap rentang yang | |||
| 2220 | [first, ..._, last] = orders | 1097 | [first, ..._, last] = orders |
| 2221 | ``` | 1098 | ``` |
| 2222 | 1099 | ||
| 2223 | <YueDisplay> | ||
| 2224 | |||
| 2225 | ```yue | ||
| 2226 | -- Tangkap semuanya setelah elemen pertama | ||
| 2227 | [first, ...rest] = orders | ||
| 2228 | |||
| 2229 | -- Tangkap semuanya sebelum elemen terakhir | ||
| 2230 | [...start, last] = orders | ||
| 2231 | |||
| 2232 | -- Tangkap semuanya kecuali elemen tengah | ||
| 2233 | [first, ..._, last] = orders | ||
| 2234 | ``` | ||
| 2235 | |||
| 2236 | </YueDisplay> | ||
| 2237 | |||
| 2238 | ## Destrukturisasi di Tempat Lain | 1100 | ## Destrukturisasi di Tempat Lain |
| 2239 | 1101 | ||
| 2240 | Destrukturisasi juga dapat muncul di tempat-tempat di mana assignment terjadi secara implisit. Contohnya adalah perulangan for: | 1102 | Destrukturisasi juga dapat muncul di tempat-tempat di mana assignment terjadi secara implisit. Contohnya adalah perulangan for: |
| @@ -2249,20 +1111,6 @@ for [left, right] in *tuples | |||
| 2249 | print left, right | 1111 | print left, right |
| 2250 | ``` | 1112 | ``` |
| 2251 | 1113 | ||
| 2252 | <YueDisplay> | ||
| 2253 | |||
| 2254 | ```yue | ||
| 2255 | tuples = [ | ||
| 2256 | ["hello", "world"] | ||
| 2257 | ["egg", "head"] | ||
| 2258 | ] | ||
| 2259 | |||
| 2260 | for [left, right] in *tuples | ||
| 2261 | print left, right | ||
| 2262 | ``` | ||
| 2263 | |||
| 2264 | </YueDisplay> | ||
| 2265 | |||
| 2266 | Kita tahu setiap elemen pada tabel array adalah tuple dua item, sehingga kita dapat membongkarnya langsung di klausa nama pada pernyataan for menggunakan destrukturisasi. | 1114 | Kita tahu setiap elemen pada tabel array adalah tuple dua item, sehingga kita dapat membongkarnya langsung di klausa nama pada pernyataan for menggunakan destrukturisasi. |
| 2267 | 1115 | ||
| 2268 | # Klausa Using; Mengendalikan Penugasan Destruktif | 1116 | # Klausa Using; Mengendalikan Penugasan Destruktif |
| @@ -2285,26 +1133,6 @@ my_func! | |||
| 2285 | print i -- akan mencetak 0 | 1133 | print i -- akan mencetak 0 |
| 2286 | ``` | 1134 | ``` |
| 2287 | 1135 | ||
| 2288 | <YueDisplay> | ||
| 2289 | |||
| 2290 | ```yue | ||
| 2291 | i = 100 | ||
| 2292 | |||
| 2293 | -- banyak baris kode... | ||
| 2294 | |||
| 2295 | my_func = -> | ||
| 2296 | i = 10 | ||
| 2297 | while i > 0 | ||
| 2298 | print i | ||
| 2299 | i -= 1 | ||
| 2300 | |||
| 2301 | my_func! | ||
| 2302 | |||
| 2303 | print i -- akan mencetak 0 | ||
| 2304 | ``` | ||
| 2305 | |||
| 2306 | </YueDisplay> | ||
| 2307 | |||
| 2308 | Di `my_func`, kita tanpa sengaja menimpa nilai `i`. Dalam contoh ini halnya cukup jelas, tetapi bayangkan kode besar atau basis kode asing di mana tidak jelas nama apa saja yang sudah dideklarasikan. | 1136 | Di `my_func`, kita tanpa sengaja menimpa nilai `i`. Dalam contoh ini halnya cukup jelas, tetapi bayangkan kode besar atau basis kode asing di mana tidak jelas nama apa saja yang sudah dideklarasikan. |
| 2309 | 1137 | ||
| 2310 | Akan sangat membantu jika kita dapat menyatakan variabel mana dari scope luar yang memang ingin kita ubah, agar mencegah mengubah yang lain secara tidak sengaja. | 1138 | Akan sangat membantu jika kita dapat menyatakan variabel mana dari scope luar yang memang ingin kita ubah, agar mencegah mengubah yang lain secara tidak sengaja. |
| @@ -2321,20 +1149,6 @@ my_func! | |||
| 2321 | print i -- mencetak 100, i tidak terpengaruh | 1149 | print i -- mencetak 100, i tidak terpengaruh |
| 2322 | ``` | 1150 | ``` |
| 2323 | 1151 | ||
| 2324 | <YueDisplay> | ||
| 2325 | |||
| 2326 | ```yue | ||
| 2327 | i = 100 | ||
| 2328 | |||
| 2329 | my_func = (using nil) -> | ||
| 2330 | i = "hello" -- variabel local baru dibuat di sini | ||
| 2331 | |||
| 2332 | my_func! | ||
| 2333 | print i -- mencetak 100, i tidak terpengaruh | ||
| 2334 | ``` | ||
| 2335 | |||
| 2336 | </YueDisplay> | ||
| 2337 | |||
| 2338 | Beberapa nama dapat dipisahkan dengan koma. Nilai closure tetap bisa diakses, hanya saja tidak dapat dimodifikasi: | 1152 | Beberapa nama dapat dipisahkan dengan koma. Nilai closure tetap bisa diakses, hanya saja tidak dapat dimodifikasi: |
| 2339 | 1153 | ||
| 2340 | ```yuescript | 1154 | ```yuescript |
| @@ -2350,23 +1164,6 @@ my_func(22) | |||
| 2350 | print i, k -- ini telah diperbarui | 1164 | print i, k -- ini telah diperbarui |
| 2351 | ``` | 1165 | ``` |
| 2352 | 1166 | ||
| 2353 | <YueDisplay> | ||
| 2354 | |||
| 2355 | ```yue | ||
| 2356 | tmp = 1213 | ||
| 2357 | i, k = 100, 50 | ||
| 2358 | |||
| 2359 | my_func = (add using k, i) -> | ||
| 2360 | tmp = tmp + add -- tmp local baru dibuat | ||
| 2361 | i += tmp | ||
| 2362 | k += tmp | ||
| 2363 | |||
| 2364 | my_func(22) | ||
| 2365 | print i, k -- ini telah diperbarui | ||
| 2366 | ``` | ||
| 2367 | |||
| 2368 | </YueDisplay> | ||
| 2369 | |||
| 2370 | # Penggunaan | 1167 | # Penggunaan |
| 2371 | 1168 | ||
| 2372 | ## Modul Lua | 1169 | ## Modul Lua |
| @@ -2535,55 +1332,6 @@ with apple | |||
| 2535 | export 🌛 = "Skrip Bulan" | 1332 | export 🌛 = "Skrip Bulan" |
| 2536 | ``` | 1333 | ``` |
| 2537 | 1334 | ||
| 2538 | <YueDisplay> | ||
| 2539 | |||
| 2540 | ```yue | ||
| 2541 | -- import syntax | ||
| 2542 | import p, to_lua from "yue" | ||
| 2543 | |||
| 2544 | -- object literals | ||
| 2545 | inventory = | ||
| 2546 | equipment: | ||
| 2547 | - "sword" | ||
| 2548 | - "shield" | ||
| 2549 | items: | ||
| 2550 | - name: "potion" | ||
| 2551 | count: 10 | ||
| 2552 | - name: "bread" | ||
| 2553 | count: 3 | ||
| 2554 | |||
| 2555 | -- list comprehension | ||
| 2556 | map = (arr, action) -> | ||
| 2557 | [action item for item in *arr] | ||
| 2558 | |||
| 2559 | filter = (arr, cond) -> | ||
| 2560 | [item for item in *arr when cond item] | ||
| 2561 | |||
| 2562 | reduce = (arr, init, action): init -> | ||
| 2563 | init = action init, item for item in *arr | ||
| 2564 | |||
| 2565 | -- pipe operator | ||
| 2566 | [1, 2, 3] | ||
| 2567 | |> map (x) -> x * 2 | ||
| 2568 | |> filter (x) -> x > 4 | ||
| 2569 | |> reduce 0, (a, b) -> a + b | ||
| 2570 | |||
| 2571 | |||
| 2572 | -- metatable manipulation | ||
| 2573 | apple = | ||
| 2574 | size: 15 | ||
| 2575 | <index>: | ||
| 2576 | color: 0x00ffff | ||
| 2577 | |||
| 2578 | with apple | ||
| 2579 | p .size, .color, .<index> if .<>? | ||
| 2580 | |||
| 2581 | -- js-like export syntax | ||
| 2582 | export 🌛 = "Skrip Bulan" | ||
| 2583 | ``` | ||
| 2584 | |||
| 2585 | </YueDisplay> | ||
| 2586 | |||
| 2587 | ## Tentang Dora SSR | 1335 | ## Tentang Dora SSR |
| 2588 | 1336 | ||
| 2589 | YueScript dikembangkan dan dipelihara bersama mesin game open-source [Dora SSR](https://github.com/Dora-SSR/Dora-SSR). YueScript telah digunakan untuk membuat alat mesin, demo game, dan prototipe, membuktikan kemampuannya dalam skenario dunia nyata sekaligus meningkatkan pengalaman pengembangan Dora SSR. | 1337 | YueScript dikembangkan dan dipelihara bersama mesin game open-source [Dora SSR](https://github.com/Dora-SSR/Dora-SSR). YueScript telah digunakan untuk membuat alat mesin, demo game, dan prototipe, membuktikan kemampuannya dalam skenario dunia nyata sekaligus meningkatkan pengalaman pengembangan Dora SSR. |
| @@ -2642,18 +1390,6 @@ else | |||
| 2642 | print "Tidak ada koin" | 1390 | print "Tidak ada koin" |
| 2643 | ``` | 1391 | ``` |
| 2644 | 1392 | ||
| 2645 | <YueDisplay> | ||
| 2646 | |||
| 2647 | ```yue | ||
| 2648 | have_coins = false | ||
| 2649 | if have_coins | ||
| 2650 | print "Dapat koin" | ||
| 2651 | else | ||
| 2652 | print "Tidak ada koin" | ||
| 2653 | ``` | ||
| 2654 | |||
| 2655 | </YueDisplay> | ||
| 2656 | |||
| 2657 | Sintaks pendek untuk pernyataan tunggal juga bisa digunakan: | 1393 | Sintaks pendek untuk pernyataan tunggal juga bisa digunakan: |
| 2658 | 1394 | ||
| 2659 | ```yuescript | 1395 | ```yuescript |
| @@ -2661,15 +1397,6 @@ have_coins = false | |||
| 2661 | if have_coins then print "Dapat koin" else print "Tidak ada koin" | 1397 | if have_coins then print "Dapat koin" else print "Tidak ada koin" |
| 2662 | ``` | 1398 | ``` |
| 2663 | 1399 | ||
| 2664 | <YueDisplay> | ||
| 2665 | |||
| 2666 | ```yue | ||
| 2667 | have_coins = false | ||
| 2668 | if have_coins then print "Dapat koin" else print "Tidak ada koin" | ||
| 2669 | ``` | ||
| 2670 | |||
| 2671 | </YueDisplay> | ||
| 2672 | |||
| 2673 | Karena pernyataan if dapat digunakan sebagai ekspresi, ini juga bisa ditulis sebagai: | 1400 | Karena pernyataan if dapat digunakan sebagai ekspresi, ini juga bisa ditulis sebagai: |
| 2674 | 1401 | ||
| 2675 | ```yuescript | 1402 | ```yuescript |
| @@ -2677,15 +1404,6 @@ have_coins = false | |||
| 2677 | print if have_coins then "Dapat koin" else "Tidak ada koin" | 1404 | print if have_coins then "Dapat koin" else "Tidak ada koin" |
| 2678 | ``` | 1405 | ``` |
| 2679 | 1406 | ||
| 2680 | <YueDisplay> | ||
| 2681 | |||
| 2682 | ```yue | ||
| 2683 | have_coins = false | ||
| 2684 | print if have_coins then "Dapat koin" else "Tidak ada koin" | ||
| 2685 | ``` | ||
| 2686 | |||
| 2687 | </YueDisplay> | ||
| 2688 | |||
| 2689 | Kondisional juga bisa digunakan di pernyataan return dan assignment: | 1407 | Kondisional juga bisa digunakan di pernyataan return dan assignment: |
| 2690 | 1408 | ||
| 2691 | ```yuescript | 1409 | ```yuescript |
| @@ -2703,25 +1421,6 @@ else | |||
| 2703 | print message -- prints: Saya sangat tinggi | 1421 | print message -- prints: Saya sangat tinggi |
| 2704 | ``` | 1422 | ``` |
| 2705 | 1423 | ||
| 2706 | <YueDisplay> | ||
| 2707 | |||
| 2708 | ```yue | ||
| 2709 | is_tall = (name) -> | ||
| 2710 | if name == "Rob" | ||
| 2711 | true | ||
| 2712 | else | ||
| 2713 | false | ||
| 2714 | |||
| 2715 | message = if is_tall "Rob" | ||
| 2716 | "Saya sangat tinggi" | ||
| 2717 | else | ||
| 2718 | "Saya tidak terlalu tinggi" | ||
| 2719 | |||
| 2720 | print message -- prints: Saya sangat tinggi | ||
| 2721 | ``` | ||
| 2722 | |||
| 2723 | </YueDisplay> | ||
| 2724 | |||
| 2725 | Kebalikan dari if adalah unless: | 1424 | Kebalikan dari if adalah unless: |
| 2726 | 1425 | ||
| 2727 | ```yuescript | 1426 | ```yuescript |
| @@ -2729,27 +1428,10 @@ unless os.date("%A") == "Monday" | |||
| 2729 | print "hari ini bukan Senin!" | 1428 | print "hari ini bukan Senin!" |
| 2730 | ``` | 1429 | ``` |
| 2731 | 1430 | ||
| 2732 | <YueDisplay> | ||
| 2733 | |||
| 2734 | ```yue | ||
| 2735 | unless os.date("%A") == "Monday" | ||
| 2736 | print "hari ini bukan Senin!" | ||
| 2737 | ``` | ||
| 2738 | |||
| 2739 | </YueDisplay> | ||
| 2740 | |||
| 2741 | ```yuescript | 1431 | ```yuescript |
| 2742 | print "Kamu beruntung!" unless math.random! > 0.1 | 1432 | print "Kamu beruntung!" unless math.random! > 0.1 |
| 2743 | ``` | 1433 | ``` |
| 2744 | 1434 | ||
| 2745 | <YueDisplay> | ||
| 2746 | |||
| 2747 | ```yue | ||
| 2748 | print "Kamu beruntung!" unless math.random! > 0.1 | ||
| 2749 | ``` | ||
| 2750 | |||
| 2751 | </YueDisplay> | ||
| 2752 | |||
| 2753 | ## Ekspresi In | 1435 | ## Ekspresi In |
| 2754 | 1436 | ||
| 2755 | Anda dapat menulis kode pengecekan rentang dengan `ekspresi in`. | 1437 | Anda dapat menulis kode pengecekan rentang dengan `ekspresi in`. |
| @@ -2764,20 +1446,6 @@ if a in list | |||
| 2764 | print "memeriksa apakah `a` ada di dalam daftar" | 1446 | print "memeriksa apakah `a` ada di dalam daftar" |
| 2765 | ``` | 1447 | ``` |
| 2766 | 1448 | ||
| 2767 | <YueDisplay> | ||
| 2768 | |||
| 2769 | ```yue | ||
| 2770 | a = 5 | ||
| 2771 | |||
| 2772 | if a in [1, 3, 5, 7] | ||
| 2773 | print "memeriksa kesamaan dengan nilai-nilai diskrit" | ||
| 2774 | |||
| 2775 | if a in list | ||
| 2776 | print "memeriksa apakah `a` ada di dalam daftar" | ||
| 2777 | ``` | ||
| 2778 | |||
| 2779 | </YueDisplay> | ||
| 2780 | |||
| 2781 | Operator `in` juga dapat digunakan dengan tabel dan mendukung varian `not in` untuk negasi: | 1449 | Operator `in` juga dapat digunakan dengan tabel dan mendukung varian `not in` untuk negasi: |
| 2782 | 1450 | ||
| 2783 | ```yuescript | 1451 | ```yuescript |
| @@ -2791,21 +1459,6 @@ not_exist = item not in list | |||
| 2791 | check = -> value not in table | 1459 | check = -> value not in table |
| 2792 | ``` | 1460 | ``` |
| 2793 | 1461 | ||
| 2794 | <YueDisplay> | ||
| 2795 | |||
| 2796 | ```yue | ||
| 2797 | has = "foo" in {"bar", "foo"} | ||
| 2798 | |||
| 2799 | if a in {1, 2, 3} | ||
| 2800 | print "a ada di dalam tabel" | ||
| 2801 | |||
| 2802 | not_exist = item not in list | ||
| 2803 | |||
| 2804 | check = -> value not in table | ||
| 2805 | ``` | ||
| 2806 | |||
| 2807 | </YueDisplay> | ||
| 2808 | |||
| 2809 | Daftar atau tabel dengan satu elemen memeriksa kesamaan dengan elemen tersebut: | 1462 | Daftar atau tabel dengan satu elemen memeriksa kesamaan dengan elemen tersebut: |
| 2810 | 1463 | ||
| 2811 | ```yuescript | 1464 | ```yuescript |
| @@ -2820,22 +1473,6 @@ with tb | |||
| 2820 | c = a in [1] | 1473 | c = a in [1] |
| 2821 | ``` | 1474 | ``` |
| 2822 | 1475 | ||
| 2823 | <YueDisplay> | ||
| 2824 | |||
| 2825 | ```yue | ||
| 2826 | -- [1,] memeriksa apakah nilai == 1 | ||
| 2827 | c = a in [1,] | ||
| 2828 | |||
| 2829 | -- {1} juga memeriksa apakah nilai == 1 | ||
| 2830 | c = a in {1} | ||
| 2831 | |||
| 2832 | -- Tanpa koma, [1] adalah akses indeks (tb[1]) | ||
| 2833 | with tb | ||
| 2834 | c = a in [1] | ||
| 2835 | ``` | ||
| 2836 | |||
| 2837 | </YueDisplay> | ||
| 2838 | |||
| 2839 | # Perulangan For | 1476 | # Perulangan For |
| 2840 | 1477 | ||
| 2841 | Ada dua bentuk perulangan for, seperti di Lua. Satu numerik dan satu generik: | 1478 | Ada dua bentuk perulangan for, seperti di Lua. Satu numerik dan satu generik: |
| @@ -2851,21 +1488,6 @@ for key, value in pairs object | |||
| 2851 | print key, value | 1488 | print key, value |
| 2852 | ``` | 1489 | ``` |
| 2853 | 1490 | ||
| 2854 | <YueDisplay> | ||
| 2855 | |||
| 2856 | ```yue | ||
| 2857 | for i = 10, 20 | ||
| 2858 | print i | ||
| 2859 | |||
| 2860 | for k = 1, 15, 2 -- an optional step provided | ||
| 2861 | print k | ||
| 2862 | |||
| 2863 | for key, value in pairs object | ||
| 2864 | print key, value | ||
| 2865 | ``` | ||
| 2866 | |||
| 2867 | </YueDisplay> | ||
| 2868 | |||
| 2869 | Operator slicing dan **\*** dapat digunakan, seperti pada comprehension: | 1491 | Operator slicing dan **\*** dapat digunakan, seperti pada comprehension: |
| 2870 | 1492 | ||
| 2871 | ```yuescript | 1493 | ```yuescript |
| @@ -2873,15 +1495,6 @@ for item in *items[2, 4] | |||
| 2873 | print item | 1495 | print item |
| 2874 | ``` | 1496 | ``` |
| 2875 | 1497 | ||
| 2876 | <YueDisplay> | ||
| 2877 | |||
| 2878 | ```yue | ||
| 2879 | for item in *items[2, 4] | ||
| 2880 | print item | ||
| 2881 | ``` | ||
| 2882 | |||
| 2883 | </YueDisplay> | ||
| 2884 | |||
| 2885 | Sintaks yang lebih singkat juga tersedia untuk semua variasi ketika badan hanya satu baris: | 1498 | Sintaks yang lebih singkat juga tersedia untuk semua variasi ketika badan hanya satu baris: |
| 2886 | 1499 | ||
| 2887 | ```yuescript | 1500 | ```yuescript |
| @@ -2890,16 +1503,6 @@ for item in *items do print item | |||
| 2890 | for j = 1, 10, 3 do print j | 1503 | for j = 1, 10, 3 do print j |
| 2891 | ``` | 1504 | ``` |
| 2892 | 1505 | ||
| 2893 | <YueDisplay> | ||
| 2894 | |||
| 2895 | ```yue | ||
| 2896 | for item in *items do print item | ||
| 2897 | |||
| 2898 | for j = 1, 10, 3 do print j | ||
| 2899 | ``` | ||
| 2900 | |||
| 2901 | </YueDisplay> | ||
| 2902 | |||
| 2903 | Perulangan for juga bisa digunakan sebagai ekspresi. Pernyataan terakhir di badan for dipaksa menjadi ekspresi dan ditambahkan ke tabel array yang terakumulasi. | 1506 | Perulangan for juga bisa digunakan sebagai ekspresi. Pernyataan terakhir di badan for dipaksa menjadi ekspresi dan ditambahkan ke tabel array yang terakumulasi. |
| 2904 | 1507 | ||
| 2905 | Menggandakan setiap bilangan genap: | 1508 | Menggandakan setiap bilangan genap: |
| @@ -2912,18 +1515,6 @@ doubled_evens = for i = 1, 20 | |||
| 2912 | i | 1515 | i |
| 2913 | ``` | 1516 | ``` |
| 2914 | 1517 | ||
| 2915 | <YueDisplay> | ||
| 2916 | |||
| 2917 | ```yue | ||
| 2918 | doubled_evens = for i = 1, 20 | ||
| 2919 | if i % 2 == 0 | ||
| 2920 | i * 2 | ||
| 2921 | else | ||
| 2922 | i | ||
| 2923 | ``` | ||
| 2924 | |||
| 2925 | </YueDisplay> | ||
| 2926 | |||
| 2927 | Selain itu, loop for mendukung break dengan nilai kembalian, sehingga loop itu sendiri bisa dipakai sebagai ekspresi yang keluar lebih awal dengan hasil bermakna. Ekspresi `for` mendukung `break` dengan banyak nilai. | 1518 | Selain itu, loop for mendukung break dengan nilai kembalian, sehingga loop itu sendiri bisa dipakai sebagai ekspresi yang keluar lebih awal dengan hasil bermakna. Ekspresi `for` mendukung `break` dengan banyak nilai. |
| 2928 | 1519 | ||
| 2929 | Contohnya, untuk menemukan angka pertama yang lebih besar dari 10: | 1520 | Contohnya, untuk menemukan angka pertama yang lebih besar dari 10: |
| @@ -2933,15 +1524,6 @@ first_large = for n in *numbers | |||
| 2933 | break n if n > 10 | 1524 | break n if n > 10 |
| 2934 | ``` | 1525 | ``` |
| 2935 | 1526 | ||
| 2936 | <YueDisplay> | ||
| 2937 | |||
| 2938 | ```yue | ||
| 2939 | first_large = for n in *numbers | ||
| 2940 | break n if n > 10 | ||
| 2941 | ``` | ||
| 2942 | |||
| 2943 | </YueDisplay> | ||
| 2944 | |||
| 2945 | Sintaks break-dengan-nilai ini memungkinkan pola pencarian atau keluar-lebih-awal yang ringkas langsung di dalam ekspresi loop. | 1527 | Sintaks break-dengan-nilai ini memungkinkan pola pencarian atau keluar-lebih-awal yang ringkas langsung di dalam ekspresi loop. |
| 2946 | 1528 | ||
| 2947 | ```yuescript | 1529 | ```yuescript |
| @@ -2949,15 +1531,6 @@ key, score = for k, v in pairs data | |||
| 2949 | break k, v * 10 if k == "target" | 1531 | break k, v * 10 if k == "target" |
| 2950 | ``` | 1532 | ``` |
| 2951 | 1533 | ||
| 2952 | <YueDisplay> | ||
| 2953 | |||
| 2954 | ```yue | ||
| 2955 | key, score = for k, v in pairs data | ||
| 2956 | break k, v * 10 if k == "target" | ||
| 2957 | ``` | ||
| 2958 | |||
| 2959 | </YueDisplay> | ||
| 2960 | |||
| 2961 | Anda juga bisa memfilter nilai dengan menggabungkan ekspresi for dengan pernyataan continue. | 1534 | Anda juga bisa memfilter nilai dengan menggabungkan ekspresi for dengan pernyataan continue. |
| 2962 | 1535 | ||
| 2963 | Loop for di akhir badan fungsi tidak diakumulasikan menjadi tabel untuk nilai kembalian (sebaliknya fungsi akan mengembalikan nil). Gunakan pernyataan return eksplisit, atau ubah loop menjadi list comprehension. | 1536 | Loop for di akhir badan fungsi tidak diakumulasikan menjadi tabel untuk nilai kembalian (sebaliknya fungsi akan mengembalikan nil). Gunakan pernyataan return eksplisit, atau ubah loop menjadi list comprehension. |
| @@ -2970,18 +1543,6 @@ print func_a! -- prints nil | |||
| 2970 | print func_b! -- prints table object | 1543 | print func_b! -- prints table object |
| 2971 | ``` | 1544 | ``` |
| 2972 | 1545 | ||
| 2973 | <YueDisplay> | ||
| 2974 | |||
| 2975 | ```yue | ||
| 2976 | func_a = -> for i = 1, 10 do print i | ||
| 2977 | func_b = -> return for i = 1, 10 do i | ||
| 2978 | |||
| 2979 | print func_a! -- prints nil | ||
| 2980 | print func_b! -- prints table object | ||
| 2981 | ``` | ||
| 2982 | |||
| 2983 | </YueDisplay> | ||
| 2984 | |||
| 2985 | # Pernyataan Continue | 1546 | # Pernyataan Continue |
| 2986 | 1547 | ||
| 2987 | Pernyataan continue dapat digunakan untuk melewati iterasi saat ini di dalam loop. | 1548 | Pernyataan continue dapat digunakan untuk melewati iterasi saat ini di dalam loop. |
| @@ -2994,18 +1555,6 @@ while i < 10 | |||
| 2994 | print i | 1555 | print i |
| 2995 | ``` | 1556 | ``` |
| 2996 | 1557 | ||
| 2997 | <YueDisplay> | ||
| 2998 | |||
| 2999 | ```yue | ||
| 3000 | i = 0 | ||
| 3001 | while i < 10 | ||
| 3002 | i += 1 | ||
| 3003 | continue if i % 2 == 0 | ||
| 3004 | print i | ||
| 3005 | ``` | ||
| 3006 | |||
| 3007 | </YueDisplay> | ||
| 3008 | |||
| 3009 | continue juga bisa digunakan bersama ekspresi loop untuk mencegah iterasi tersebut diakumulasikan ke hasil. Contoh ini memfilter tabel array menjadi hanya angka genap: | 1558 | continue juga bisa digunakan bersama ekspresi loop untuk mencegah iterasi tersebut diakumulasikan ke hasil. Contoh ini memfilter tabel array menjadi hanya angka genap: |
| 3010 | 1559 | ||
| 3011 | ```yuescript | 1560 | ```yuescript |
| @@ -3015,17 +1564,6 @@ odds = for x in *my_numbers | |||
| 3015 | x | 1564 | x |
| 3016 | ``` | 1565 | ``` |
| 3017 | 1566 | ||
| 3018 | <YueDisplay> | ||
| 3019 | |||
| 3020 | ```yue | ||
| 3021 | my_numbers = [1, 2, 3, 4, 5, 6] | ||
| 3022 | odds = for x in *my_numbers | ||
| 3023 | continue if x % 2 == 1 | ||
| 3024 | x | ||
| 3025 | ``` | ||
| 3026 | |||
| 3027 | </YueDisplay> | ||
| 3028 | |||
| 3029 | # Pernyataan Switch | 1567 | # Pernyataan Switch |
| 3030 | 1568 | ||
| 3031 | Pernyataan switch adalah bentuk singkat untuk menulis serangkaian if yang membandingkan nilai yang sama. Perhatikan bahwa nilainya hanya dievaluasi sekali. Seperti if, switch bisa memiliki blok else untuk menangani tidak ada yang cocok. Perbandingan dilakukan dengan operator `==`. Di dalam switch, Anda juga bisa memakai ekspresi assignment untuk menyimpan nilai variabel sementara. | 1569 | Pernyataan switch adalah bentuk singkat untuk menulis serangkaian if yang membandingkan nilai yang sama. Perhatikan bahwa nilainya hanya dievaluasi sekali. Seperti if, switch bisa memiliki blok else untuk menangani tidak ada yang cocok. Perbandingan dilakukan dengan operator `==`. Di dalam switch, Anda juga bisa memakai ekspresi assignment untuk menyimpan nilai variabel sementara. |
| @@ -3040,20 +1578,6 @@ switch name := "Dan" | |||
| 3040 | print "I don't know about you with name #{name}" | 1578 | print "I don't know about you with name #{name}" |
| 3041 | ``` | 1579 | ``` |
| 3042 | 1580 | ||
| 3043 | <YueDisplay> | ||
| 3044 | |||
| 3045 | ```yue | ||
| 3046 | switch name := "Dan" | ||
| 3047 | when "Robert" | ||
| 3048 | print "You are Robert" | ||
| 3049 | when "Dan", "Daniel" | ||
| 3050 | print "Your name, it's Dan" | ||
| 3051 | else | ||
| 3052 | print "I don't know about you with name #{name}" | ||
| 3053 | ``` | ||
| 3054 | |||
| 3055 | </YueDisplay> | ||
| 3056 | |||
| 3057 | Klausa when pada switch bisa mencocokkan beberapa nilai dengan menuliskannya dipisah koma. | 1581 | Klausa when pada switch bisa mencocokkan beberapa nilai dengan menuliskannya dipisah koma. |
| 3058 | 1582 | ||
| 3059 | Switch juga bisa dipakai sebagai ekspresi; di sini kita dapat menetapkan hasil switch ke sebuah variabel: | 1583 | Switch juga bisa dipakai sebagai ekspresi; di sini kita dapat menetapkan hasil switch ke sebuah variabel: |
| @@ -3069,21 +1593,6 @@ next_number = switch b | |||
| 3069 | error "can't count that high!" | 1593 | error "can't count that high!" |
| 3070 | ``` | 1594 | ``` |
| 3071 | 1595 | ||
| 3072 | <YueDisplay> | ||
| 3073 | |||
| 3074 | ```yue | ||
| 3075 | b = 1 | ||
| 3076 | next_number = switch b | ||
| 3077 | when 1 | ||
| 3078 | 2 | ||
| 3079 | when 2 | ||
| 3080 | 3 | ||
| 3081 | else | ||
| 3082 | error "can't count that high!" | ||
| 3083 | ``` | ||
| 3084 | |||
| 3085 | </YueDisplay> | ||
| 3086 | |||
| 3087 | Kita bisa memakai kata kunci `then` untuk menulis blok when switch pada satu baris. Tidak ada kata kunci tambahan yang dibutuhkan untuk menulis blok else pada satu baris. | 1596 | Kita bisa memakai kata kunci `then` untuk menulis blok when switch pada satu baris. Tidak ada kata kunci tambahan yang dibutuhkan untuk menulis blok else pada satu baris. |
| 3088 | 1597 | ||
| 3089 | ```yuescript | 1598 | ```yuescript |
| @@ -3093,17 +1602,6 @@ msg = switch math.random(1, 5) | |||
| 3093 | else "not so lucky" | 1602 | else "not so lucky" |
| 3094 | ``` | 1603 | ``` |
| 3095 | 1604 | ||
| 3096 | <YueDisplay> | ||
| 3097 | |||
| 3098 | ```yue | ||
| 3099 | msg = switch math.random(1, 5) | ||
| 3100 | when 1 then "you are lucky" | ||
| 3101 | when 2 then "you are almost lucky" | ||
| 3102 | else "not so lucky" | ||
| 3103 | ``` | ||
| 3104 | |||
| 3105 | </YueDisplay> | ||
| 3106 | |||
| 3107 | Jika Anda ingin menulis kode dengan satu indentasi lebih sedikit saat menulis switch, Anda bisa menaruh klausa when pertama pada baris awal pernyataan, lalu semua klausa lain dapat ditulis dengan satu indentasi lebih sedikit. | 1605 | Jika Anda ingin menulis kode dengan satu indentasi lebih sedikit saat menulis switch, Anda bisa menaruh klausa when pertama pada baris awal pernyataan, lalu semua klausa lain dapat ditulis dengan satu indentasi lebih sedikit. |
| 3108 | 1606 | ||
| 3109 | ```yuescript | 1607 | ```yuescript |
| @@ -3119,23 +1617,6 @@ else | |||
| 3119 | print "not so lucky" | 1617 | print "not so lucky" |
| 3120 | ``` | 1618 | ``` |
| 3121 | 1619 | ||
| 3122 | <YueDisplay> | ||
| 3123 | |||
| 3124 | ```yue | ||
| 3125 | switch math.random(1, 5) | ||
| 3126 | when 1 | ||
| 3127 | print "you are lucky" -- two indents | ||
| 3128 | else | ||
| 3129 | print "not so lucky" | ||
| 3130 | |||
| 3131 | switch math.random(1, 5) when 1 | ||
| 3132 | print "you are lucky" -- one indent | ||
| 3133 | else | ||
| 3134 | print "not so lucky" | ||
| 3135 | ``` | ||
| 3136 | |||
| 3137 | </YueDisplay> | ||
| 3138 | |||
| 3139 | Perlu dicatat urutan ekspresi perbandingan kasus. Ekspresi kasus berada di sisi kiri. Ini bisa berguna jika ekspresi kasus ingin mengganti cara perbandingan dengan mendefinisikan metamethod `eq`. | 1620 | Perlu dicatat urutan ekspresi perbandingan kasus. Ekspresi kasus berada di sisi kiri. Ini bisa berguna jika ekspresi kasus ingin mengganti cara perbandingan dengan mendefinisikan metamethod `eq`. |
| 3140 | 1621 | ||
| 3141 | ## Pencocokan Tabel | 1622 | ## Pencocokan Tabel |
| @@ -3157,25 +1638,6 @@ for item in *items | |||
| 3157 | print "size #{width}, #{height}" | 1638 | print "size #{width}, #{height}" |
| 3158 | ``` | 1639 | ``` |
| 3159 | 1640 | ||
| 3160 | <YueDisplay> | ||
| 3161 | |||
| 3162 | ```yue | ||
| 3163 | items = | ||
| 3164 | * x: 100 | ||
| 3165 | y: 200 | ||
| 3166 | * width: 300 | ||
| 3167 | height: 400 | ||
| 3168 | |||
| 3169 | for item in *items | ||
| 3170 | switch item | ||
| 3171 | when :x, :y | ||
| 3172 | print "Vec2 #{x}, #{y}" | ||
| 3173 | when :width, :height | ||
| 3174 | print "size #{width}, #{height}" | ||
| 3175 | ``` | ||
| 3176 | |||
| 3177 | </YueDisplay> | ||
| 3178 | |||
| 3179 | Anda dapat menggunakan nilai default untuk mendestrukturisasi tabel secara opsional pada beberapa field. | 1641 | Anda dapat menggunakan nilai default untuk mendestrukturisasi tabel secara opsional pada beberapa field. |
| 3180 | 1642 | ||
| 3181 | ```yuescript | 1643 | ```yuescript |
| @@ -3188,20 +1650,6 @@ switch item | |||
| 3188 | print "Vec2 #{x}, #{y}" -- table destructuring will still pass | 1650 | print "Vec2 #{x}, #{y}" -- table destructuring will still pass |
| 3189 | ``` | 1651 | ``` |
| 3190 | 1652 | ||
| 3191 | <YueDisplay> | ||
| 3192 | |||
| 3193 | ```yue | ||
| 3194 | item = {} | ||
| 3195 | |||
| 3196 | {pos: {:x = 50, :y = 200}} = item -- get error: attempt to index a nil value (field 'pos') | ||
| 3197 | |||
| 3198 | switch item | ||
| 3199 | when {pos: {:x = 50, :y = 200}} | ||
| 3200 | print "Vec2 #{x}, #{y}" -- table destructuring will still pass | ||
| 3201 | ``` | ||
| 3202 | |||
| 3203 | </YueDisplay> | ||
| 3204 | |||
| 3205 | Anda juga bisa mencocokkan elemen array, field tabel, dan bahkan struktur bertingkat dengan literal array atau tabel. | 1653 | Anda juga bisa mencocokkan elemen array, field tabel, dan bahkan struktur bertingkat dengan literal array atau tabel. |
| 3206 | 1654 | ||
| 3207 | Cocokkan terhadap elemen array. | 1655 | Cocokkan terhadap elemen array. |
| @@ -3216,20 +1664,6 @@ switch tb | |||
| 3216 | print "1, 2, #{b}" | 1664 | print "1, 2, #{b}" |
| 3217 | ``` | 1665 | ``` |
| 3218 | 1666 | ||
| 3219 | <YueDisplay> | ||
| 3220 | |||
| 3221 | ```yue | ||
| 3222 | switch tb | ||
| 3223 | when [1, 2, 3] | ||
| 3224 | print "1, 2, 3" | ||
| 3225 | when [1, b, 3] | ||
| 3226 | print "1, #{b}, 3" | ||
| 3227 | when [1, 2, b = 3] -- b has a default value | ||
| 3228 | print "1, 2, #{b}" | ||
| 3229 | ``` | ||
| 3230 | |||
| 3231 | </YueDisplay> | ||
| 3232 | |||
| 3233 | Cocokkan terhadap field tabel dengan destrukturisasi. | 1667 | Cocokkan terhadap field tabel dengan destrukturisasi. |
| 3234 | 1668 | ||
| 3235 | ```yuescript | 1669 | ```yuescript |
| @@ -3242,20 +1676,6 @@ switch tb | |||
| 3242 | print "invalid" | 1676 | print "invalid" |
| 3243 | ``` | 1677 | ``` |
| 3244 | 1678 | ||
| 3245 | <YueDisplay> | ||
| 3246 | |||
| 3247 | ```yue | ||
| 3248 | switch tb | ||
| 3249 | when success: true, :result | ||
| 3250 | print "success", result | ||
| 3251 | when success: false | ||
| 3252 | print "failed", result | ||
| 3253 | else | ||
| 3254 | print "invalid" | ||
| 3255 | ``` | ||
| 3256 | |||
| 3257 | </YueDisplay> | ||
| 3258 | |||
| 3259 | Cocokkan terhadap struktur tabel bertingkat. | 1679 | Cocokkan terhadap struktur tabel bertingkat. |
| 3260 | 1680 | ||
| 3261 | ```yuescript | 1681 | ```yuescript |
| @@ -3268,20 +1688,6 @@ switch tb | |||
| 3268 | print "invalid" | 1688 | print "invalid" |
| 3269 | ``` | 1689 | ``` |
| 3270 | 1690 | ||
| 3271 | <YueDisplay> | ||
| 3272 | |||
| 3273 | ```yue | ||
| 3274 | switch tb | ||
| 3275 | when data: {type: "success", :content} | ||
| 3276 | print "success", content | ||
| 3277 | when data: {type: "error", :content} | ||
| 3278 | print "failed", content | ||
| 3279 | else | ||
| 3280 | print "invalid" | ||
| 3281 | ``` | ||
| 3282 | |||
| 3283 | </YueDisplay> | ||
| 3284 | |||
| 3285 | Cocokkan terhadap array dari tabel. | 1691 | Cocokkan terhadap array dari tabel. |
| 3286 | 1692 | ||
| 3287 | ```yuescript | 1693 | ```yuescript |
| @@ -3295,21 +1701,6 @@ switch tb | |||
| 3295 | print "matched", fourth | 1701 | print "matched", fourth |
| 3296 | ``` | 1702 | ``` |
| 3297 | 1703 | ||
| 3298 | <YueDisplay> | ||
| 3299 | |||
| 3300 | ```yue | ||
| 3301 | switch tb | ||
| 3302 | when [ | ||
| 3303 | {a: 1, b: 2} | ||
| 3304 | {a: 3, b: 4} | ||
| 3305 | {a: 5, b: 6} | ||
| 3306 | fourth | ||
| 3307 | ] | ||
| 3308 | print "matched", fourth | ||
| 3309 | ``` | ||
| 3310 | |||
| 3311 | </YueDisplay> | ||
| 3312 | |||
| 3313 | Cocokkan terhadap daftar dan tangkap rentang elemen. | 1704 | Cocokkan terhadap daftar dan tangkap rentang elemen. |
| 3314 | 1705 | ||
| 3315 | ```yuescript | 1706 | ```yuescript |
| @@ -3321,19 +1712,6 @@ switch segments | |||
| 3321 | print "Action:", action -- prints: "view" | 1712 | print "Action:", action -- prints: "view" |
| 3322 | ``` | 1713 | ``` |
| 3323 | 1714 | ||
| 3324 | <YueDisplay> | ||
| 3325 | |||
| 3326 | ```yue | ||
| 3327 | segments = ["admin", "users", "logs", "view"] | ||
| 3328 | switch segments | ||
| 3329 | when [...groups, resource, action] | ||
| 3330 | print "Group:", groups -- prints: {"admin", "users"} | ||
| 3331 | print "Resource:", resource -- prints: "logs" | ||
| 3332 | print "Action:", action -- prints: "view" | ||
| 3333 | ``` | ||
| 3334 | |||
| 3335 | </YueDisplay> | ||
| 3336 | |||
| 3337 | # Perulangan While | 1715 | # Perulangan While |
| 3338 | 1716 | ||
| 3339 | Perulangan while juga memiliki empat variasi: | 1717 | Perulangan while juga memiliki empat variasi: |
| @@ -3347,19 +1725,6 @@ while i > 0 | |||
| 3347 | while running == true do my_function! | 1725 | while running == true do my_function! |
| 3348 | ``` | 1726 | ``` |
| 3349 | 1727 | ||
| 3350 | <YueDisplay> | ||
| 3351 | |||
| 3352 | ```yue | ||
| 3353 | i = 10 | ||
| 3354 | while i > 0 | ||
| 3355 | print i | ||
| 3356 | i -= 1 | ||
| 3357 | |||
| 3358 | while running == true do my_function! | ||
| 3359 | ``` | ||
| 3360 | |||
| 3361 | </YueDisplay> | ||
| 3362 | |||
| 3363 | ```yuescript | 1728 | ```yuescript |
| 3364 | i = 10 | 1729 | i = 10 |
| 3365 | until i == 0 | 1730 | until i == 0 |
| @@ -3369,18 +1734,6 @@ until i == 0 | |||
| 3369 | until running == false do my_function! | 1734 | until running == false do my_function! |
| 3370 | ``` | 1735 | ``` |
| 3371 | 1736 | ||
| 3372 | <YueDisplay> | ||
| 3373 | |||
| 3374 | ```yue | ||
| 3375 | i = 10 | ||
| 3376 | until i == 0 | ||
| 3377 | print i | ||
| 3378 | i -= 1 | ||
| 3379 | until running == false do my_function! | ||
| 3380 | ``` | ||
| 3381 | |||
| 3382 | </YueDisplay> | ||
| 3383 | |||
| 3384 | Seperti loop for, loop while juga bisa digunakan sebagai ekspresi. Ekspresi `while` dan `until` mendukung `break` dengan banyak nilai. | 1737 | Seperti loop for, loop while juga bisa digunakan sebagai ekspresi. Ekspresi `while` dan `until` mendukung `break` dengan banyak nilai. |
| 3385 | 1738 | ||
| 3386 | ```yuescript | 1739 | ```yuescript |
| @@ -3389,16 +1742,6 @@ value, doubled = while true | |||
| 3389 | break n, n * 2 if n > 10 | 1742 | break n, n * 2 if n > 10 |
| 3390 | ``` | 1743 | ``` |
| 3391 | 1744 | ||
| 3392 | <YueDisplay> | ||
| 3393 | |||
| 3394 | ```yue | ||
| 3395 | value, doubled = while true | ||
| 3396 | n = get_next! | ||
| 3397 | break n, n * 2 if n > 10 | ||
| 3398 | ``` | ||
| 3399 | |||
| 3400 | </YueDisplay> | ||
| 3401 | |||
| 3402 | Selain itu, agar sebuah fungsi mengembalikan nilai akumulasi dari loop while, pernyataannya harus di-return secara eksplisit. | 1745 | Selain itu, agar sebuah fungsi mengembalikan nilai akumulasi dari loop while, pernyataannya harus di-return secara eksplisit. |
| 3403 | 1746 | ||
| 3404 | ## Repeat Loop | 1747 | ## Repeat Loop |
| @@ -3413,18 +1756,6 @@ repeat | |||
| 3413 | until i == 0 | 1756 | until i == 0 |
| 3414 | ``` | 1757 | ``` |
| 3415 | 1758 | ||
| 3416 | <YueDisplay> | ||
| 3417 | |||
| 3418 | ```yue | ||
| 3419 | i = 10 | ||
| 3420 | repeat | ||
| 3421 | print i | ||
| 3422 | i -= 1 | ||
| 3423 | until i == 0 | ||
| 3424 | ``` | ||
| 3425 | |||
| 3426 | </YueDisplay> | ||
| 3427 | |||
| 3428 | Ekspresi `repeat` juga mendukung `break` dengan banyak nilai: | 1759 | Ekspresi `repeat` juga mendukung `break` dengan banyak nilai: |
| 3429 | 1760 | ||
| 3430 | ```yuescript | 1761 | ```yuescript |
| @@ -3435,18 +1766,6 @@ value, scaled = repeat | |||
| 3435 | until false | 1766 | until false |
| 3436 | ``` | 1767 | ``` |
| 3437 | 1768 | ||
| 3438 | <YueDisplay> | ||
| 3439 | |||
| 3440 | ```yue | ||
| 3441 | i = 1 | ||
| 3442 | value, scaled = repeat | ||
| 3443 | break i, i * 100 if i > 3 | ||
| 3444 | i += 1 | ||
| 3445 | until false | ||
| 3446 | ``` | ||
| 3447 | |||
| 3448 | </YueDisplay> | ||
| 3449 | |||
| 3450 | # Stub Fungsi | 1769 | # Stub Fungsi |
| 3451 | 1770 | ||
| 3452 | Sering kali fungsi dari sebuah objek diteruskan sebagai nilai, misalnya meneruskan method instance ke fungsi lain sebagai callback. Jika fungsi mengharapkan objek yang dioperasikan sebagai argumen pertama, maka Anda harus menggabungkan objek tersebut dengan fungsi agar dapat dipanggil dengan benar. | 1771 | Sering kali fungsi dari sebuah objek diteruskan sebagai nilai, misalnya meneruskan method instance ke fungsi lain sebagai callback. Jika fungsi mengharapkan objek yang dioperasikan sebagai argumen pertama, maka Anda harus menggabungkan objek tersebut dengan fungsi agar dapat dipanggil dengan benar. |
| @@ -3474,29 +1793,6 @@ run_callback my_object.write | |||
| 3474 | run_callback my_object\write | 1793 | run_callback my_object\write |
| 3475 | ``` | 1794 | ``` |
| 3476 | 1795 | ||
| 3477 | <YueDisplay> | ||
| 3478 | |||
| 3479 | ```yue | ||
| 3480 | my_object = { | ||
| 3481 | value: 1000 | ||
| 3482 | write: => print "the value:", @value | ||
| 3483 | } | ||
| 3484 | |||
| 3485 | run_callback = (func) -> | ||
| 3486 | print "running callback..." | ||
| 3487 | func! | ||
| 3488 | |||
| 3489 | -- ini tidak akan berfungsi: | ||
| 3490 | -- fungsi tidak memiliki referensi ke my_object | ||
| 3491 | run_callback my_object.write | ||
| 3492 | |||
| 3493 | -- sintaks stub fungsi | ||
| 3494 | -- memungkinkan kita membundel objek ke fungsi baru | ||
| 3495 | run_callback my_object\write | ||
| 3496 | ``` | ||
| 3497 | |||
| 3498 | </YueDisplay> | ||
| 3499 | |||
| 3500 | # Backcall | 1796 | # Backcall |
| 3501 | 1797 | ||
| 3502 | Backcall digunakan untuk meratakan callback yang bersarang. Backcall didefinisikan menggunakan panah yang mengarah ke kiri sebagai parameter terakhir secara default yang akan mengisi pemanggilan fungsi. Semua sintaks pada dasarnya sama seperti fungsi panah biasa, kecuali arahnya berlawanan dan badan fungsi tidak memerlukan indentasi. | 1798 | Backcall digunakan untuk meratakan callback yang bersarang. Backcall didefinisikan menggunakan panah yang mengarah ke kiri sebagai parameter terakhir secara default yang akan mengisi pemanggilan fungsi. Semua sintaks pada dasarnya sama seperti fungsi panah biasa, kecuali arahnya berlawanan dan badan fungsi tidak memerlukan indentasi. |
| @@ -3506,15 +1802,6 @@ x <- f | |||
| 3506 | print "hello" .. x | 1802 | print "hello" .. x |
| 3507 | ``` | 1803 | ``` |
| 3508 | 1804 | ||
| 3509 | <YueDisplay> | ||
| 3510 | |||
| 3511 | ```yue | ||
| 3512 | x <- f | ||
| 3513 | print "hello" .. x | ||
| 3514 | ``` | ||
| 3515 | |||
| 3516 | </YueDisplay> | ||
| 3517 | |||
| 3518 | Fungsi panah tebal juga tersedia. | 1805 | Fungsi panah tebal juga tersedia. |
| 3519 | 1806 | ||
| 3520 | ```yuescript | 1807 | ```yuescript |
| @@ -3522,15 +1809,6 @@ Fungsi panah tebal juga tersedia. | |||
| 3522 | print @value | 1809 | print @value |
| 3523 | ``` | 1810 | ``` |
| 3524 | 1811 | ||
| 3525 | <YueDisplay> | ||
| 3526 | |||
| 3527 | ```yue | ||
| 3528 | <= f | ||
| 3529 | print @value | ||
| 3530 | ``` | ||
| 3531 | |||
| 3532 | </YueDisplay> | ||
| 3533 | |||
| 3534 | Anda dapat menentukan placeholder untuk posisi fungsi backcall sebagai parameter. | 1812 | Anda dapat menentukan placeholder untuk posisi fungsi backcall sebagai parameter. |
| 3535 | 1813 | ||
| 3536 | ```yuescript | 1814 | ```yuescript |
| @@ -3538,15 +1816,6 @@ Anda dapat menentukan placeholder untuk posisi fungsi backcall sebagai parameter | |||
| 3538 | x * 2 | 1816 | x * 2 |
| 3539 | ``` | 1817 | ``` |
| 3540 | 1818 | ||
| 3541 | <YueDisplay> | ||
| 3542 | |||
| 3543 | ```yue | ||
| 3544 | (x) <- map _, [1, 2, 3] | ||
| 3545 | x * 2 | ||
| 3546 | ``` | ||
| 3547 | |||
| 3548 | </YueDisplay> | ||
| 3549 | |||
| 3550 | Jika Anda ingin menulis kode lanjutan setelah backcall, Anda dapat memisahkannya dengan pernyataan `do`. Tanda kurung dapat dihilangkan untuk fungsi panah non-tebal. | 1819 | Jika Anda ingin menulis kode lanjutan setelah backcall, Anda dapat memisahkannya dengan pernyataan `do`. Tanda kurung dapat dihilangkan untuk fungsi panah non-tebal. |
| 3551 | 1820 | ||
| 3552 | ```yuescript | 1821 | ```yuescript |
| @@ -3558,19 +1827,6 @@ result, msg = do | |||
| 3558 | print result, msg | 1827 | print result, msg |
| 3559 | ``` | 1828 | ``` |
| 3560 | 1829 | ||
| 3561 | <YueDisplay> | ||
| 3562 | |||
| 3563 | ```yue | ||
| 3564 | result, msg = do | ||
| 3565 | data <- readAsync "filename.txt" | ||
| 3566 | print data | ||
| 3567 | info <- processAsync data | ||
| 3568 | check info | ||
| 3569 | print result, msg | ||
| 3570 | ``` | ||
| 3571 | |||
| 3572 | </YueDisplay> | ||
| 3573 | |||
| 3574 | # Literal Fungsi | 1830 | # Literal Fungsi |
| 3575 | 1831 | ||
| 3576 | Semua fungsi dibuat menggunakan ekspresi fungsi. Fungsi sederhana ditandai dengan panah: **->**. | 1832 | Semua fungsi dibuat menggunakan ekspresi fungsi. Fungsi sederhana ditandai dengan panah: **->**. |
| @@ -3580,15 +1836,6 @@ my_function = -> | |||
| 3580 | my_function() -- memanggil fungsi kosong | 1836 | my_function() -- memanggil fungsi kosong |
| 3581 | ``` | 1837 | ``` |
| 3582 | 1838 | ||
| 3583 | <YueDisplay> | ||
| 3584 | |||
| 3585 | ```yue | ||
| 3586 | my_function = -> | ||
| 3587 | my_function() -- memanggil fungsi kosong | ||
| 3588 | ``` | ||
| 3589 | |||
| 3590 | </YueDisplay> | ||
| 3591 | |||
| 3592 | Badan fungsi bisa berupa satu pernyataan yang ditulis langsung setelah panah, atau berupa serangkaian pernyataan yang diindentasi di baris berikutnya: | 1839 | Badan fungsi bisa berupa satu pernyataan yang ditulis langsung setelah panah, atau berupa serangkaian pernyataan yang diindentasi di baris berikutnya: |
| 3593 | 1840 | ||
| 3594 | ```yuescript | 1841 | ```yuescript |
| @@ -3599,18 +1846,6 @@ func_b = -> | |||
| 3599 | print "The value:", value | 1846 | print "The value:", value |
| 3600 | ``` | 1847 | ``` |
| 3601 | 1848 | ||
| 3602 | <YueDisplay> | ||
| 3603 | |||
| 3604 | ```yue | ||
| 3605 | func_a = -> print "hello world" | ||
| 3606 | |||
| 3607 | func_b = -> | ||
| 3608 | value = 100 | ||
| 3609 | print "The value:", value | ||
| 3610 | ``` | ||
| 3611 | |||
| 3612 | </YueDisplay> | ||
| 3613 | |||
| 3614 | Jika fungsi tidak memiliki argumen, ia dapat dipanggil menggunakan operator `!`, sebagai ganti tanda kurung kosong. Pemanggilan `!` adalah cara yang disarankan untuk memanggil fungsi tanpa argumen. | 1849 | Jika fungsi tidak memiliki argumen, ia dapat dipanggil menggunakan operator `!`, sebagai ganti tanda kurung kosong. Pemanggilan `!` adalah cara yang disarankan untuk memanggil fungsi tanpa argumen. |
| 3615 | 1850 | ||
| 3616 | ```yuescript | 1851 | ```yuescript |
| @@ -3618,29 +1853,12 @@ func_a! | |||
| 3618 | func_b() | 1853 | func_b() |
| 3619 | ``` | 1854 | ``` |
| 3620 | 1855 | ||
| 3621 | <YueDisplay> | ||
| 3622 | |||
| 3623 | ```yue | ||
| 3624 | func_a! | ||
| 3625 | func_b() | ||
| 3626 | ``` | ||
| 3627 | |||
| 3628 | </YueDisplay> | ||
| 3629 | |||
| 3630 | Fungsi dengan argumen dapat dibuat dengan menaruh daftar nama argumen dalam tanda kurung sebelum panah: | 1856 | Fungsi dengan argumen dapat dibuat dengan menaruh daftar nama argumen dalam tanda kurung sebelum panah: |
| 3631 | 1857 | ||
| 3632 | ```yuescript | 1858 | ```yuescript |
| 3633 | sum = (x, y) -> print "sum", x + y | 1859 | sum = (x, y) -> print "sum", x + y |
| 3634 | ``` | 1860 | ``` |
| 3635 | 1861 | ||
| 3636 | <YueDisplay> | ||
| 3637 | |||
| 3638 | ```yue | ||
| 3639 | sum = (x, y) -> print "sum", x + y | ||
| 3640 | ``` | ||
| 3641 | |||
| 3642 | </YueDisplay> | ||
| 3643 | |||
| 3644 | Fungsi dapat dipanggil dengan menuliskan argumen setelah nama ekspresi yang mengevaluasi ke fungsi. Saat merangkai pemanggilan fungsi, argumen diterapkan ke fungsi terdekat di sebelah kiri. | 1862 | Fungsi dapat dipanggil dengan menuliskan argumen setelah nama ekspresi yang mengevaluasi ke fungsi. Saat merangkai pemanggilan fungsi, argumen diterapkan ke fungsi terdekat di sebelah kiri. |
| 3645 | 1863 | ||
| 3646 | ```yuescript | 1864 | ```yuescript |
| @@ -3650,31 +1868,12 @@ print sum 10, 20 | |||
| 3650 | a b c "a", "b", "c" | 1868 | a b c "a", "b", "c" |
| 3651 | ``` | 1869 | ``` |
| 3652 | 1870 | ||
| 3653 | <YueDisplay> | ||
| 3654 | |||
| 3655 | ```yue | ||
| 3656 | sum 10, 20 | ||
| 3657 | print sum 10, 20 | ||
| 3658 | |||
| 3659 | a b c "a", "b", "c" | ||
| 3660 | ``` | ||
| 3661 | |||
| 3662 | </YueDisplay> | ||
| 3663 | |||
| 3664 | Untuk menghindari ambiguitas saat memanggil fungsi, tanda kurung juga bisa digunakan untuk mengelilingi argumen. Ini diperlukan di sini agar argumen yang tepat dikirim ke fungsi yang tepat. | 1871 | Untuk menghindari ambiguitas saat memanggil fungsi, tanda kurung juga bisa digunakan untuk mengelilingi argumen. Ini diperlukan di sini agar argumen yang tepat dikirim ke fungsi yang tepat. |
| 3665 | 1872 | ||
| 3666 | ```yuescript | 1873 | ```yuescript |
| 3667 | print "x:", sum(10, 20), "y:", sum(30, 40) | 1874 | print "x:", sum(10, 20), "y:", sum(30, 40) |
| 3668 | ``` | 1875 | ``` |
| 3669 | 1876 | ||
| 3670 | <YueDisplay> | ||
| 3671 | |||
| 3672 | ```yue | ||
| 3673 | print "x:", sum(10, 20), "y:", sum(30, 40) | ||
| 3674 | ``` | ||
| 3675 | |||
| 3676 | </YueDisplay> | ||
| 3677 | |||
| 3678 | Tidak boleh ada spasi antara tanda kurung buka dan nama fungsi. | 1877 | Tidak boleh ada spasi antara tanda kurung buka dan nama fungsi. |
| 3679 | 1878 | ||
| 3680 | Fungsi akan memaksa pernyataan terakhir di badannya menjadi pernyataan return, ini disebut return implisit: | 1879 | Fungsi akan memaksa pernyataan terakhir di badannya menjadi pernyataan return, ini disebut return implisit: |
| @@ -3684,29 +1883,12 @@ sum = (x, y) -> x + y | |||
| 3684 | print "The sum is ", sum 10, 20 | 1883 | print "The sum is ", sum 10, 20 |
| 3685 | ``` | 1884 | ``` |
| 3686 | 1885 | ||
| 3687 | <YueDisplay> | ||
| 3688 | |||
| 3689 | ```yue | ||
| 3690 | sum = (x, y) -> x + y | ||
| 3691 | print "The sum is ", sum 10, 20 | ||
| 3692 | ``` | ||
| 3693 | |||
| 3694 | </YueDisplay> | ||
| 3695 | |||
| 3696 | Dan jika Anda perlu return secara eksplisit, Anda bisa menggunakan kata kunci `return`: | 1886 | Dan jika Anda perlu return secara eksplisit, Anda bisa menggunakan kata kunci `return`: |
| 3697 | 1887 | ||
| 3698 | ```yuescript | 1888 | ```yuescript |
| 3699 | sum = (x, y) -> return x + y | 1889 | sum = (x, y) -> return x + y |
| 3700 | ``` | 1890 | ``` |
| 3701 | 1891 | ||
| 3702 | <YueDisplay> | ||
| 3703 | |||
| 3704 | ```yue | ||
| 3705 | sum = (x, y) -> return x + y | ||
| 3706 | ``` | ||
| 3707 | |||
| 3708 | </YueDisplay> | ||
| 3709 | |||
| 3710 | Seperti di Lua, fungsi dapat mengembalikan beberapa nilai. Pernyataan terakhir harus berupa daftar nilai yang dipisahkan koma: | 1892 | Seperti di Lua, fungsi dapat mengembalikan beberapa nilai. Pernyataan terakhir harus berupa daftar nilai yang dipisahkan koma: |
| 3711 | 1893 | ||
| 3712 | ```yuescript | 1894 | ```yuescript |
| @@ -3714,15 +1896,6 @@ mystery = (x, y) -> x + y, x - y | |||
| 3714 | a, b = mystery 10, 20 | 1896 | a, b = mystery 10, 20 |
| 3715 | ``` | 1897 | ``` |
| 3716 | 1898 | ||
| 3717 | <YueDisplay> | ||
| 3718 | |||
| 3719 | ```yue | ||
| 3720 | mystery = (x, y) -> x + y, x - y | ||
| 3721 | a, b = mystery 10, 20 | ||
| 3722 | ``` | ||
| 3723 | |||
| 3724 | </YueDisplay> | ||
| 3725 | |||
| 3726 | ## Panah Tebal | 1899 | ## Panah Tebal |
| 3727 | 1900 | ||
| 3728 | Karena sudah menjadi idiom di Lua untuk mengirim objek sebagai argumen pertama saat memanggil method, disediakan sintaks khusus untuk membuat fungsi yang otomatis menyertakan argumen `self`. | 1901 | Karena sudah menjadi idiom di Lua untuk mengirim objek sebagai argumen pertama saat memanggil method, disediakan sintaks khusus untuk membuat fungsi yang otomatis menyertakan argumen `self`. |
| @@ -3731,14 +1904,6 @@ Karena sudah menjadi idiom di Lua untuk mengirim objek sebagai argumen pertama s | |||
| 3731 | func = (num) => @value + num | 1904 | func = (num) => @value + num |
| 3732 | ``` | 1905 | ``` |
| 3733 | 1906 | ||
| 3734 | <YueDisplay> | ||
| 3735 | |||
| 3736 | ```yue | ||
| 3737 | func = (num) => @value + num | ||
| 3738 | ``` | ||
| 3739 | |||
| 3740 | </YueDisplay> | ||
| 3741 | |||
| 3742 | ## Nilai Default Argumen | 1907 | ## Nilai Default Argumen |
| 3743 | 1908 | ||
| 3744 | Dimungkinkan untuk menyediakan nilai default bagi argumen fungsi. Argumen dianggap kosong jika nilainya nil. Argumen nil yang memiliki nilai default akan diganti sebelum badan fungsi dijalankan. | 1909 | Dimungkinkan untuk menyediakan nilai default bagi argumen fungsi. Argumen dianggap kosong jika nilainya nil. Argumen nil yang memiliki nilai default akan diganti sebelum badan fungsi dijalankan. |
| @@ -3749,16 +1914,6 @@ my_function = (name = "something", height = 100) -> | |||
| 3749 | print "My height is", height | 1914 | print "My height is", height |
| 3750 | ``` | 1915 | ``` |
| 3751 | 1916 | ||
| 3752 | <YueDisplay> | ||
| 3753 | |||
| 3754 | ```yue | ||
| 3755 | my_function = (name = "something", height = 100) -> | ||
| 3756 | print "Hello I am", name | ||
| 3757 | print "My height is", height | ||
| 3758 | ``` | ||
| 3759 | |||
| 3760 | </YueDisplay> | ||
| 3761 | |||
| 3762 | Ekspresi nilai default argumen dievaluasi di dalam badan fungsi sesuai urutan deklarasi argumen. Karena itu, nilai default dapat mengakses argumen yang dideklarasikan sebelumnya. | 1917 | Ekspresi nilai default argumen dievaluasi di dalam badan fungsi sesuai urutan deklarasi argumen. Karena itu, nilai default dapat mengakses argumen yang dideklarasikan sebelumnya. |
| 3763 | 1918 | ||
| 3764 | ```yuescript | 1919 | ```yuescript |
| @@ -3766,15 +1921,6 @@ some_args = (x = 100, y = x + 1000) -> | |||
| 3766 | print x + y | 1921 | print x + y |
| 3767 | ``` | 1922 | ``` |
| 3768 | 1923 | ||
| 3769 | <YueDisplay> | ||
| 3770 | |||
| 3771 | ```yue | ||
| 3772 | some_args = (x = 100, y = x + 1000) -> | ||
| 3773 | print x + y | ||
| 3774 | ``` | ||
| 3775 | |||
| 3776 | </YueDisplay> | ||
| 3777 | |||
| 3778 | ## Pertimbangan | 1924 | ## Pertimbangan |
| 3779 | 1925 | ||
| 3780 | Karena cara pemanggilan fungsi tanpa tanda kurung yang ekspresif, beberapa pembatasan harus diterapkan untuk menghindari ambiguitas parsing yang melibatkan spasi. | 1926 | Karena cara pemanggilan fungsi tanpa tanda kurung yang ekspresif, beberapa pembatasan harus diterapkan untuk menghindari ambiguitas parsing yang melibatkan spasi. |
| @@ -3788,17 +1934,6 @@ c = x -y | |||
| 3788 | d = x- z | 1934 | d = x- z |
| 3789 | ``` | 1935 | ``` |
| 3790 | 1936 | ||
| 3791 | <YueDisplay> | ||
| 3792 | |||
| 3793 | ```yue | ||
| 3794 | a = x - 10 | ||
| 3795 | b = x-10 | ||
| 3796 | c = x -y | ||
| 3797 | d = x- z | ||
| 3798 | ``` | ||
| 3799 | |||
| 3800 | </YueDisplay> | ||
| 3801 | |||
| 3802 | Prioritas argumen pertama pada pemanggilan fungsi dapat dikendalikan menggunakan spasi jika argumennya adalah literal string. Di Lua, sudah umum untuk menghilangkan tanda kurung saat memanggil fungsi dengan satu literal string atau tabel. | 1937 | Prioritas argumen pertama pada pemanggilan fungsi dapat dikendalikan menggunakan spasi jika argumennya adalah literal string. Di Lua, sudah umum untuk menghilangkan tanda kurung saat memanggil fungsi dengan satu literal string atau tabel. |
| 3803 | 1938 | ||
| 3804 | Ketika tidak ada spasi antara variabel dan literal string, pemanggilan fungsi akan memiliki prioritas atas ekspresi yang mengikuti. Tidak ada argumen lain yang dapat diberikan pada fungsi ketika dipanggil dengan cara ini. | 1939 | Ketika tidak ada spasi antara variabel dan literal string, pemanggilan fungsi akan memiliki prioritas atas ekspresi yang mengikuti. Tidak ada argumen lain yang dapat diberikan pada fungsi ketika dipanggil dengan cara ini. |
| @@ -3810,15 +1945,6 @@ x = func"hello" + 100 | |||
| 3810 | y = func "hello" + 100 | 1945 | y = func "hello" + 100 |
| 3811 | ``` | 1946 | ``` |
| 3812 | 1947 | ||
| 3813 | <YueDisplay> | ||
| 3814 | |||
| 3815 | ```yue | ||
| 3816 | x = func"hello" + 100 | ||
| 3817 | y = func "hello" + 100 | ||
| 3818 | ``` | ||
| 3819 | |||
| 3820 | </YueDisplay> | ||
| 3821 | |||
| 3822 | ## Argumen Multi-baris | 1948 | ## Argumen Multi-baris |
| 3823 | 1949 | ||
| 3824 | Saat memanggil fungsi yang menerima banyak argumen, akan lebih nyaman untuk memecah daftar argumen menjadi beberapa baris. Karena sifat bahasa yang peka terhadap spasi, perlu hati-hati saat memecah daftar argumen. | 1950 | Saat memanggil fungsi yang menerima banyak argumen, akan lebih nyaman untuk memecah daftar argumen menjadi beberapa baris. Karena sifat bahasa yang peka terhadap spasi, perlu hati-hati saat memecah daftar argumen. |
| @@ -3835,20 +1961,6 @@ cool_func 1, 2, | |||
| 3835 | 7, 8 | 1961 | 7, 8 |
| 3836 | ``` | 1962 | ``` |
| 3837 | 1963 | ||
| 3838 | <YueDisplay> | ||
| 3839 | |||
| 3840 | ```yue | ||
| 3841 | my_func 5, 4, 3, | ||
| 3842 | 8, 9, 10 | ||
| 3843 | |||
| 3844 | cool_func 1, 2, | ||
| 3845 | 3, 4, | ||
| 3846 | 5, 6, | ||
| 3847 | 7, 8 | ||
| 3848 | ``` | ||
| 3849 | |||
| 3850 | </YueDisplay> | ||
| 3851 | |||
| 3852 | Jenis pemanggilan ini dapat dinest. Tingkat indentasi digunakan untuk menentukan argumen milik fungsi yang mana. | 1964 | Jenis pemanggilan ini dapat dinest. Tingkat indentasi digunakan untuk menentukan argumen milik fungsi yang mana. |
| 3853 | 1965 | ||
| 3854 | ```yuescript | 1966 | ```yuescript |
| @@ -3858,17 +1970,6 @@ my_func 5, 6, 7, | |||
| 3858 | 5, 4 | 1970 | 5, 4 |
| 3859 | ``` | 1971 | ``` |
| 3860 | 1972 | ||
| 3861 | <YueDisplay> | ||
| 3862 | |||
| 3863 | ```yue | ||
| 3864 | my_func 5, 6, 7, | ||
| 3865 | 6, another_func 6, 7, 8, | ||
| 3866 | 9, 1, 2, | ||
| 3867 | 5, 4 | ||
| 3868 | ``` | ||
| 3869 | |||
| 3870 | </YueDisplay> | ||
| 3871 | |||
| 3872 | Karena tabel juga menggunakan koma sebagai pemisah, sintaks indentasi ini membantu agar nilai menjadi bagian dari daftar argumen, bukan bagian dari tabel. | 1973 | Karena tabel juga menggunakan koma sebagai pemisah, sintaks indentasi ini membantu agar nilai menjadi bagian dari daftar argumen, bukan bagian dari tabel. |
| 3873 | 1974 | ||
| 3874 | ```yuescript | 1975 | ```yuescript |
| @@ -3879,18 +1980,6 @@ x = [ | |||
| 3879 | ] | 1980 | ] |
| 3880 | ``` | 1981 | ``` |
| 3881 | 1982 | ||
| 3882 | <YueDisplay> | ||
| 3883 | |||
| 3884 | ```yue | ||
| 3885 | x = [ | ||
| 3886 | 1, 2, 3, 4, a_func 4, 5, | ||
| 3887 | 5, 6, | ||
| 3888 | 8, 9, 10 | ||
| 3889 | ] | ||
| 3890 | ``` | ||
| 3891 | |||
| 3892 | </YueDisplay> | ||
| 3893 | |||
| 3894 | Meskipun jarang, perhatikan bahwa kita bisa memberikan indentasi yang lebih dalam untuk argumen fungsi jika kita tahu akan menggunakan indentasi yang lebih dangkal di bagian selanjutnya. | 1983 | Meskipun jarang, perhatikan bahwa kita bisa memberikan indentasi yang lebih dalam untuk argumen fungsi jika kita tahu akan menggunakan indentasi yang lebih dangkal di bagian selanjutnya. |
| 3895 | 1984 | ||
| 3896 | ```yuescript | 1985 | ```yuescript |
| @@ -3900,17 +1989,6 @@ y = [ my_func 1, 2, 3, | |||
| 3900 | ] | 1989 | ] |
| 3901 | ``` | 1990 | ``` |
| 3902 | 1991 | ||
| 3903 | <YueDisplay> | ||
| 3904 | |||
| 3905 | ```yue | ||
| 3906 | y = [ my_func 1, 2, 3, | ||
| 3907 | 4, 5, | ||
| 3908 | 5, 6, 7 | ||
| 3909 | ] | ||
| 3910 | ``` | ||
| 3911 | |||
| 3912 | </YueDisplay> | ||
| 3913 | |||
| 3914 | Hal yang sama juga dapat dilakukan pada pernyataan tingkat blok lainnya seperti kondisional. Kita bisa menggunakan tingkat indentasi untuk menentukan nilai milik pernyataan apa: | 1992 | Hal yang sama juga dapat dilakukan pada pernyataan tingkat blok lainnya seperti kondisional. Kita bisa menggunakan tingkat indentasi untuk menentukan nilai milik pernyataan apa: |
| 3915 | 1993 | ||
| 3916 | ```yuescript | 1994 | ```yuescript |
| @@ -3927,24 +2005,6 @@ if func 1, 2, 3, | |||
| 3927 | print "I am inside if" | 2005 | print "I am inside if" |
| 3928 | ``` | 2006 | ``` |
| 3929 | 2007 | ||
| 3930 | <YueDisplay> | ||
| 3931 | |||
| 3932 | ```yue | ||
| 3933 | if func 1, 2, 3, | ||
| 3934 | "hello", | ||
| 3935 | "world" | ||
| 3936 | print "hello" | ||
| 3937 | print "I am inside if" | ||
| 3938 | |||
| 3939 | if func 1, 2, 3, | ||
| 3940 | "hello", | ||
| 3941 | "world" | ||
| 3942 | print "hello" | ||
| 3943 | print "I am inside if" | ||
| 3944 | ``` | ||
| 3945 | |||
| 3946 | </YueDisplay> | ||
| 3947 | |||
| 3948 | ## Destrukturisasi Parameter | 2008 | ## Destrukturisasi Parameter |
| 3949 | 2009 | ||
| 3950 | YueScript kini mendukung destrukturisasi parameter fungsi ketika argumen berupa objek. Dua bentuk destrukturisasi literal tabel tersedia: | 2010 | YueScript kini mendukung destrukturisasi parameter fungsi ketika argumen berupa objek. Dua bentuk destrukturisasi literal tabel tersedia: |
| @@ -3966,23 +2026,6 @@ arg1 = {a: 0} | |||
| 3966 | f2 arg1, arg2 | 2026 | f2 arg1, arg2 |
| 3967 | ``` | 2027 | ``` |
| 3968 | 2028 | ||
| 3969 | <YueDisplay> | ||
| 3970 | |||
| 3971 | ```yue | ||
| 3972 | f1 = (:a, :b, :c) -> | ||
| 3973 | print a, b, c | ||
| 3974 | |||
| 3975 | f1 a: 1, b: "2", c: {} | ||
| 3976 | |||
| 3977 | f2 = ({a: a1 = 123, :b = 'abc'}, c = {}) -> | ||
| 3978 | print a1, b, c | ||
| 3979 | |||
| 3980 | arg1 = {a: 0} | ||
| 3981 | f2 arg1, arg2 | ||
| 3982 | ``` | ||
| 3983 | |||
| 3984 | </YueDisplay> | ||
| 3985 | |||
| 3986 | ## Ekspresi Return Berawalan | 2029 | ## Ekspresi Return Berawalan |
| 3987 | 2030 | ||
| 3988 | Saat bekerja dengan badan fungsi yang sangat bertingkat, menjaga keterbacaan dan konsistensi nilai return bisa terasa melelahkan. Untuk mengatasinya, YueScript memperkenalkan sintaks **Ekspresi Return Berawalan**. Bentuknya sebagai berikut: | 2031 | Saat bekerja dengan badan fungsi yang sangat bertingkat, menjaga keterbacaan dan konsistensi nilai return bisa terasa melelahkan. Untuk mengatasinya, YueScript memperkenalkan sintaks **Ekspresi Return Berawalan**. Bentuknya sebagai berikut: |
| @@ -3996,19 +2039,6 @@ findFirstEven = (list): nil -> | |||
| 3996 | return sub | 2039 | return sub |
| 3997 | ``` | 2040 | ``` |
| 3998 | 2041 | ||
| 3999 | <YueDisplay> | ||
| 4000 | |||
| 4001 | ```yue | ||
| 4002 | findFirstEven = (list): nil -> | ||
| 4003 | for item in *list | ||
| 4004 | if type(item) == "table" | ||
| 4005 | for sub in *item | ||
| 4006 | if sub % 2 == 0 | ||
| 4007 | return sub | ||
| 4008 | ``` | ||
| 4009 | |||
| 4010 | </YueDisplay> | ||
| 4011 | |||
| 4012 | Ini setara dengan: | 2042 | Ini setara dengan: |
| 4013 | 2043 | ||
| 4014 | ```yuescript | 2044 | ```yuescript |
| @@ -4021,20 +2051,6 @@ findFirstEven = (list) -> | |||
| 4021 | nil | 2051 | nil |
| 4022 | ``` | 2052 | ``` |
| 4023 | 2053 | ||
| 4024 | <YueDisplay> | ||
| 4025 | |||
| 4026 | ```yue | ||
| 4027 | findFirstEven = (list) -> | ||
| 4028 | for item in *list | ||
| 4029 | if type(item) == "table" | ||
| 4030 | for sub in *item | ||
| 4031 | if sub % 2 == 0 | ||
| 4032 | return sub | ||
| 4033 | nil | ||
| 4034 | ``` | ||
| 4035 | |||
| 4036 | </YueDisplay> | ||
| 4037 | |||
| 4038 | Satu-satunya perbedaan adalah Anda dapat memindahkan ekspresi return terakhir sebelum token `->` atau `=>` untuk menunjukkan nilai return implisit fungsi sebagai pernyataan terakhir. Dengan cara ini, bahkan pada fungsi dengan banyak loop bertingkat atau cabang kondisional, Anda tidak lagi perlu menulis ekspresi return di akhir badan fungsi, sehingga struktur logika menjadi lebih lurus dan mudah diikuti. | 2054 | Satu-satunya perbedaan adalah Anda dapat memindahkan ekspresi return terakhir sebelum token `->` atau `=>` untuk menunjukkan nilai return implisit fungsi sebagai pernyataan terakhir. Dengan cara ini, bahkan pada fungsi dengan banyak loop bertingkat atau cabang kondisional, Anda tidak lagi perlu menulis ekspresi return di akhir badan fungsi, sehingga struktur logika menjadi lebih lurus dan mudah diikuti. |
| 4039 | 2055 | ||
| 4040 | ## Varargs Bernama | 2056 | ## Varargs Bernama |
| @@ -4063,32 +2079,6 @@ process = (...args) -> | |||
| 4063 | process 1, nil, 3, nil, 5 | 2079 | process 1, nil, 3, nil, 5 |
| 4064 | ``` | 2080 | ``` |
| 4065 | 2081 | ||
| 4066 | <YueDisplay> | ||
| 4067 | |||
| 4068 | ```yue | ||
| 4069 | f = (...t) -> | ||
| 4070 | print "argument count:", t.n | ||
| 4071 | print "table length:", #t | ||
| 4072 | for i = 1, t.n | ||
| 4073 | print t[i] | ||
| 4074 | |||
| 4075 | f 1, 2, 3 | ||
| 4076 | f "a", "b", "c", "d" | ||
| 4077 | f! | ||
| 4078 | |||
| 4079 | -- Menangani kasus dengan nilai nil | ||
| 4080 | process = (...args) -> | ||
| 4081 | sum = 0 | ||
| 4082 | for i = 1, args.n | ||
| 4083 | if args[i] != nil and type(args[i]) == "number" | ||
| 4084 | sum += args[i] | ||
| 4085 | sum | ||
| 4086 | |||
| 4087 | process 1, nil, 3, nil, 5 | ||
| 4088 | ``` | ||
| 4089 | |||
| 4090 | </YueDisplay> | ||
| 4091 | |||
| 4092 | # Spasi Kosong | 2082 | # Spasi Kosong |
| 4093 | 2083 | ||
| 4094 | YueScript adalah bahasa yang peka terhadap spasi. Anda harus menulis beberapa blok kode dengan indentasi yang sama menggunakan spasi **' '** atau tab **'\t'** seperti badan fungsi, daftar nilai, dan beberapa blok kontrol. Ekspresi yang mengandung spasi berbeda dapat bermakna berbeda. Tab diperlakukan seperti 4 spasi, tetapi sebaiknya jangan mencampur penggunaan spasi dan tab. | 2084 | YueScript adalah bahasa yang peka terhadap spasi. Anda harus menulis beberapa blok kode dengan indentasi yang sama menggunakan spasi **' '** atau tab **'\t'** seperti badan fungsi, daftar nilai, dan beberapa blok kontrol. Ekspresi yang mengandung spasi berbeda dapat bermakna berbeda. Tab diperlakukan seperti 4 spasi, tetapi sebaiknya jangan mencampur penggunaan spasi dan tab. |
| @@ -4101,14 +2091,6 @@ Sebuah pernyataan biasanya berakhir pada pergantian baris. Anda juga bisa memaka | |||
| 4101 | a = 1; b = 2; print a + b | 2091 | a = 1; b = 2; print a + b |
| 4102 | ``` | 2092 | ``` |
| 4103 | 2093 | ||
| 4104 | <YueDisplay> | ||
| 4105 | |||
| 4106 | ```yue | ||
| 4107 | a = 1; b = 2; print a + b | ||
| 4108 | ``` | ||
| 4109 | |||
| 4110 | </YueDisplay> | ||
| 4111 | |||
| 4112 | ## Rantai Multibaris | 2094 | ## Rantai Multibaris |
| 4113 | 2095 | ||
| 4114 | Anda bisa menulis pemanggilan fungsi berantai multi-baris dengan indentasi yang sama. | 2096 | Anda bisa menulis pemanggilan fungsi berantai multi-baris dengan indentasi yang sama. |
| @@ -4122,19 +2104,6 @@ Rx.Observable | |||
| 4122 | \subscribe print | 2104 | \subscribe print |
| 4123 | ``` | 2105 | ``` |
| 4124 | 2106 | ||
| 4125 | <YueDisplay> | ||
| 4126 | |||
| 4127 | ```yue | ||
| 4128 | Rx.Observable | ||
| 4129 | .fromRange 1, 8 | ||
| 4130 | \filter (x) -> x % 2 == 0 | ||
| 4131 | \concat Rx.Observable.of 'who do we appreciate' | ||
| 4132 | \map (value) -> value .. '!' | ||
| 4133 | \subscribe print | ||
| 4134 | ``` | ||
| 4135 | |||
| 4136 | </YueDisplay> | ||
| 4137 | |||
| 4138 | # Komentar | 2107 | # Komentar |
| 4139 | 2108 | ||
| 4140 | ```yuescript | 2109 | ```yuescript |
| @@ -4150,23 +2119,6 @@ Tidak masalah. | |||
| 4150 | func --[[port]] 3000, --[[ip]] "192.168.1.1" | 2119 | func --[[port]] 3000, --[[ip]] "192.168.1.1" |
| 4151 | ``` | 2120 | ``` |
| 4152 | 2121 | ||
| 4153 | <YueDisplay> | ||
| 4154 | |||
| 4155 | ```yue | ||
| 4156 | -- Saya adalah komentar | ||
| 4157 | |||
| 4158 | str = --[[ | ||
| 4159 | Ini komentar multi-baris. | ||
| 4160 | Tidak masalah. | ||
| 4161 | ]] strA \ -- komentar 1 | ||
| 4162 | .. strB \ -- komentar 2 | ||
| 4163 | .. strC | ||
| 4164 | |||
| 4165 | func --[[port]] 3000, --[[ip]] "192.168.1.1" | ||
| 4166 | ``` | ||
| 4167 | |||
| 4168 | </YueDisplay> | ||
| 4169 | |||
| 4170 | # Atribut | 2122 | # Atribut |
| 4171 | 2123 | ||
| 4172 | Dukungan sintaks untuk atribut Lua 5.4. Anda juga masih bisa menggunakan deklarasi `const` dan `close` dan mendapatkan pemeriksaan konstanta serta callback berbatas-scope ketika menargetkan versi Lua di bawah 5.4. | 2124 | Dukungan sintaks untuk atribut Lua 5.4. Anda juga masih bisa menggunakan deklarasi `const` dan `close` dan mendapatkan pemeriksaan konstanta serta callback berbatas-scope ketika menargetkan versi Lua di bawah 5.4. |
| @@ -4176,15 +2128,6 @@ const a = 123 | |||
| 4176 | close _ = <close>: -> print "Out of scope." | 2128 | close _ = <close>: -> print "Out of scope." |
| 4177 | ``` | 2129 | ``` |
| 4178 | 2130 | ||
| 4179 | <YueDisplay> | ||
| 4180 | |||
| 4181 | ```yue | ||
| 4182 | const a = 123 | ||
| 4183 | close _ = <close>: -> print "Out of scope." | ||
| 4184 | ``` | ||
| 4185 | |||
| 4186 | </YueDisplay> | ||
| 4187 | |||
| 4188 | Anda dapat melakukan destrukturisasi dengan variabel yang diberi atribut sebagai konstanta. | 2131 | Anda dapat melakukan destrukturisasi dengan variabel yang diberi atribut sebagai konstanta. |
| 4189 | 2132 | ||
| 4190 | ```yuescript | 2133 | ```yuescript |
| @@ -4192,15 +2135,6 @@ const {:a, :b, c, d} = tb | |||
| 4192 | -- a = 1 | 2135 | -- a = 1 |
| 4193 | ``` | 2136 | ``` |
| 4194 | 2137 | ||
| 4195 | <YueDisplay> | ||
| 4196 | |||
| 4197 | ```yue | ||
| 4198 | const {:a, :b, c, d} = tb | ||
| 4199 | -- a = 1 | ||
| 4200 | ``` | ||
| 4201 | |||
| 4202 | </YueDisplay> | ||
| 4203 | |||
| 4204 | Anda juga bisa mendeklarasikan variabel global sebagai `const`. | 2138 | Anda juga bisa mendeklarasikan variabel global sebagai `const`. |
| 4205 | 2139 | ||
| 4206 | ```yuescript | 2140 | ```yuescript |
| @@ -4208,15 +2142,6 @@ global const Constant = 123 | |||
| 4208 | -- Constant = 1 | 2142 | -- Constant = 1 |
| 4209 | ``` | 2143 | ``` |
| 4210 | 2144 | ||
| 4211 | <YueDisplay> | ||
| 4212 | |||
| 4213 | ```yue | ||
| 4214 | global const Constant = 123 | ||
| 4215 | -- Constant = 1 | ||
| 4216 | ``` | ||
| 4217 | |||
| 4218 | </YueDisplay> | ||
| 4219 | |||
| 4220 | # Operator | 2145 | # Operator |
| 4221 | 2146 | ||
| 4222 | Semua operator biner dan unari Lua tersedia. Selain itu **!=** adalah alias untuk **~=**, dan **\\** atau **::** bisa digunakan untuk menulis pemanggilan fungsi berantai seperti `tb\func!` atau `tb::func!`. YueScript juga menawarkan beberapa operator khusus lain untuk menulis kode yang lebih ekspresif. | 2147 | Semua operator biner dan unari Lua tersedia. Selain itu **!=** adalah alias untuk **~=**, dan **\\** atau **::** bisa digunakan untuk menulis pemanggilan fungsi berantai seperti `tb\func!` atau `tb::func!`. YueScript juga menawarkan beberapa operator khusus lain untuk menulis kode yang lebih ekspresif. |
| @@ -4226,15 +2151,6 @@ tb\func! if tb ~= nil | |||
| 4226 | tb::func! if tb != nil | 2151 | tb::func! if tb != nil |
| 4227 | ``` | 2152 | ``` |
| 4228 | 2153 | ||
| 4229 | <YueDisplay> | ||
| 4230 | |||
| 4231 | ```yue | ||
| 4232 | tb\func! if tb ~= nil | ||
| 4233 | tb::func! if tb != nil | ||
| 4234 | ``` | ||
| 4235 | |||
| 4236 | </YueDisplay> | ||
| 4237 | |||
| 4238 | ## Perbandingan Berantai | 2154 | ## Perbandingan Berantai |
| 4239 | 2155 | ||
| 4240 | Perbandingan bisa dirantai secara bebas: | 2156 | Perbandingan bisa dirantai secara bebas: |
| @@ -4248,19 +2164,6 @@ print 1 <= a <= 10 | |||
| 4248 | -- output: true | 2164 | -- output: true |
| 4249 | ``` | 2165 | ``` |
| 4250 | 2166 | ||
| 4251 | <YueDisplay> | ||
| 4252 | |||
| 4253 | ```yue | ||
| 4254 | print 1 < 2 <= 2 < 3 == 3 > 2 >= 1 == 1 < 3 != 5 | ||
| 4255 | -- output: true | ||
| 4256 | |||
| 4257 | a = 5 | ||
| 4258 | print 1 <= a <= 10 | ||
| 4259 | -- output: true | ||
| 4260 | ``` | ||
| 4261 | |||
| 4262 | </YueDisplay> | ||
| 4263 | |||
| 4264 | Perhatikan perilaku evaluasi perbandingan berantai: | 2167 | Perhatikan perilaku evaluasi perbandingan berantai: |
| 4265 | 2168 | ||
| 4266 | ```yuescript | 2169 | ```yuescript |
| @@ -4286,33 +2189,6 @@ print v(1) > v(2) <= v(3) | |||
| 4286 | ]] | 2189 | ]] |
| 4287 | ``` | 2190 | ``` |
| 4288 | 2191 | ||
| 4289 | <YueDisplay> | ||
| 4290 | |||
| 4291 | ```yue | ||
| 4292 | v = (x) -> | ||
| 4293 | print x | ||
| 4294 | x | ||
| 4295 | |||
| 4296 | print v(1) < v(2) <= v(3) | ||
| 4297 | --[[ | ||
| 4298 | output: | ||
| 4299 | 2 | ||
| 4300 | 1 | ||
| 4301 | 3 | ||
| 4302 | true | ||
| 4303 | ]] | ||
| 4304 | |||
| 4305 | print v(1) > v(2) <= v(3) | ||
| 4306 | --[[ | ||
| 4307 | output: | ||
| 4308 | 2 | ||
| 4309 | 1 | ||
| 4310 | false | ||
| 4311 | ]] | ||
| 4312 | ``` | ||
| 4313 | |||
| 4314 | </YueDisplay> | ||
| 4315 | |||
| 4316 | Ekspresi tengah hanya dievaluasi sekali, bukan dua kali seperti jika ekspresi ditulis sebagai `v(1) < v(2) and v(2) <= v(3)`. Namun, urutan evaluasi pada perbandingan berantai tidak didefinisikan. Sangat disarankan untuk tidak menggunakan ekspresi dengan efek samping (seperti `print`) di perbandingan berantai. Jika efek samping diperlukan, operator short-circuit `and` sebaiknya digunakan secara eksplisit. | 2192 | Ekspresi tengah hanya dievaluasi sekali, bukan dua kali seperti jika ekspresi ditulis sebagai `v(1) < v(2) and v(2) <= v(3)`. Namun, urutan evaluasi pada perbandingan berantai tidak didefinisikan. Sangat disarankan untuk tidak menggunakan ekspresi dengan efek samping (seperti `print`) di perbandingan berantai. Jika efek samping diperlukan, operator short-circuit `and` sebaiknya digunakan secara eksplisit. |
| 4317 | 2193 | ||
| 4318 | ## Menambahkan ke Tabel | 2194 | ## Menambahkan ke Tabel |
| @@ -4324,15 +2200,6 @@ tab = [] | |||
| 4324 | tab[] = "Value" | 2200 | tab[] = "Value" |
| 4325 | ``` | 2201 | ``` |
| 4326 | 2202 | ||
| 4327 | <YueDisplay> | ||
| 4328 | |||
| 4329 | ```yue | ||
| 4330 | tab = [] | ||
| 4331 | tab[] = "Value" | ||
| 4332 | ``` | ||
| 4333 | |||
| 4334 | </YueDisplay> | ||
| 4335 | |||
| 4336 | Anda juga bisa memakai operator spread `...` untuk menambahkan semua elemen dari satu list ke list lain: | 2203 | Anda juga bisa memakai operator spread `...` untuk menambahkan semua elemen dari satu list ke list lain: |
| 4337 | 2204 | ||
| 4338 | ```yuescript | 2205 | ```yuescript |
| @@ -4342,17 +2209,6 @@ tbA[] = ...tbB | |||
| 4342 | -- tbA sekarang [1, 2, 3, 4, 5, 6] | 2209 | -- tbA sekarang [1, 2, 3, 4, 5, 6] |
| 4343 | ``` | 2210 | ``` |
| 4344 | 2211 | ||
| 4345 | <YueDisplay> | ||
| 4346 | |||
| 4347 | ```yue | ||
| 4348 | tbA = [1, 2, 3] | ||
| 4349 | tbB = [4, 5, 6] | ||
| 4350 | tbA[] = ...tbB | ||
| 4351 | -- tbA sekarang [1, 2, 3, 4, 5, 6] | ||
| 4352 | ``` | ||
| 4353 | |||
| 4354 | </YueDisplay> | ||
| 4355 | |||
| 4356 | ## Penyebaran Tabel | 2212 | ## Penyebaran Tabel |
| 4357 | 2213 | ||
| 4358 | Anda bisa menggabungkan tabel array atau tabel hash menggunakan operator spread `...` sebelum ekspresi di literal tabel. | 2214 | Anda bisa menggabungkan tabel array atau tabel hash menggunakan operator spread `...` sebelum ekspresi di literal tabel. |
| @@ -4374,27 +2230,6 @@ b = {4, 5, y: 1} | |||
| 4374 | merge = {...a, ...b} | 2230 | merge = {...a, ...b} |
| 4375 | ``` | 2231 | ``` |
| 4376 | 2232 | ||
| 4377 | <YueDisplay> | ||
| 4378 | |||
| 4379 | ```yue | ||
| 4380 | parts = | ||
| 4381 | * "shoulders" | ||
| 4382 | * "knees" | ||
| 4383 | lyrics = | ||
| 4384 | * "head" | ||
| 4385 | * ...parts | ||
| 4386 | * "and" | ||
| 4387 | * "toes" | ||
| 4388 | |||
| 4389 | copy = {...other} | ||
| 4390 | |||
| 4391 | a = {1, 2, 3, x: 1} | ||
| 4392 | b = {4, 5, y: 1} | ||
| 4393 | merge = {...a, ...b} | ||
| 4394 | ``` | ||
| 4395 | |||
| 4396 | </YueDisplay> | ||
| 4397 | |||
| 4398 | ## Indeks Balik Tabel | 2233 | ## Indeks Balik Tabel |
| 4399 | 2234 | ||
| 4400 | Anda dapat menggunakan operator **#** untuk mendapatkan elemen terakhir dari tabel. | 2235 | Anda dapat menggunakan operator **#** untuk mendapatkan elemen terakhir dari tabel. |
| @@ -4405,16 +2240,6 @@ second_last = data.items[#-1] | |||
| 4405 | data.items[#] = 1 | 2240 | data.items[#] = 1 |
| 4406 | ``` | 2241 | ``` |
| 4407 | 2242 | ||
| 4408 | <YueDisplay> | ||
| 4409 | |||
| 4410 | ```yue | ||
| 4411 | last = data.items[#] | ||
| 4412 | second_last = data.items[#-1] | ||
| 4413 | data.items[#] = 1 | ||
| 4414 | ``` | ||
| 4415 | |||
| 4416 | </YueDisplay> | ||
| 4417 | |||
| 4418 | ## Metatable | 2243 | ## Metatable |
| 4419 | 2244 | ||
| 4420 | Operator **<>** dapat digunakan sebagai pintasan untuk manipulasi metatable. | 2245 | Operator **<>** dapat digunakan sebagai pintasan untuk manipulasi metatable. |
| @@ -4439,26 +2264,6 @@ print d.value | |||
| 4439 | close _ = <close>: -> print "out of scope" | 2264 | close _ = <close>: -> print "out of scope" |
| 4440 | ``` | 2265 | ``` |
| 4441 | 2266 | ||
| 4442 | <YueDisplay> | ||
| 4443 | |||
| 4444 | ```yue | ||
| 4445 | mt = {} | ||
| 4446 | add = (right) => <>: mt, value: @value + right.value | ||
| 4447 | mt.__add = add | ||
| 4448 | |||
| 4449 | a = <>: mt, value: 1 | ||
| 4450 | -- set field dengan variabel bernama sama | ||
| 4451 | b = :<add>, value: 2 | ||
| 4452 | c = <add>: mt.__add, value: 3 | ||
| 4453 | |||
| 4454 | d = a + b + c | ||
| 4455 | print d.value | ||
| 4456 | |||
| 4457 | close _ = <close>: -> print "out of scope" | ||
| 4458 | ``` | ||
| 4459 | |||
| 4460 | </YueDisplay> | ||
| 4461 | |||
| 4462 | ### Mengakses Metatable | 2267 | ### Mengakses Metatable |
| 4463 | 2268 | ||
| 4464 | Akses metatable dengan **<>**, nama metamethod yang dikelilingi **<>**, atau menulis ekspresi di dalam **<>**. | 2269 | Akses metatable dengan **<>**, nama metamethod yang dikelilingi **<>**, atau menulis ekspresi di dalam **<>**. |
| @@ -4473,19 +2278,6 @@ tb.<> = __index: {item: "hello"} | |||
| 4473 | print tb.item | 2278 | print tb.item |
| 4474 | ``` | 2279 | ``` |
| 4475 | 2280 | ||
| 4476 | <YueDisplay> | ||
| 4477 | |||
| 4478 | ```yue | ||
| 4479 | -- dibuat dengan metatable yang berisi field "value" | ||
| 4480 | tb = <"value">: 123 | ||
| 4481 | tb.<index> = tb.<> | ||
| 4482 | print tb.value | ||
| 4483 | tb.<> = __index: {item: "hello"} | ||
| 4484 | print tb.item | ||
| 4485 | ``` | ||
| 4486 | |||
| 4487 | </YueDisplay> | ||
| 4488 | |||
| 4489 | ### Destrukturisasi Metatable | 2281 | ### Destrukturisasi Metatable |
| 4490 | 2282 | ||
| 4491 | Destrukturisasi metatable dengan kunci metamethod yang dikelilingi **<>**. | 2283 | Destrukturisasi metatable dengan kunci metamethod yang dikelilingi **<>**. |
| @@ -4495,15 +2287,6 @@ Destrukturisasi metatable dengan kunci metamethod yang dikelilingi **<>**. | |||
| 4495 | print item, new, close, getter | 2287 | print item, new, close, getter |
| 4496 | ``` | 2288 | ``` |
| 4497 | 2289 | ||
| 4498 | <YueDisplay> | ||
| 4499 | |||
| 4500 | ```yue | ||
| 4501 | {item, :new, :<close>, <index>: getter} = tb | ||
| 4502 | print item, new, close, getter | ||
| 4503 | ``` | ||
| 4504 | |||
| 4505 | </YueDisplay> | ||
| 4506 | |||
| 4507 | ## Keberadaan | 2290 | ## Keberadaan |
| 4508 | 2291 | ||
| 4509 | Operator **?** dapat digunakan dalam berbagai konteks untuk memeriksa keberadaan. | 2292 | Operator **?** dapat digunakan dalam berbagai konteks untuk memeriksa keberadaan. |
| @@ -4523,25 +2306,6 @@ with? io.open "test.txt", "w" | |||
| 4523 | \close! | 2306 | \close! |
| 4524 | ``` | 2307 | ``` |
| 4525 | 2308 | ||
| 4526 | <YueDisplay> | ||
| 4527 | |||
| 4528 | ```yue | ||
| 4529 | func?! | ||
| 4530 | print abc?["hello world"]?.xyz | ||
| 4531 | |||
| 4532 | x = tab?.value | ||
| 4533 | len = utf8?.len or string?.len or (o) -> #o | ||
| 4534 | |||
| 4535 | if print and x? | ||
| 4536 | print x | ||
| 4537 | |||
| 4538 | with? io.open "test.txt", "w" | ||
| 4539 | \write "hello" | ||
| 4540 | \close! | ||
| 4541 | ``` | ||
| 4542 | |||
| 4543 | </YueDisplay> | ||
| 4544 | |||
| 4545 | ## Piping | 2309 | ## Piping |
| 4546 | 2310 | ||
| 4547 | Sebagai ganti serangkaian pemanggilan fungsi bersarang, Anda bisa mengalirkan nilai dengan operator **|>**. | 2311 | Sebagai ganti serangkaian pemanggilan fungsi bersarang, Anda bisa mengalirkan nilai dengan operator **|>**. |
| @@ -4560,24 +2324,6 @@ readFile "example.txt" | |||
| 4560 | 2324 | ||
| 4561 | ``` | 2325 | ``` |
| 4562 | 2326 | ||
| 4563 | <YueDisplay> | ||
| 4564 | |||
| 4565 | ```yue | ||
| 4566 | "hello" |> print | ||
| 4567 | 1 |> print 2 -- sisipkan nilai pipe sebagai argumen pertama | ||
| 4568 | 2 |> print 1, _, 3 -- pipe dengan placeholder | ||
| 4569 | |||
| 4570 | -- ekspresi pipe multi-baris | ||
| 4571 | readFile "example.txt" | ||
| 4572 | |> extract language, {} | ||
| 4573 | |> parse language | ||
| 4574 | |> emit | ||
| 4575 | |> render | ||
| 4576 | |||
| 4577 | ``` | ||
| 4578 | |||
| 4579 | </YueDisplay> | ||
| 4580 | |||
| 4581 | ## Nil Coalescing | 2327 | ## Nil Coalescing |
| 4582 | 2328 | ||
| 4583 | Operator nil-coalescing **??** mengembalikan nilai dari operan kiri jika bukan **nil**; jika tidak, operator mengevaluasi operan kanan dan mengembalikan hasilnya. Operator **??** tidak mengevaluasi operan kanan jika operan kiri bernilai non-nil. | 2329 | Operator nil-coalescing **??** mengembalikan nilai dari operan kiri jika bukan **nil**; jika tidak, operator mengevaluasi operan kanan dan mengembalikan hasilnya. Operator **??** tidak mengevaluasi operan kanan jika operan kiri bernilai non-nil. |
| @@ -4590,17 +2336,6 @@ func a ?? {} | |||
| 4590 | a ??= false | 2336 | a ??= false |
| 4591 | ``` | 2337 | ``` |
| 4592 | 2338 | ||
| 4593 | <YueDisplay> | ||
| 4594 | |||
| 4595 | ```yue | ||
| 4596 | local a, b, c, d | ||
| 4597 | a = b ?? c ?? d | ||
| 4598 | func a ?? {} | ||
| 4599 | a ??= false | ||
| 4600 | ``` | ||
| 4601 | |||
| 4602 | </YueDisplay> | ||
| 4603 | |||
| 4604 | ## Objek Implisit | 2339 | ## Objek Implisit |
| 4605 | 2340 | ||
| 4606 | Anda dapat menulis daftar struktur implisit yang diawali simbol **\*** atau **-** di dalam blok tabel. Jika Anda membuat objek implisit, field objek harus berada pada indentasi yang sama. | 2341 | Anda dapat menulis daftar struktur implisit yang diawali simbol **\*** atau **-** di dalam blok tabel. Jika Anda membuat objek implisit, field objek harus berada pada indentasi yang sama. |
| @@ -4648,52 +2383,6 @@ tb = | |||
| 4648 | 2383 | ||
| 4649 | ``` | 2384 | ``` |
| 4650 | 2385 | ||
| 4651 | <YueDisplay> | ||
| 4652 | |||
| 4653 | ```yue | ||
| 4654 | -- assignment dengan objek implisit | ||
| 4655 | list = | ||
| 4656 | * 1 | ||
| 4657 | * 2 | ||
| 4658 | * 3 | ||
| 4659 | |||
| 4660 | -- pemanggilan fungsi dengan objek implisit | ||
| 4661 | func | ||
| 4662 | * 1 | ||
| 4663 | * 2 | ||
| 4664 | * 3 | ||
| 4665 | |||
| 4666 | -- return dengan objek implisit | ||
| 4667 | f = -> | ||
| 4668 | return | ||
| 4669 | * 1 | ||
| 4670 | * 2 | ||
| 4671 | * 3 | ||
| 4672 | |||
| 4673 | -- tabel dengan objek implisit | ||
| 4674 | tb = | ||
| 4675 | name: "abc" | ||
| 4676 | |||
| 4677 | values: | ||
| 4678 | - "a" | ||
| 4679 | - "b" | ||
| 4680 | - "c" | ||
| 4681 | |||
| 4682 | objects: | ||
| 4683 | - name: "a" | ||
| 4684 | value: 1 | ||
| 4685 | func: => @value + 1 | ||
| 4686 | tb: | ||
| 4687 | fieldA: 1 | ||
| 4688 | |||
| 4689 | - name: "b" | ||
| 4690 | value: 2 | ||
| 4691 | func: => @value + 2 | ||
| 4692 | tb: { } | ||
| 4693 | ``` | ||
| 4694 | |||
| 4695 | </YueDisplay> | ||
| 4696 | |||
| 4697 | # Literal | 2386 | # Literal |
| 4698 | 2387 | ||
| 4699 | Semua literal primitif di Lua dapat digunakan. Ini berlaku untuk angka, string, boolean, dan **nil**. | 2388 | Semua literal primitif di Lua dapat digunakan. Ini berlaku untuk angka, string, boolean, dan **nil**. |
| @@ -4709,19 +2398,6 @@ some_string = "Here is a string | |||
| 4709 | print "I am #{math.random! * 100}% sure." | 2398 | print "I am #{math.random! * 100}% sure." |
| 4710 | ``` | 2399 | ``` |
| 4711 | 2400 | ||
| 4712 | <YueDisplay> | ||
| 4713 | |||
| 4714 | ```yue | ||
| 4715 | some_string = "Here is a string | ||
| 4716 | that has a line break in it." | ||
| 4717 | |||
| 4718 | -- Anda dapat mencampur ekspresi ke dalam literal string dengan sintaks #{}. | ||
| 4719 | -- Interpolasi string hanya tersedia pada string dengan tanda kutip ganda. | ||
| 4720 | print "I am #{math.random! * 100}% sure." | ||
| 4721 | ``` | ||
| 4722 | |||
| 4723 | </YueDisplay> | ||
| 4724 | |||
| 4725 | ## Literal Angka | 2401 | ## Literal Angka |
| 4726 | 2402 | ||
| 4727 | Anda bisa menggunakan garis bawah pada literal angka untuk meningkatkan keterbacaan. | 2403 | Anda bisa menggunakan garis bawah pada literal angka untuk meningkatkan keterbacaan. |
| @@ -4732,16 +2408,6 @@ hex = 0xEF_BB_BF | |||
| 4732 | binary = 0B10011 | 2408 | binary = 0B10011 |
| 4733 | ``` | 2409 | ``` |
| 4734 | 2410 | ||
| 4735 | <YueDisplay> | ||
| 4736 | |||
| 4737 | ```yue | ||
| 4738 | integer = 1_000_000 | ||
| 4739 | hex = 0xEF_BB_BF | ||
| 4740 | binary = 0B10011 | ||
| 4741 | ``` | ||
| 4742 | |||
| 4743 | </YueDisplay> | ||
| 4744 | |||
| 4745 | ## String Multibaris YAML | 2411 | ## String Multibaris YAML |
| 4746 | 2412 | ||
| 4747 | Prefiks `|` memperkenalkan literal string multibaris bergaya YAML: | 2413 | Prefiks `|` memperkenalkan literal string multibaris bergaya YAML: |
| @@ -4754,18 +2420,6 @@ str = | | |||
| 4754 | - #{expr} | 2420 | - #{expr} |
| 4755 | ``` | 2421 | ``` |
| 4756 | 2422 | ||
| 4757 | <YueDisplay> | ||
| 4758 | |||
| 4759 | ```yue | ||
| 4760 | str = | | ||
| 4761 | key: value | ||
| 4762 | list: | ||
| 4763 | - item1 | ||
| 4764 | - #{expr} | ||
| 4765 | ``` | ||
| 4766 | |||
| 4767 | </YueDisplay> | ||
| 4768 | |||
| 4769 | Ini memungkinkan penulisan teks multibaris terstruktur dengan mudah. Semua pemisah baris dan indentasi dipertahankan relatif terhadap baris non-kosong pertama, dan ekspresi di dalam `#{...}` diinterpolasi otomatis sebagai `tostring(expr)`. | 2423 | Ini memungkinkan penulisan teks multibaris terstruktur dengan mudah. Semua pemisah baris dan indentasi dipertahankan relatif terhadap baris non-kosong pertama, dan ekspresi di dalam `#{...}` diinterpolasi otomatis sebagai `tostring(expr)`. |
| 4770 | 2424 | ||
| 4771 | String Multibaris YAML secara otomatis mendeteksi prefiks spasi awal yang sama (indentasi minimum di seluruh baris non-kosong) dan menghapusnya dari semua baris. Ini memudahkan untuk mengindentasi kode secara visual tanpa memengaruhi isi string yang dihasilkan. | 2425 | String Multibaris YAML secara otomatis mendeteksi prefiks spasi awal yang sama (indentasi minimum di seluruh baris non-kosong) dan menghapusnya dari semua baris. Ini memudahkan untuk mengindentasi kode secara visual tanpa memengaruhi isi string yang dihasilkan. |
| @@ -4778,18 +2432,6 @@ fn = -> | |||
| 4778 | return str | 2432 | return str |
| 4779 | ``` | 2433 | ``` |
| 4780 | 2434 | ||
| 4781 | <YueDisplay> | ||
| 4782 | |||
| 4783 | ```yue | ||
| 4784 | fn = -> | ||
| 4785 | str = | | ||
| 4786 | foo: | ||
| 4787 | bar: baz | ||
| 4788 | return str | ||
| 4789 | ``` | ||
| 4790 | |||
| 4791 | </YueDisplay> | ||
| 4792 | |||
| 4793 | Indentasi internal dipertahankan relatif terhadap prefiks umum yang dihapus, sehingga struktur bertingkat tetap rapi. | 2435 | Indentasi internal dipertahankan relatif terhadap prefiks umum yang dihapus, sehingga struktur bertingkat tetap rapi. |
| 4794 | 2436 | ||
| 4795 | Semua karakter khusus seperti tanda kutip (`"`) dan backslash (`\`) di dalam blok YAMLMultiline di-escape secara otomatis agar string Lua yang dihasilkan valid secara sintaks dan berperilaku sebagaimana mestinya. | 2437 | Semua karakter khusus seperti tanda kutip (`"`) dan backslash (`\`) di dalam blok YAMLMultiline di-escape secara otomatis agar string Lua yang dihasilkan valid secara sintaks dan berperilaku sebagaimana mestinya. |
| @@ -4800,16 +2442,6 @@ str = | | |||
| 4800 | note: 'He said: "#{Hello}!"' | 2442 | note: 'He said: "#{Hello}!"' |
| 4801 | ``` | 2443 | ``` |
| 4802 | 2444 | ||
| 4803 | <YueDisplay> | ||
| 4804 | |||
| 4805 | ```yue | ||
| 4806 | str = | | ||
| 4807 | path: "C:\Program Files\App" | ||
| 4808 | note: 'He said: "#{Hello}!"' | ||
| 4809 | ``` | ||
| 4810 | |||
| 4811 | </YueDisplay> | ||
| 4812 | |||
| 4813 | # Modul | 2445 | # Modul |
| 4814 | 2446 | ||
| 4815 | ## Import | 2447 | ## Import |
| @@ -4841,35 +2473,6 @@ do | |||
| 4841 | import "export" as {one, two, Something:{umm:{ch}}} | 2473 | import "export" as {one, two, Something:{umm:{ch}}} |
| 4842 | ``` | 2474 | ``` |
| 4843 | 2475 | ||
| 4844 | <YueDisplay> | ||
| 4845 | |||
| 4846 | ```yue | ||
| 4847 | -- digunakan sebagai destrukturisasi tabel | ||
| 4848 | do | ||
| 4849 | import insert, concat from table | ||
| 4850 | -- akan error saat meng-assign ke insert, concat | ||
| 4851 | import C, Ct, Cmt from require "lpeg" | ||
| 4852 | -- shortcut untuk require implisit | ||
| 4853 | import x, y, z from 'mymodule' | ||
| 4854 | -- import gaya Python | ||
| 4855 | from 'module' import a, b, c | ||
| 4856 | |||
| 4857 | -- shortcut untuk require modul | ||
| 4858 | do | ||
| 4859 | import 'module' | ||
| 4860 | import 'module_x' | ||
| 4861 | import "d-a-s-h-e-s" | ||
| 4862 | import "module.part" | ||
| 4863 | |||
| 4864 | -- require modul dengan aliasing atau destrukturisasi tabel | ||
| 4865 | do | ||
| 4866 | import "player" as PlayerModule | ||
| 4867 | import "lpeg" as :C, :Ct, :Cmt | ||
| 4868 | import "export" as {one, two, Something:{umm:{ch}}} | ||
| 4869 | ``` | ||
| 4870 | |||
| 4871 | </YueDisplay> | ||
| 4872 | |||
| 4873 | ## Import Global | 2476 | ## Import Global |
| 4874 | 2477 | ||
| 4875 | Anda dapat mengimpor global tertentu ke variabel local dengan `import`. Saat mengimpor rangkaian akses variabel global, field terakhir akan di-assign ke variabel local. | 2478 | Anda dapat mengimpor global tertentu ke variabel local dengan `import`. Saat mengimpor rangkaian akses variabel global, field terakhir akan di-assign ke variabel local. |
| @@ -4881,17 +2484,6 @@ do | |||
| 4881 | print concat ["a", tostring 1] | 2484 | print concat ["a", tostring 1] |
| 4882 | ``` | 2485 | ``` |
| 4883 | 2486 | ||
| 4884 | <YueDisplay> | ||
| 4885 | |||
| 4886 | ```yue | ||
| 4887 | do | ||
| 4888 | import tostring | ||
| 4889 | import table.concat | ||
| 4890 | print concat ["a", tostring 1] | ||
| 4891 | ``` | ||
| 4892 | |||
| 4893 | </YueDisplay> | ||
| 4894 | |||
| 4895 | ### Import Variabel Global Otomatis | 2487 | ### Import Variabel Global Otomatis |
| 4896 | 2488 | ||
| 4897 | Anda dapat menempatkan `import global` di awal blok untuk mengimpor secara otomatis semua nama yang belum dideklarasikan atau di-assign secara eksplisit di scope saat ini sebagai global. Import implisit ini diperlakukan sebagai local const yang mereferensikan global terkait pada posisi pernyataan tersebut. | 2489 | Anda dapat menempatkan `import global` di awal blok untuk mengimpor secara otomatis semua nama yang belum dideklarasikan atau di-assign secara eksplisit di scope saat ini sebagai global. Import implisit ini diperlakukan sebagai local const yang mereferensikan global terkait pada posisi pernyataan tersebut. |
| @@ -4913,25 +2505,6 @@ do | |||
| 4913 | FLAG = 123 | 2505 | FLAG = 123 |
| 4914 | ``` | 2506 | ``` |
| 4915 | 2507 | ||
| 4916 | <YueDisplay> | ||
| 4917 | |||
| 4918 | ```yue | ||
| 4919 | do | ||
| 4920 | import global | ||
| 4921 | print "hello" | ||
| 4922 | math.random 3 | ||
| 4923 | -- print = nil -- error: imported globals are const | ||
| 4924 | |||
| 4925 | do | ||
| 4926 | -- variabel global eksplisit tidak akan diimpor | ||
| 4927 | import global | ||
| 4928 | global FLAG | ||
| 4929 | print FLAG | ||
| 4930 | FLAG = 123 | ||
| 4931 | ``` | ||
| 4932 | |||
| 4933 | </YueDisplay> | ||
| 4934 | |||
| 4935 | ## Export | 2508 | ## Export |
| 4936 | 2509 | ||
| 4937 | Pernyataan `export` menawarkan cara ringkas untuk mendefinisikan modul. | 2510 | Pernyataan `export` menawarkan cara ringkas untuk mendefinisikan modul. |
| @@ -4956,26 +2529,6 @@ export class Something | |||
| 4956 | umm: "cool" | 2529 | umm: "cool" |
| 4957 | ``` | 2530 | ``` |
| 4958 | 2531 | ||
| 4959 | <YueDisplay> | ||
| 4960 | |||
| 4961 | ```yue | ||
| 4962 | export a, b, c = 1, 2, 3 | ||
| 4963 | export cool = "cat" | ||
| 4964 | |||
| 4965 | export What = if this | ||
| 4966 | "abc" | ||
| 4967 | else | ||
| 4968 | "def" | ||
| 4969 | |||
| 4970 | export y = -> | ||
| 4971 | hallo = 3434 | ||
| 4972 | |||
| 4973 | export class Something | ||
| 4974 | umm: "cool" | ||
| 4975 | ``` | ||
| 4976 | |||
| 4977 | </YueDisplay> | ||
| 4978 | |||
| 4979 | Melakukan export bernama dengan destrukturisasi. | 2532 | Melakukan export bernama dengan destrukturisasi. |
| 4980 | 2533 | ||
| 4981 | ```yuescript | 2534 | ```yuescript |
| @@ -4983,15 +2536,6 @@ export :loadstring, to_lua: tolua = yue | |||
| 4983 | export {itemA: {:fieldA = 'default'}} = tb | 2536 | export {itemA: {:fieldA = 'default'}} = tb |
| 4984 | ``` | 2537 | ``` |
| 4985 | 2538 | ||
| 4986 | <YueDisplay> | ||
| 4987 | |||
| 4988 | ```yue | ||
| 4989 | export :loadstring, to_lua: tolua = yue | ||
| 4990 | export {itemA: {:fieldA = 'default'}} = tb | ||
| 4991 | ``` | ||
| 4992 | |||
| 4993 | </YueDisplay> | ||
| 4994 | |||
| 4995 | Export item bernama dari modul tanpa membuat variabel local. | 2539 | Export item bernama dari modul tanpa membuat variabel local. |
| 4996 | 2540 | ||
| 4997 | ```yuescript | 2541 | ```yuescript |
| @@ -5000,16 +2544,6 @@ export.<index> = items | |||
| 5000 | export["a-b-c"] = 123 | 2544 | export["a-b-c"] = 123 |
| 5001 | ``` | 2545 | ``` |
| 5002 | 2546 | ||
| 5003 | <YueDisplay> | ||
| 5004 | |||
| 5005 | ```yue | ||
| 5006 | export.itemA = tb | ||
| 5007 | export.<index> = items | ||
| 5008 | export["a-b-c"] = 123 | ||
| 5009 | ``` | ||
| 5010 | |||
| 5011 | </YueDisplay> | ||
| 5012 | |||
| 5013 | ### Export Tanpa Nama | 2547 | ### Export Tanpa Nama |
| 5014 | 2548 | ||
| 5015 | Export tanpa nama akan menambahkan item target ke bagian array dari tabel export. | 2549 | Export tanpa nama akan menambahkan item target ke bagian array dari tabel export. |
| @@ -5027,23 +2561,6 @@ export with tmp | |||
| 5027 | j = 2000 | 2561 | j = 2000 |
| 5028 | ``` | 2562 | ``` |
| 5029 | 2563 | ||
| 5030 | <YueDisplay> | ||
| 5031 | |||
| 5032 | ```yue | ||
| 5033 | d, e, f = 3, 2, 1 | ||
| 5034 | export d, e, f | ||
| 5035 | |||
| 5036 | export if this | ||
| 5037 | 123 | ||
| 5038 | else | ||
| 5039 | 456 | ||
| 5040 | |||
| 5041 | export with tmp | ||
| 5042 | j = 2000 | ||
| 5043 | ``` | ||
| 5044 | |||
| 5045 | </YueDisplay> | ||
| 5046 | |||
| 5047 | ### Export Default | 2564 | ### Export Default |
| 5048 | 2565 | ||
| 5049 | Gunakan kata kunci **default** dalam pernyataan export untuk mengganti tabel export dengan apa pun. | 2566 | Gunakan kata kunci **default** dalam pernyataan export untuk mengganti tabel export dengan apa pun. |
| @@ -5054,16 +2571,6 @@ export default -> | |||
| 5054 | 123 | 2571 | 123 |
| 5055 | ``` | 2572 | ``` |
| 5056 | 2573 | ||
| 5057 | <YueDisplay> | ||
| 5058 | |||
| 5059 | ```yue | ||
| 5060 | export default -> | ||
| 5061 | print "hello" | ||
| 5062 | 123 | ||
| 5063 | ``` | ||
| 5064 | |||
| 5065 | </YueDisplay> | ||
| 5066 | |||
| 5067 | # Lisensi: MIT | 2574 | # Lisensi: MIT |
| 5068 | 2575 | ||
| 5069 | Copyright (c) 2017-2026 Li Jin <dragon-fly@qq.com> | 2576 | Copyright (c) 2017-2026 Li Jin <dragon-fly@qq.com> |
