[{"data":1,"prerenderedAt":300},["ShallowReactive",2],{"tag-labels":3,"site-header":4,"article-aturan-sintaks-pemrograman-id":72},{},{"featuredPost":5,"navigations":29},{"id":6,"title":7,"title_en":8,"slug":9,"excerpt":10,"excerpt_en":11,"has_translation":12,"published_at":13,"reading_time":14,"hidden_from_listing":15,"tags":16,"thumbnail_image":21,"og_image":22,"series":23,"authors":28},110,"Ketika Pilih Framework Cuma Biar Kelihatan Beda","When You Pick a Framework Just to Look Different","ketika-pilih-framework-cuma-biar-kelihatan-beda","Terakhir kali kamu milih framework atau library baru, itu karena masalahmu butuh alat itu, atau karena alatnya kedengaran keren dan belum banyak yang pakai? Pertanyaan ini nggak enak dijawab. Soalnya keputusan teknologi sering diambil dengan alasan yang nggak pernah ditulis di dokumen teknis mana pun.","The last time you chose a new framework or library, was it because your problem needed that tool, or because it sounded cool and few people around you were using it? That question is uncomfortable. Technology decisions are often made for reasons that never appear in any technical document.",true,"2026-10-06T15:25:21.000Z",5,false,[17,18,19,20],"karier","framework","opini","pengalaman",null,"\u002Fog\u002Fketika-pilih-framework-cuma-biar-kelihatan-beda.png",{"id":24,"title":25,"title_en":26,"slug":27},9,"Artikel","Articles","all",[],[30,46,67],{"collection":31,"item":32},"series",{"__typename":31,"title":25,"title_en":26,"slug":27,"children_series":33},[34,38,42],{"title":35,"title_en":36,"slug":37},"Kecerdasan Artifisial","Artificial Intelligence","kecerdasan-artifisial",{"title":39,"title_en":40,"slug":41},"Konsep Dasar Pemrograman","Programming Fundamentals","konsep-dasar-pemrograman",{"title":43,"title_en":44,"slug":45},"Algoritma dan Struktur Data","Algorithms and Data Structures","algoritma-struktur-data",{"collection":31,"item":47},{"__typename":31,"title":48,"title_en":48,"slug":49,"children_series":50},"Tutorial","tutorial",[51,55,59,63],{"title":52,"title_en":53,"slug":54},"Belajar Python","Learning Python","belajar-python",{"title":56,"title_en":57,"slug":58},"Belajar Golang","Learning Go","belajar-golang",{"title":60,"title_en":61,"slug":62},"Belajar Java","Learning Java","belajar-java",{"title":64,"title_en":65,"slug":66},"Belajar Pascal","Learning Pascal","belajar-pascal",{"collection":31,"item":68},{"__typename":31,"title":69,"title_en":69,"slug":70,"children_series":71},"Lab","lab",[],{"article":73,"renderedBody":182,"renderedTakeaway":183,"latestArticles":184,"toc":281},{"id":74,"title":75,"title_en":76,"slug":77,"excerpt":78,"excerpt_en":79,"has_translation":12,"published_at":80,"reading_time":14,"hidden_from_listing":15,"tags":81,"thumbnail_image":21,"og_image":86,"series":87,"authors":174,"body_locale":177,"available_locales":178,"body":180,"takeway":181,"prerequisite":21},119,"Aturan Sintaks: Satu Titik Koma Bikin Program Nggak Jalan","Syntax Rules: One Missing Semicolon Stops the Program","aturan-sintaks-pemrograman","Baru nulis beberapa baris, programnya udah nolak jalan? Seringnya bukan logikanya yang salah, cuma satu karakter yang kurang atau salah tempat.","You wrote a few lines and the program already refuses to run? Most of the time the logic is fine, and one character is missing or in the wrong place.","2026-10-11T23:00:15.000Z",[82,83,84,85],"syntax","dasar","konsep","python","\u002Fog\u002Faturan-sintaks-pemrograman.png",{"id":88,"title":39,"title_en":40,"slug":41,"description":89,"description_en":90,"articles":91,"children_series":167,"parent_series":168},12,"Mengenal konsep dasar pemrograman. Pada seri ini kita akan membahas tentang bagaimana cara berkutat dengan variabel, mengatur alur program dengan struktur kontrol, me-reuse kode dengan fungsi, dan aturan sintaks pada bahasa pemrograman. Konsep-konsep ini pastinya akan sangat berguna ketika kita mulai mengkoding ceria.","The concepts every language shares: variables, control flow, functions, and syntax. Learn them once and the next language is mostly vocabulary.",[92,105,118,132,144,158],{"id":93,"title":39,"title_en":94,"slug":41,"excerpt":95,"excerpt_en":96,"has_translation":12,"published_at":97,"reading_time":98,"hidden_from_listing":15,"tags":99,"thumbnail_image":21,"og_image":102,"series":103,"authors":104},6,"Programming Fundamentals: Four Concepts Behind Every Program","Inti dari pemrograman adalah memberi instruksi alias menyuruh komputer untuk melakukan sesuatu yang kita inginkan.","The core of programming is giving instructions: telling the computer to do what you want it to do, in a language that has rules of its own.","2026-06-14T16:51:40.694Z",7,[100,101],"intro","basic","\u002Fog\u002Fkonsep-dasar-pemrograman.png",{"id":88,"title":39,"title_en":40,"slug":41},[],{"id":98,"title":106,"title_en":107,"slug":108,"excerpt":109,"excerpt_en":110,"has_translation":12,"published_at":111,"reading_time":14,"hidden_from_listing":15,"tags":112,"thumbnail_image":21,"og_image":115,"series":116,"authors":117},"Konsep Variabel dan Tipe Data pada Pemrograman","Variables and Data Types in Programming","variable-dan-tipe-data","Variabel itu ibarat “tokoh utama” di sebuah program. Nggak peduli bahasa pemrograman apapun, pasti semua punya konsep variabel.","A variable is the main character of a program, and every language has one. The type is what decides which data fits inside.","2026-06-14T16:51:40.710Z",[101,100,113,114],"variable","types","\u002Fog\u002Fvariable-dan-tipe-data.png",{"id":88,"title":39,"title_en":40,"slug":41},[],{"id":119,"title":120,"title_en":121,"slug":122,"excerpt":123,"excerpt_en":124,"has_translation":12,"published_at":125,"reading_time":126,"hidden_from_listing":15,"tags":127,"thumbnail_image":21,"og_image":129,"series":130,"authors":131},8,"Struktur Kontrol Kondisi (If-Else dan Switch-Case), Apa Bedanya?","If-Else vs Switch-Case: What's the Real Difference?","struktur-kontrol-kondisi","Sering bingung kapan harus pakai if-else dan kapan switch-case? Kenapa switch-case kadang bisa lebih ngebut? Yuk, bongkar rahasianya di sini!","Not sure when to reach for if-else and when switch-case earns its place? Here is why switch-case sometimes runs faster.","2026-06-14T17:23:03.446Z",2,[101,100,128],"conditions","\u002Fog\u002Fstruktur-kontrol-kondisi.png",{"id":88,"title":39,"title_en":40,"slug":41},[],{"id":24,"title":133,"title_en":134,"slug":135,"excerpt":136,"excerpt_en":137,"has_translation":12,"published_at":138,"reading_time":126,"hidden_from_listing":15,"tags":139,"thumbnail_image":21,"og_image":141,"series":142,"authors":143},"Struktur Kontrol Perulangan (For, While, Do-While), Kapan Harus Dipakai?","Loop Control Structures: When to Use For, While, and Do-While","struktur-kontrol-perulangan","Pernah ngerasa capek nulis baris kode yang sama berulang kali? Gimana caranya nyuruh komputer buat ngerjain itu secara otomatis?","Tired of writing the same lines of code over and over? Here is how you make the computer repeat the work for you, and which loop to pick.","2026-06-14T17:23:03.479Z",[101,100,140],"looping","\u002Fog\u002Fstruktur-kontrol-perulangan.png",{"id":88,"title":39,"title_en":40,"slug":41},[],{"id":145,"title":146,"title_en":147,"slug":148,"excerpt":149,"excerpt_en":150,"has_translation":12,"published_at":151,"reading_time":152,"hidden_from_listing":15,"tags":153,"thumbnail_image":21,"og_image":155,"series":156,"authors":157},10,"Fungsi dan Prosedur dalam Pemrograman, Apa Bedanya?","Functions vs Procedures: What's the Difference?","fungsi-dan-prosedur","Pernah bingung kapan harus pakai fungsi dan kapan pakai prosedur pas lagi ngoding? Yuk, bongkar rahasia dan bedanya di sini biar kode kamu makin rapi!","Ever wondered when to reach for a function and when a procedure does the job while coding? Here is the split that keeps your code tidy.","2026-06-14T17:23:03.636Z",3,[101,100,154],"functions","\u002Fog\u002Ffungsi-dan-prosedur.png",{"id":88,"title":39,"title_en":40,"slug":41},[],{"id":74,"title":75,"title_en":76,"slug":77,"excerpt":78,"excerpt_en":79,"has_translation":12,"published_at":80,"reading_time":14,"hidden_from_listing":15,"tags":81,"thumbnail_image":21,"og_image":86,"series":159,"authors":160},{"id":88,"title":39,"title_en":40,"slug":41},[161],{"authors_id":162},{"id":163,"name":164,"slug":165,"role":166,"profile_picture":21},1,"Daffa Izzuddin","izzudd","Writer",[],{"id":24,"title":25,"title_en":26,"slug":27,"parent_series":21,"children_series":169},[170,171,172],{"id":119,"title":35,"title_en":36,"slug":37,"cover_image":21},{"id":88,"title":39,"title_en":40,"slug":41,"cover_image":21},{"id":173,"title":43,"title_en":44,"slug":45,"cover_image":21},15,[175],{"authors_id":176},{"id":163,"name":164,"slug":165,"role":166,"profile_picture":21},"id",[179,177],"en","Kalau kamu baru mulai belajar ngoding, pemandangan pertama yang mungkin kamu temui bukan program yang jalan mulus, melainkan layar penuh teks merah. Komputer sebenernya nggak marah; dia cuma nggak paham apa yang kamu tulis. Di situlah *syntax* alias aturan sintaks memegang peran.\n\nBagian ini sering bikin pemula frustrasi, padahal masalahnya **bukan** soal logika. Seringnya cuma ada satu karakter yang kurang atau salah tempat. Yuk, kita bongkar aturan *syntax* satu-satu. Tiap aturan bakal kita temani dengan kode yang benar-benar dijalankan.\n\n## Grammar dulu, makna kemudian\n\n*Syntax* itu aturan tata bahasa sebuah bahasa pemrograman: bentuk dan urutan tulisan yang dianggap sah. Kalau kamu sudah tahu istilah ini, lewati saja bagian ini. Lawannya adalah *semantics*, yaitu makna dari tulisan yang sudah sah tadi. Dua hal ini beda, dan bedanya penting buat dipahami lebih dulu.\n\nSederhananya, kode kamu dibaca lewat dua tahap. Pertama *tokenizing*: teks dipotong jadi satuan bermakna seperti nama, angka, dan simbol. Kedua *parsing*: satuan-satuan itu dirangkai sesuai *grammar* bahasanya. Begitu *grammar*-nya dilanggar, prosesnya berhenti di situ dan keluar yang namanya *syntax error*.\n\n> Aturan *syntax* cuma soal bentuk. Program yang bentuknya sudah sah belum tentu melakukan apa yang kamu mau; itu urusan *semantics*.\n\nContoh paling gampang buat ngeliat *grammar* bekerja nih soal penutup *statement*, dan itu yang jadi bahasan berikutnya.\n\n## Titik koma: satu karakter yang bikin kompilator ngamuk\n\nBanyak bahasa menandai akhir sebuah *statement* dengan titik koma. C, C++, Java, dan JavaScript termasuk keluarga ini. Kode berikut niatnya mengalikan harga dengan jumlah:\n\n```c\n#include \u003Cstdio.h>\n\nint main(void) {\n    int harga = 20000;\n    int jumlah = 3;\n    int total = harga * jumlah;\n    printf(\"total bayar: %d\\n\", total);\n    return 0;\n}\n```\n\nJalanin lewat `gcc`, dan hasilnya:\n\n```text\ntotal bayar: 60000\n```\n\nSekarang hapus satu titik koma di baris `int total = harga * jumlah`. Proses *compile* langsung berhenti dan *compiler*-nya nunjuk lokasi masalahnya:\n\n```text\nerror: expected ',' or ';' before 'printf'\n```\n\nPerhatikan: yang dikeluhkan **bukan** baris yang kehilangan titik koma, melainkan baris sesudahnya. *Compiler* baru sadar ada yang aneh ketika sampai ke `printf` dan baris sebelumnya belum ditutup. Kalau kamu heran kok *error*-nya nunjuk baris yang kelihatan udah benar, ingat kebiasaan ini.\n\nPython jalan dengan cara lain. Di sana akhir baris alias *newline* sudah cukup jadi penanda, jadi titik koma nggak wajib. Yang jadi penentu struktur malah indentasi. Itulah kenapa topik ini butuh bagian sendiri.\n\n## Kurung kurawal atau indentasi?\n\nDi C, Java, dan JavaScript, blok kode dibatasi kurung kurawal `{ }`. Mau kamu tulis menjorok ke dalam atau rata kiri, selama kurungnya seimbang, programnya tetap sah. Python justru kebalikannya: indentasi bukan sekadar hiasan, tapi bagian dari *syntax* yang nggak bisa ditawar.\n\n```python\ntotal_belanja = 150000\n\nif total_belanja > 100000:\n    print(\"dapat diskon 10%\")\n    print(\"total bayar:\", int(total_belanja * 0.9))\nprint(\"terima kasih sudah berbelanja\")\n```\n\nDijalankan, hasilnya:\n\n```text\ndapat diskon 10%\ntotal bayar: 135000\nterima kasih sudah berbelanja\n```\n\nSekarang hapus indentasi di baris `print(\"dapat diskon 10%\")`:\n\n```text\nIndentationError: expected an indented block after 'if' statement on line 3\n```\n\nAda versi yang lebih berbahaya lagi: indentasinya sah, tapi salah tempat.\n\n```python\ntotal_belanja = 50000\n\nif total_belanja > 100000:\n    print(\"dapat diskon 10%\")\n    print(\"terima kasih sudah berbelanja\")\n```\n\nKalau dijalankan, layarnya kosong 😅. Jumlah *statement*-nya sama dengan versi benar, tapi baris `print(\"terima kasih sudah berbelanja\")` ikut masuk ke dalam blok `if`. Artinya kalimat itu cuma dicetak kalau dapat diskon, padahal niatnya selalu tercetak. Tuh, bentuk *error* yang paling licin: tanpa pesan kesalahan sama sekali, tapi artinya sudah bergeser.\n\nJadi, indentasi di Python itu *syntax*, bukan gaya penulisan. Urusan bentuk sudah beres; sekarang kita masuk ke soal penamaan, dan di sini huruf besar-kecil ikut bermain.\n\n## Huruf besar-kecil dan nama yang boleh dipakai\n\nSebagian bahasa *case-sensitive* alias membedakan huruf besar dan kecil. Python adalah salah satunya:\n\n```python\nTotal = 10\nprint(total)\n```\n\nOutput:\n\n```text\nNameError: name 'total' is not defined. Did you mean: 'Total'?\n```\n\n`Total` dan `total` dianggap dua wadah yang **beda**. Di dalam satu program, kamu bebas memakai keduanya, dan itu juga berarti gampang salah ketik 😄 kalau penamaannya nggak konsisten.\n\nAda juga bahasa yang *case-insensitive*. SQLite contohnya; nama tabel, nama kolom, dan *keyword*-nya nggak peduli huruf besar-kecil:\n\n```python\nimport sqlite3\n\nconn = sqlite3.connect(\":memory:\")\ncur = conn.cursor()\ncur.execute(\"create TABLE laporan (total_belanja INTEGER);\")\ncur.execute(\"insert into LAPORAN values (150000);\")\nprint(cur.execute(\"select TOTAL_BELANJA from Laporan;\").fetchone())\n```\n\nOutput:\n\n```text\n(150000,)\n```\n\nKamu nulis `create` kecil, `TABLE` besar, `LAPORAN` besar-besar semua—tetap jalan. Sebaliknya di Python, huruf besar-kecil itu emang harga mati.\n\nSelain soal besar-kecil, ada dua batas lain buat nama yang kamu bikin sendiri (*identifier*). Kata kunci bahasa nggak boleh dipakai jadi nama, dan nama nggak boleh diawali angka:\n\n```python\nclass = \"matematika\"\n```\n\n→ `SyntaxError: invalid syntax`\n\n```python\n2total = 5\n```\n\n→ `SyntaxError: invalid decimal literal`\n\nKata seperti `class`, `if`, dan `for` sudah \"dipesan\" buat bahasa, jadi kamu tinggal pilih nama lain, seperti `kategori`, `total_belanja`, atau `jumlah_data`. Urusan penamaan sudah kamu pegang; pertanyaan berikutnya, apa sih bedanya *statement* dan *expression*?\n\n## Statement dan expression, apa bedanya?\n\n*Statement* adalah perintah lengkap yang melakukan sebuah aksi. *Expression* adalah potongan yang menghasilkan nilai begitu dievaluasi. Baris `total_belanja = 150000` itu *statement*: dia menyuruh komputer menyimpan sesuatu. Sedangkan `total_belanja >= 100000` itu *expression*: dia cuma nilai, dan nilai itu bisa kamu pakai atau cetak:\n\n```python\ntotal_belanja = 150000\nprint(total_belanja >= 100000)\n```\n\n```text\nTrue\n```\n\nDi JavaScript pembedaannya sama:\n\n```js\nconst total_belanja = 150000;\nconsole.log(total_belanja >= 100000);\nconsole.log(\"total bayar: \" + total_belanja * 0.9);\n```\n\n```text\ntrue\ntotal bayar: 135000\n```\n\nPerhatikan baris terakhir: `total_belanja * 0.9` dievaluasi jadi `135000`, baru dirangkai ke teks. *Expression*-nya dihitung lebih dulu, *statement*-nya yang mengantar hasil ke layar. Pembagian ini bakal kepakai terus, terutama pas kamu baca pesan *error*. Karena bentuk dan makna tadi bisa diuji terpisah, jenis kesalahannya pun bisa kita kelompokkan.\n\n## Sintaks salah, program jalan, hasil keliru\n\nSekarang bagian yang paling berguna buat nge-debug: mengenali tiga jenis *error*. Ketiganya muncul di waktu yang beda, jadi petunjuknya juga beda.\n\n*Syntax error* terjadi paling awal. Kode nggak sampai dijalankan karena bentuknya melanggar *grammar*, seperti titik koma yang hilang di C tadi. *Tool*-nya bakal kasih tahu baris dan karakter yang dia tersangka.\n\n*Runtime error* muncul saat kode sudah sah dan mulai jalan, tapi ada yang nggak beres di tengah proses. Contohnya membuka *file* yang nggak ada atau membagi angka dengan nol. Kodenya lolos *parsing*, tapi berhenti saat eksekusi.\n\n*Logic error* yang paling diam-diam. Program jalan sampai selesai tanpa pesan apa pun, tapi hasilnya salah. Perhatikan potongan ini:\n\n```python\nharga = 20000\njumlah = 3\ntotal = harga * jumlah \u002F 100\nprint(\"total bayar:\", total)\n```\n\nOutput:\n\n```text\ntotal bayar: 600.0\n```\n\n*Syntax*-nya sempurna, nggak ada yang berhenti, tapi ada `\u002F 100` nyasar yang bikin totalnya jadi 100 kali lebih kecil dari yang seharusnya. *Compiler* dan *interpreter* nggak bisa menangkap yang seperti ini; cuma kamu yang tahu 60000 itu angka yang dimaksud. Karena itu, menguasai *syntax* memang baru langkah pertama.\n\nKalau kamu sudah bisa ngebedain bentuk yang salah dari makna yang salah, pesan *error* berhenti jadi sumber panik dan mulai jadi petunjuk. Berikutnya, coba baca balik empat artikel sebelumnya di seri ini dengan mata baru: tiap contoh di sana tunduk pada aturan yang baru saja kamu pelajari. Selamat ngoprek, dan semoga layar merahmu makin jarang! 👋\n\nBaru mendarat di seri ini? Mulainya dari [Konsep Dasar Pemrograman](\u002Fp\u002Fkonsep-dasar-pemrograman) — di situ konsep-konsep lain di seri ini dibahas satu per satu.\n","- Sintaks adalah aturan tata bahasa yang menentukan bentuk kode yang sah, terpisah dari semantik yang menentukan maknanya.\n- Penutup statement, indentasi, dan huruf besar-kecil termasuk aturan sintaks yang beda-beda antar bahasa.\n- Nama (identifier) tidak boleh memakai kata kunci bahasa dan tidak boleh diawali angka.\n- Kesalahan terbagi tiga: syntax error, runtime error, dan logic error yang paling sulit dilacak.","\u003Cp>Kalau kamu baru mulai belajar ngoding, pemandangan pertama yang mungkin kamu temui bukan program yang jalan mulus, melainkan layar penuh teks merah. Komputer sebenernya nggak marah; dia cuma nggak paham apa yang kamu tulis. Di situlah \u003Cem>syntax\u003C\u002Fem> alias aturan sintaks memegang peran.\u003C\u002Fp>\n\u003Cp>Bagian ini sering bikin pemula frustrasi, padahal masalahnya \u003Cstrong>bukan\u003C\u002Fstrong> soal logika. Seringnya cuma ada satu karakter yang kurang atau salah tempat. Yuk, kita bongkar aturan \u003Cem>syntax\u003C\u002Fem> satu-satu. Tiap aturan bakal kita temani dengan kode yang benar-benar dijalankan.\u003C\u002Fp>\n\u003Ch2 id=\"grammar-dulu-makna-kemudian\">Grammar dulu, makna kemudian\u003C\u002Fh2>\n\u003Cp>\u003Cem>Syntax\u003C\u002Fem> itu aturan tata bahasa sebuah bahasa pemrograman: bentuk dan urutan tulisan yang dianggap sah. Kalau kamu sudah tahu istilah ini, lewati saja bagian ini. Lawannya adalah \u003Cem>semantics\u003C\u002Fem>, yaitu makna dari tulisan yang sudah sah tadi. Dua hal ini beda, dan bedanya penting buat dipahami lebih dulu.\u003C\u002Fp>\n\u003Cp>Sederhananya, kode kamu dibaca lewat dua tahap. Pertama \u003Cem>tokenizing\u003C\u002Fem>: teks dipotong jadi satuan bermakna seperti nama, angka, dan simbol. Kedua \u003Cem>parsing\u003C\u002Fem>: satuan-satuan itu dirangkai sesuai \u003Cem>grammar\u003C\u002Fem> bahasanya. Begitu \u003Cem>grammar\u003C\u002Fem>-nya dilanggar, prosesnya berhenti di situ dan keluar yang namanya \u003Cem>syntax error\u003C\u002Fem>.\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Aturan \u003Cem>syntax\u003C\u002Fem> cuma soal bentuk. Program yang bentuknya sudah sah belum tentu melakukan apa yang kamu mau; itu urusan \u003Cem>semantics\u003C\u002Fem>.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Contoh paling gampang buat ngeliat \u003Cem>grammar\u003C\u002Fem> bekerja nih soal penutup \u003Cem>statement\u003C\u002Fem>, dan itu yang jadi bahasan berikutnya.\u003C\u002Fp>\n\u003Ch2 id=\"titik-koma-satu-karakter-yang-bikin-kompilator-ngamuk\">Titik koma: satu karakter yang bikin kompilator ngamuk\u003C\u002Fh2>\n\u003Cp>Banyak bahasa menandai akhir sebuah \u003Cem>statement\u003C\u002Fem> dengan titik koma. C, C++, Java, dan JavaScript termasuk keluarga ini. Kode berikut niatnya mengalikan harga dengan jumlah:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">C\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"%23include%20%3Cstdio.h%3E%0A%0Aint%20main(void)%20%7B%0A%20%20%20%20int%20harga%20%3D%2020000%3B%0A%20%20%20%20int%20jumlah%20%3D%203%3B%0A%20%20%20%20int%20total%20%3D%20harga%20*%20jumlah%3B%0A%20%20%20%20printf(%22total%20bayar%3A%20%25d%5Cn%22%2C%20total)%3B%0A%20%20%20%20return%200%3B%0A%7D\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>#include &lt;stdio.h&gt;\n\nint main(void) {\n    int harga = 20000;\n    int jumlah = 3;\n    int total = harga * jumlah;\n    printf(\"total bayar: %d\\n\", total);\n    return 0;\n}\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Jalanin lewat \u003Ccode>gcc\u003C\u002Fcode>, dan hasilnya:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"total%20bayar%3A%2060000\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>total bayar: 60000\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Sekarang hapus satu titik koma di baris \u003Ccode>int total = harga * jumlah\u003C\u002Fcode>. Proses \u003Cem>compile\u003C\u002Fem> langsung berhenti dan \u003Cem>compiler\u003C\u002Fem>-nya nunjuk lokasi masalahnya:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"error%3A%20expected%20'%2C'%20or%20'%3B'%20before%20'printf'\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>error: expected ',' or ';' before 'printf'\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Perhatikan: yang dikeluhkan \u003Cstrong>bukan\u003C\u002Fstrong> baris yang kehilangan titik koma, melainkan baris sesudahnya. \u003Cem>Compiler\u003C\u002Fem> baru sadar ada yang aneh ketika sampai ke \u003Ccode>printf\u003C\u002Fcode> dan baris sebelumnya belum ditutup. Kalau kamu heran kok \u003Cem>error\u003C\u002Fem>-nya nunjuk baris yang kelihatan udah benar, ingat kebiasaan ini.\u003C\u002Fp>\n\u003Cp>Python jalan dengan cara lain. Di sana akhir baris alias \u003Cem>newline\u003C\u002Fem> sudah cukup jadi penanda, jadi titik koma nggak wajib. Yang jadi penentu struktur malah indentasi. Itulah kenapa topik ini butuh bagian sendiri.\u003C\u002Fp>\n\u003Ch2 id=\"kurung-kurawal-atau-indentasi\">Kurung kurawal atau indentasi?\u003C\u002Fh2>\n\u003Cp>Di C, Java, dan JavaScript, blok kode dibatasi kurung kurawal \u003Ccode>{ }\u003C\u002Fcode>. Mau kamu tulis menjorok ke dalam atau rata kiri, selama kurungnya seimbang, programnya tetap sah. Python justru kebalikannya: indentasi bukan sekadar hiasan, tapi bagian dari \u003Cem>syntax\u003C\u002Fem> yang nggak bisa ditawar.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">PYTHON\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"total_belanja%20%3D%20150000%0A%0Aif%20total_belanja%20%3E%20100000%3A%0A%20%20%20%20print(%22dapat%20diskon%2010%25%22)%0A%20%20%20%20print(%22total%20bayar%3A%22%2C%20int(total_belanja%20*%200.9))%0Aprint(%22terima%20kasih%20sudah%20berbelanja%22)\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">total_belanja \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 150000\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">if\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> total_belanja \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">>\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 100000\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    print\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"dapat diskon 10%\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    print\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"total bayar:\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\">int\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(total_belanja \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">*\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0.9\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">print\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"terima kasih sudah berbelanja\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Dijalankan, hasilnya:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"dapat%20diskon%2010%25%0Atotal%20bayar%3A%20135000%0Aterima%20kasih%20sudah%20berbelanja\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>dapat diskon 10%\ntotal bayar: 135000\nterima kasih sudah berbelanja\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Sekarang hapus indentasi di baris \u003Ccode>print(&quot;dapat diskon 10%&quot;)\u003C\u002Fcode>:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"IndentationError%3A%20expected%20an%20indented%20block%20after%20'if'%20statement%20on%20line%203\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>IndentationError: expected an indented block after 'if' statement on line 3\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Ada versi yang lebih berbahaya lagi: indentasinya sah, tapi salah tempat.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">PYTHON\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"total_belanja%20%3D%2050000%0A%0Aif%20total_belanja%20%3E%20100000%3A%0A%20%20%20%20print(%22dapat%20diskon%2010%25%22)%0A%20%20%20%20print(%22terima%20kasih%20sudah%20berbelanja%22)\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">total_belanja \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 50000\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">if\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> total_belanja \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">>\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 100000\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    print\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"dapat diskon 10%\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    print\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"terima kasih sudah berbelanja\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Kalau dijalankan, layarnya kosong 😅. Jumlah \u003Cem>statement\u003C\u002Fem>-nya sama dengan versi benar, tapi baris \u003Ccode>print(&quot;terima kasih sudah berbelanja&quot;)\u003C\u002Fcode> ikut masuk ke dalam blok \u003Ccode>if\u003C\u002Fcode>. Artinya kalimat itu cuma dicetak kalau dapat diskon, padahal niatnya selalu tercetak. Tuh, bentuk \u003Cem>error\u003C\u002Fem> yang paling licin: tanpa pesan kesalahan sama sekali, tapi artinya sudah bergeser.\u003C\u002Fp>\n\u003Cp>Jadi, indentasi di Python itu \u003Cem>syntax\u003C\u002Fem>, bukan gaya penulisan. Urusan bentuk sudah beres; sekarang kita masuk ke soal penamaan, dan di sini huruf besar-kecil ikut bermain.\u003C\u002Fp>\n\u003Ch2 id=\"huruf-besar-kecil-dan-nama-yang-boleh-dipakai\">Huruf besar-kecil dan nama yang boleh dipakai\u003C\u002Fh2>\n\u003Cp>Sebagian bahasa \u003Cem>case-sensitive\u003C\u002Fem> alias membedakan huruf besar dan kecil. Python adalah salah satunya:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">PYTHON\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"Total%20%3D%2010%0Aprint(total)\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Total \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 10\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">print\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(total)\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Output:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"NameError%3A%20name%20'total'%20is%20not%20defined.%20Did%20you%20mean%3A%20'Total'%3F\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>NameError: name 'total' is not defined. Did you mean: 'Total'?\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>\u003Ccode>Total\u003C\u002Fcode> dan \u003Ccode>total\u003C\u002Fcode> dianggap dua wadah yang \u003Cstrong>beda\u003C\u002Fstrong>. Di dalam satu program, kamu bebas memakai keduanya, dan itu juga berarti gampang salah ketik 😄 kalau penamaannya nggak konsisten.\u003C\u002Fp>\n\u003Cp>Ada juga bahasa yang \u003Cem>case-insensitive\u003C\u002Fem>. SQLite contohnya; nama tabel, nama kolom, dan \u003Cem>keyword\u003C\u002Fem>-nya nggak peduli huruf besar-kecil:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">PYTHON\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"import%20sqlite3%0A%0Aconn%20%3D%20sqlite3.connect(%22%3Amemory%3A%22)%0Acur%20%3D%20conn.cursor()%0Acur.execute(%22create%20TABLE%20laporan%20(total_belanja%20INTEGER)%3B%22)%0Acur.execute(%22insert%20into%20LAPORAN%20values%20(150000)%3B%22)%0Aprint(cur.execute(%22select%20TOTAL_BELANJA%20from%20Laporan%3B%22).fetchone())\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">import\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> sqlite3\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">conn \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> sqlite3.connect(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\":memory:\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">cur \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> conn.cursor()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">cur.execute(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"create TABLE laporan (total_belanja INTEGER);\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">cur.execute(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"insert into LAPORAN values (150000);\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">print\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(cur.execute(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"select TOTAL_BELANJA from Laporan;\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">).fetchone())\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Output:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"(150000%2C)\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>(150000,)\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Kamu nulis \u003Ccode>create\u003C\u002Fcode> kecil, \u003Ccode>TABLE\u003C\u002Fcode> besar, \u003Ccode>LAPORAN\u003C\u002Fcode> besar-besar semua—tetap jalan. Sebaliknya di Python, huruf besar-kecil itu emang harga mati.\u003C\u002Fp>\n\u003Cp>Selain soal besar-kecil, ada dua batas lain buat nama yang kamu bikin sendiri (\u003Cem>identifier\u003C\u002Fem>). Kata kunci bahasa nggak boleh dipakai jadi nama, dan nama nggak boleh diawali angka:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">PYTHON\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"class%20%3D%20%22matematika%22\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">class\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> \"matematika\"\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>→ \u003Ccode>SyntaxError: invalid syntax\u003C\u002Fcode>\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">PYTHON\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"2total%20%3D%205\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#FDAEB7;font-style:italic\">2total\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 5\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>→ \u003Ccode>SyntaxError: invalid decimal literal\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>Kata seperti \u003Ccode>class\u003C\u002Fcode>, \u003Ccode>if\u003C\u002Fcode>, dan \u003Ccode>for\u003C\u002Fcode> sudah &quot;dipesan&quot; buat bahasa, jadi kamu tinggal pilih nama lain, seperti \u003Ccode>kategori\u003C\u002Fcode>, \u003Ccode>total_belanja\u003C\u002Fcode>, atau \u003Ccode>jumlah_data\u003C\u002Fcode>. Urusan penamaan sudah kamu pegang; pertanyaan berikutnya, apa sih bedanya \u003Cem>statement\u003C\u002Fem> dan \u003Cem>expression\u003C\u002Fem>?\u003C\u002Fp>\n\u003Ch2 id=\"statement-dan-expression-apa-bedanya\">Statement dan expression, apa bedanya?\u003C\u002Fh2>\n\u003Cp>\u003Cem>Statement\u003C\u002Fem> adalah perintah lengkap yang melakukan sebuah aksi. \u003Cem>Expression\u003C\u002Fem> adalah potongan yang menghasilkan nilai begitu dievaluasi. Baris \u003Ccode>total_belanja = 150000\u003C\u002Fcode> itu \u003Cem>statement\u003C\u002Fem>: dia menyuruh komputer menyimpan sesuatu. Sedangkan \u003Ccode>total_belanja &gt;= 100000\u003C\u002Fcode> itu \u003Cem>expression\u003C\u002Fem>: dia cuma nilai, dan nilai itu bisa kamu pakai atau cetak:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">PYTHON\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"total_belanja%20%3D%20150000%0Aprint(total_belanja%20%3E%3D%20100000)\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">total_belanja \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 150000\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">print\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(total_belanja \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">>=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 100000\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"True\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>True\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Di JavaScript pembedaannya sama:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">JS\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"const%20total_belanja%20%3D%20150000%3B%0Aconsole.log(total_belanja%20%3E%3D%20100000)%3B%0Aconsole.log(%22total%20bayar%3A%20%22%20%2B%20total_belanja%20*%200.9)%3B\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> total_belanja\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 150000\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(total_belanja \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">>=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 100000\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"total bayar: \"\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> +\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> total_belanja \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">*\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 0.9\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"true%0Atotal%20bayar%3A%20135000\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>true\ntotal bayar: 135000\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Perhatikan baris terakhir: \u003Ccode>total_belanja * 0.9\u003C\u002Fcode> dievaluasi jadi \u003Ccode>135000\u003C\u002Fcode>, baru dirangkai ke teks. \u003Cem>Expression\u003C\u002Fem>-nya dihitung lebih dulu, \u003Cem>statement\u003C\u002Fem>-nya yang mengantar hasil ke layar. Pembagian ini bakal kepakai terus, terutama pas kamu baca pesan \u003Cem>error\u003C\u002Fem>. Karena bentuk dan makna tadi bisa diuji terpisah, jenis kesalahannya pun bisa kita kelompokkan.\u003C\u002Fp>\n\u003Ch2 id=\"sintaks-salah-program-jalan-hasil-keliru\">Sintaks salah, program jalan, hasil keliru\u003C\u002Fh2>\n\u003Cp>Sekarang bagian yang paling berguna buat nge-debug: mengenali tiga jenis \u003Cem>error\u003C\u002Fem>. Ketiganya muncul di waktu yang beda, jadi petunjuknya juga beda.\u003C\u002Fp>\n\u003Cp>\u003Cem>Syntax error\u003C\u002Fem> terjadi paling awal. Kode nggak sampai dijalankan karena bentuknya melanggar \u003Cem>grammar\u003C\u002Fem>, seperti titik koma yang hilang di C tadi. \u003Cem>Tool\u003C\u002Fem>-nya bakal kasih tahu baris dan karakter yang dia tersangka.\u003C\u002Fp>\n\u003Cp>\u003Cem>Runtime error\u003C\u002Fem> muncul saat kode sudah sah dan mulai jalan, tapi ada yang nggak beres di tengah proses. Contohnya membuka \u003Cem>file\u003C\u002Fem> yang nggak ada atau membagi angka dengan nol. Kodenya lolos \u003Cem>parsing\u003C\u002Fem>, tapi berhenti saat eksekusi.\u003C\u002Fp>\n\u003Cp>\u003Cem>Logic error\u003C\u002Fem> yang paling diam-diam. Program jalan sampai selesai tanpa pesan apa pun, tapi hasilnya salah. Perhatikan potongan ini:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">PYTHON\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"harga%20%3D%2020000%0Ajumlah%20%3D%203%0Atotal%20%3D%20harga%20*%20jumlah%20%2F%20100%0Aprint(%22total%20bayar%3A%22%2C%20total)\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">harga \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 20000\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">jumlah \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 3\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">total \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> harga \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">*\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\"> jumlah \u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> 100\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">print\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"total bayar:\"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">, total)\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Output:\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"total%20bayar%3A%20600.0\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>total bayar: 600.0\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>\u003Cem>Syntax\u003C\u002Fem>-nya sempurna, nggak ada yang berhenti, tapi ada \u003Ccode>\u002F 100\u003C\u002Fcode> nyasar yang bikin totalnya jadi 100 kali lebih kecil dari yang seharusnya. \u003Cem>Compiler\u003C\u002Fem> dan \u003Cem>interpreter\u003C\u002Fem> nggak bisa menangkap yang seperti ini; cuma kamu yang tahu 60000 itu angka yang dimaksud. Karena itu, menguasai \u003Cem>syntax\u003C\u002Fem> memang baru langkah pertama.\u003C\u002Fp>\n\u003Cp>Kalau kamu sudah bisa ngebedain bentuk yang salah dari makna yang salah, pesan \u003Cem>error\u003C\u002Fem> berhenti jadi sumber panik dan mulai jadi petunjuk. Berikutnya, coba baca balik empat artikel sebelumnya di seri ini dengan mata baru: tiap contoh di sana tunduk pada aturan yang baru saja kamu pelajari. Selamat ngoprek, dan semoga layar merahmu makin jarang! 👋\u003C\u002Fp>\n\u003Cp>Baru mendarat di seri ini? Mulainya dari \u003Ca href=\"\u002Fp\u002Fkonsep-dasar-pemrograman\">Konsep Dasar Pemrograman\u003C\u002Fa> — di situ konsep-konsep lain di seri ini dibahas satu per satu.\u003C\u002Fp>\n","\u003Cul>\n\u003Cli>Sintaks adalah aturan tata bahasa yang menentukan bentuk kode yang sah, terpisah dari semantik yang menentukan maknanya.\u003C\u002Fli>\n\u003Cli>Penutup statement, indentasi, dan huruf besar-kecil termasuk aturan sintaks yang beda-beda antar bahasa.\u003C\u002Fli>\n\u003Cli>Nama (identifier) tidak boleh memakai kata kunci bahasa dan tidak boleh diawali angka.\u003C\u002Fli>\n\u003Cli>Kesalahan terbagi tiga: syntax error, runtime error, dan logic error yang paling sulit dilacak.\u003C\u002Fli>\n\u003C\u002Ful>\n",[185,202,215,228,241,261],{"id":186,"title":187,"title_en":21,"slug":188,"excerpt":189,"excerpt_en":21,"has_translation":15,"published_at":190,"reading_time":93,"hidden_from_listing":15,"tags":191,"thumbnail_image":21,"og_image":193,"series":194,"authors":199},133,"Python Strings: the Badge That Only Worked for One Name","python-strings","The badge script printed the right name for the person who wrote it and the wrong name for everybody else. Slicing counts characters, and a name is words.","2026-10-28T13:00:00.000Z",[85,192],"string","\u002Fog\u002Fpython-strings.png",{"id":195,"title":196,"title_en":197,"slug":198},30,"Koleksi dan String","Collections and Strings","python-collections",[200],{"authors_id":201},{"id":163,"name":164,"slug":165,"role":166,"profile_picture":21},{"id":203,"title":204,"title_en":21,"slug":205,"excerpt":206,"excerpt_en":21,"has_translation":15,"published_at":207,"reading_time":93,"hidden_from_listing":15,"tags":208,"thumbnail_image":21,"og_image":210,"series":211,"authors":212},132,"Python Tuples: Why All Three Points Are the Same Point","python-tuples","Three points walk into a loop and come out identical. The list was never copied three times; the name was. A tuple makes that bug impossible.","2026-10-28T12:00:00.000Z",[85,209],"tuple","\u002Fog\u002Fpython-tuples.png",{"id":195,"title":196,"title_en":197,"slug":198},[213],{"authors_id":214},{"id":163,"name":164,"slug":165,"role":166,"profile_picture":21},{"id":216,"title":217,"title_en":21,"slug":218,"excerpt":219,"excerpt_en":21,"has_translation":15,"published_at":220,"reading_time":93,"hidden_from_listing":15,"tags":221,"thumbnail_image":21,"og_image":223,"series":224,"authors":225},131,"Python Sets: the Duplicate That Keeps Coming Back","python-sets","A de-duplication loop that works on clean data leaves four tags where there should be two. The bug is case, and the fix is a `set`.","2026-10-28T11:00:00.000Z",[85,222],"set","\u002Fog\u002Fpython-sets.png",{"id":195,"title":196,"title_en":197,"slug":198},[226],{"authors_id":227},{"id":163,"name":164,"slug":165,"role":166,"profile_picture":21},{"id":229,"title":230,"title_en":21,"slug":231,"excerpt":232,"excerpt_en":21,"has_translation":15,"published_at":233,"reading_time":93,"hidden_from_listing":15,"tags":234,"thumbnail_image":21,"og_image":236,"series":237,"authors":238},130,"Python Dictionaries: the Key That Isn't There","python-dictionary","A word counter dies the first time it meets a word twice. The fix is one line; what takes longer is knowing which of a dict's three lookups to reach for.","2026-10-28T10:00:00.000Z",[85,235],"dictionary","\u002Fog\u002Fpython-dictionary.png",{"id":195,"title":196,"title_en":197,"slug":198},[239],{"authors_id":240},{"id":163,"name":164,"slug":165,"role":166,"profile_picture":21},{"id":242,"title":243,"title_en":244,"slug":245,"excerpt":246,"excerpt_en":247,"has_translation":12,"published_at":248,"reading_time":14,"hidden_from_listing":15,"tags":249,"thumbnail_image":21,"og_image":256,"series":257,"authors":258},129,"Biar RAG nggak kena 504: pisahin jalur query dan ingestion","So Your RAG Stops Hitting 504: Split the Query Path From Ingestion","rag-pisah-jalur-query-dan-ingestion","Satu service RAG yang merangkap parsing dan menjawab kueri bakal tumbang pas ada yang upload PDF 200 halaman. Obatnya dua jalur dan satu queue.","One RAG service that both parses uploads and answers queries will fall over the moment someone uploads a 200-page PDF. The cure is two paths and one queue.","2026-10-22T01:30:00.000Z",[250,251,252,253,254,255],"rag","cloud-run","cloud-tasks","gcp","serverless","arsitektur","\u002Fog\u002Frag-pisah-jalur-query-dan-ingestion.png",{"id":119,"title":35,"title_en":36,"slug":37},[259],{"authors_id":260},{"id":163,"name":164,"slug":165,"role":166,"profile_picture":21},{"id":262,"title":263,"title_en":264,"slug":265,"excerpt":266,"excerpt_en":267,"has_translation":12,"published_at":268,"reading_time":93,"hidden_from_listing":15,"tags":269,"thumbnail_image":21,"og_image":276,"series":277,"authors":278},128,"Linear atau graf: cara mengatur banyak agent tanpa loop abadi","Linear or Graph: How to Run Many Agents Without an Eternal Loop","multi-agen-linear-atau-grafik","Satu agent dengan dua puluh tool gampang kacau. Begitu beberapa agent saling revisi, kamu butuh graf yang mendukung cycle dan angka yang membuatnya berhenti.","One agent with twenty tools gets messy fast. Once several agents revise each other, you need a graph that allows cycles and a number that makes it stop.","2026-10-21T16:05:00.000Z",[270,271,272,273,274,275],"multi-agent","langgraph","autogen","orkestrasi","checkpoint","llm","\u002Fog\u002Fmulti-agen-linear-atau-grafik.png",{"id":119,"title":35,"title_en":36,"slug":37},[279],{"authors_id":280},{"id":163,"name":164,"slug":165,"role":166,"profile_picture":21},[282,285,288,291,294,297],{"text":283,"depth":126,"id":284},"Grammar dulu, makna kemudian","grammar-dulu-makna-kemudian",{"text":286,"depth":126,"id":287},"Titik koma: satu karakter yang bikin kompilator ngamuk","titik-koma-satu-karakter-yang-bikin-kompilator-ngamuk",{"text":289,"depth":126,"id":290},"Kurung kurawal atau indentasi?","kurung-kurawal-atau-indentasi",{"text":292,"depth":126,"id":293},"Huruf besar-kecil dan nama yang boleh dipakai","huruf-besar-kecil-dan-nama-yang-boleh-dipakai",{"text":295,"depth":126,"id":296},"Statement dan expression, apa bedanya?","statement-dan-expression-apa-bedanya",{"text":298,"depth":126,"id":299},"Sintaks salah, program jalan, hasil keliru","sintaks-salah-program-jalan-hasil-keliru",1793295833873]