[{"data":1,"prerenderedAt":276},["ShallowReactive",2],{"tag-labels":3,"site-header":4,"article-penggunaan-dan-penulisan-function-pada-pascal-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":163,"renderedTakeaway":164,"latestArticles":165,"toc":265},{"id":74,"title":75,"title_en":76,"slug":77,"excerpt":78,"excerpt_en":79,"has_translation":12,"published_at":80,"reading_time":81,"hidden_from_listing":15,"tags":82,"thumbnail_image":21,"og_image":86,"series":87,"authors":156,"body_locale":159,"available_locales":160,"body":162,"takeway":21,"prerequisite":21},79,"Penggunaan dan Penulisan FUNCTION pada Pascal","Using and Writing a FUNCTION in Pascal","penggunaan-dan-penulisan-function-pada-pascal","Sub program yang tidak mengembalikan nilai dinamakan PROCEDURE, sedangkan yang mengembalikan nilai dinamakan FUNCTION.","A sub program that does not return a value is called a PROCEDURE, while one that returns a value is called a FUNCTION.","2021-04-21T13:01:16.000Z",3,[83,84,85],"pascal","fungsi","sub-program","\u002Fog\u002Fpenggunaan-dan-penulisan-function-pada-pascal.png",{"id":88,"title":89,"title_en":90,"slug":91,"description":92,"description_en":93,"articles":94,"children_series":135,"parent_series":136},26,"Pemrograman Prosedural","Procedural Programming","pascal-pemrograman-prosedural","Pecah program besar jadi prosedur dan fungsi kecil yang bisa dipakai berulang kali.","Break a big program into small procedures and functions you can call again and again.",[95,116,130],{"id":96,"title":97,"title_en":98,"slug":99,"excerpt":100,"excerpt_en":101,"has_translation":12,"published_at":102,"reading_time":81,"hidden_from_listing":15,"tags":103,"thumbnail_image":21,"og_image":107,"series":108,"authors":109},77,"Tentang Pemrograman Prosedural pada Pascal","About Procedural Programming in Pascal","tentang-pemrograman-prosedural-pada-pascal","Pemrograman peosedural merupakan salah satu paradigma pemrograman dimana beberapa perintah digabungkan menjadi satu dalam sebuah prosedur.","Procedural programming is one of the programming paradigms, where several statements are combined into one procedure.","2021-04-13T12:44:49.000Z",[83,104,105,106],"pemrograman","prosedur","konsep","\u002Fog\u002Ftentang-pemrograman-prosedural-pada-pascal.png",{"id":88,"title":89,"title_en":90,"slug":91},[110],{"authors_id":111},{"id":112,"name":113,"slug":114,"role":115,"profile_picture":21},1,"Daffa Izzuddin","izzudd","Writer",{"id":117,"title":118,"title_en":119,"slug":120,"excerpt":121,"excerpt_en":122,"has_translation":12,"published_at":123,"reading_time":81,"hidden_from_listing":15,"tags":124,"thumbnail_image":21,"og_image":125,"series":126,"authors":127},78,"Penggunaan dan Penulisan PROCEDURE pada Pascal","Using and Writing a PROCEDURE in Pascal","penggunaan-dan-penulisan-procedure-pada-pascal","Bagian utama dari sebuah PROCEDURE adalah nama dan tubuh PROCEDURE. Ada juga bagian opsional yaitu parameter dan deklarasi lokal.","The main parts of a PROCEDURE are its name and its body, with parameters and local declarations as the optional parts.","2021-04-15T12:54:14.000Z",[83,105,85],"\u002Fog\u002Fpenggunaan-dan-penulisan-procedure-pada-pascal.png",{"id":88,"title":89,"title_en":90,"slug":91},[128],{"authors_id":129},{"id":112,"name":113,"slug":114,"role":115,"profile_picture":21},{"id":74,"title":75,"title_en":76,"slug":77,"excerpt":78,"excerpt_en":79,"has_translation":12,"published_at":80,"reading_time":81,"hidden_from_listing":15,"tags":82,"thumbnail_image":21,"og_image":86,"series":131,"authors":132},{"id":88,"title":89,"title_en":90,"slug":91},[133],{"authors_id":134},{"id":112,"name":113,"slug":114,"role":115,"profile_picture":21},[],{"id":137,"title":64,"title_en":65,"slug":66,"parent_series":138,"children_series":139},14,{"id":112,"title":48,"title_en":48,"slug":49},[140,145,150,155],{"id":141,"title":142,"title_en":143,"slug":144,"cover_image":21},23,"Berkenalan dengan Bahasa Pascal","Getting Started with Pascal","pascal-intro",{"id":146,"title":147,"title_en":148,"slug":149,"cover_image":21},24,"Struktur Kontrol","Control Structures","pascal-struktur-kontrol",{"id":151,"title":152,"title_en":153,"slug":154,"cover_image":21},25,"Tipe Data Bentukan","Composite Types","pascal-tipe-data-bentukan",{"id":88,"title":89,"title_en":90,"slug":91,"cover_image":21},[157],{"authors_id":158},{"id":112,"name":113,"slug":114,"role":115,"profile_picture":21},"id",[161,159],"en","Setelah sebelumnya kita membahas tentang PROCEDURE pada Pascal, pada kesempatan kali ini kita akan membahas penggunaan dan penulisan FUNCTION pada bahasa Pascal.\n\n## Deklarasi dan Struktur FUNCTION pada Pascal\n\nTempat mendeklarasikan FUNCTION sama seperti deklarasi [PROCEDURE](https:\u002F\u002Finvasikode.com\u002Fprocedure-pascal\u002F), yaitu tepat sebelum bagian `begin` dari program utama. Keduanya memiliki struktur yang kurang lebih sama. Hanya satu hal yang membedakan, yaitu **tipe data nilai kembailan** pada FUNCTION.\n\nFormat penulisan FUNCTION pada Pascal.\n\n```\nprocedure \u003Cnama-function>(\u003Cparameter>: \u003Ctipe-data>): \u003Ctipe-data-kembalian>;\n\u002F\u002F deklarasi lokal\nbegin\n  \u002F\u002F tubuh function\nend;\n```\n\nPerbedaan mendasar dari PROCEDURE dan FUNCTION ada pada **data kembaliannya**. Sub program yang tidak mengembalikan nilai dinamakan PROCEDURE, sedangkan yang mengembalikan nilai dinamakan FUNCTION. Seperti yang pernah kita bahas [sebelumnya](https:\u002F\u002Finvasikode.com\u002Fpascal-prosedural\u002F).\n\n**Apa itu data kembalian? dan kenapa harus ada?**\n\nMari kita jawab dengan membuat program sederhana.\n\n## Penggunaan FUNCTION pada Pascal\n\nKali ini kita akan coba membuat program sederhana untuk mencari hasil dari suatu bilangan bulat **b** dipangkatkan dengan bilangan bulat **n**.\n\n\\\\[ hasil = b^n \\]\n\nJika kita tidak menggunakan sub program (FUNCTION) maka penyelesaiannya kurang lebih seperti ini.\n\n```pascal\nprogram cariPangkat;\nuses crt;\nvar\n  b, n: integer;\n  hasil: integer;\n\nbegin\n  clrscr;\n\n  n := 5; \u002F\u002F nilai n=5\n  b := 2; \u002F\u002F nilai b=2\n  hasil := 1;\n\n  \u002F\u002F melakukan perulangan while\n  \u002F\u002F untuk mengalikan bilangan b sebanyak n kali\n  while n > 0 do\n  begin\n    n := n-1;\n    hasil := hasil * b;\n  end;\n\n  \u002F\u002F output hasil\n  writeln('hasil: ', hasil);\n  readln;\nend.\n```\n\nPada program tersebut kita menghitung nilai dari 25 yang hasilnya adalah 32.\n\nMetode yang kita gunakan untuk mencari hasil pangkat adalah dengan mengalikan bilangan **b** sebanyak **n** kali dengan menggunakan perulangan.\n\nKode tersbut memang tidak salah, tetapi apa jadinya jika kita ingin mencetak beberapa bilangan pangkat?\n\nDengan kekuatan copas, ketika kita ingin mencari hasil dari 25 dan 52 kodenya akan berubah menjadi seperti ini.\n\n```pascal\nprogram cariPangkat;\nuses crt;\nvar\n  b, n: integer;\n  hasil: integer;\n\nbegin\n  clrscr;\n\n  n := 5; \u002F\u002F nilai n=5\n  b := 2; \u002F\u002F nilai b=2\n  hasil := 1;\n\n  \u002F\u002F melakukan perulangan while\n  \u002F\u002F untuk mengalikan hasil dengan b sebanyak n kali\n  while n > 0 do\n  begin\n    n := n-1;\n    hasil := hasil *b;\n  end;\n\n  \u002F\u002F output hasil\n  writeln('hasil: ', hasil);\n\n  n := 2; \u002F\u002F nilai n=2\n  b := 5; \u002F\u002F nilai b=5\n  hasil := 1;\n\n  \u002F\u002F melakukan perulangan while\n  \u002F\u002F untuk mengalikan hasil dengan b sebanyak n kali\n  while n > 0 do\n  begin\n    n := n-1;\n    hasil := hasil *b;\n  end;\n\n  \u002F\u002F output hasil\n  writeln('hasil: ', hasil);\n  readln;\nend.\n```\n\nKode tersebut jadi terlihat sangat panjang, rumit, dan tidak enak dilihat.\n\nDi sinilah FUNCTION dapat digunakan, mari kita format ulang kode tersebut dengan menggunakan sub program berupa FUNCTION.\n\n```pascal\nprogram cariPangkat;\nuses crt;\nvar\n  hasil: integer;\n\nfunction hitungPangkat(b, n: integer): integer;\nvar\n  h: integer;\nbegin\n  h := 1;\n  while n > 0 do\n  begin\n    n := n-1;\n    h := h*b;\n  end;\n  hitungPangkat := h;\nend;\n\nbegin\n  clrscr;\n\n  \u002F\u002F menghitung 2^5\n  hasil := hitungPangkat(2, 5);\n  writeln('hasil: ', hasil);\n\n  \u002F\u002F menghitung 5^2\n  hasil := hitungPangkat(5, 2);\n  writeln('hasil: ', hasil);\n\n  readln;\nend.\n```\n\nSekarang coba jalankan program tersebut. Nantinya akan keluar output yang sama seperti sebelumnya.\n\nPada program tersebut, FUNCTION `hitungPangkat` memiliki logika yang sama seperti kode kita sebelumnya. Yaitu menggunakan perulangan untuk mengalikan bilangan **b** sebanyak **n** kali.\n\nHasil dari perkalian berulang kita masukkan kedalam variable lokal **h**. Setelah perulangan selesai, selanjutnya nilai dari variable **h** dimasukkan kedalam nama FUNCTION yaitu **hitungPangkat**. Nama FUNCTION tersebut seakan-akan berfungsi sebagai variable dengan tipe integer (tipe kembalian).\n\nSelanjutnya, pada program utama kita melakukan pemanggilan FUNCTION sekaligus *assignment* ke dalam variable **hasil**. Dan jadilah output seperti yang diinginkan.\n\nSupaya lebih simepl lagi, kita dapat menghapus variable **hasil** dan langsung memanggil FUNCTION `hitungPangkat` sebagai parameter dalam perintah PRINTLN.\n\n```pascal\nprogram cariPangkat;\nuses crt;\n\nfunction hitungPangkat(b, n: integer): integer;\nvar\n  h: integer;\nbegin\n  h := 1;\n  while n > 0 do\n  begin\n    n := n-1;\n    h := h*b;\n  end;\n  hitungPangkat := h;\nend;\n\nbegin\n  clrscr;\n  writeln('hasil: ', hitungPangkat(2, 5));\n  writeln('hasil: ', hitungPangkat(5, 2));\n  writeln('hasil: ', hitungPangkat(5, 5));\n  writeln('hasil: ', hitungPangkat(2, 2));\n  readln;\nend.\n```\n\n## Penutup\n\nCukup sekian untuk kesempatan kali ini, semoga bermanfaat :D\n\nPada kesempatan selanjutnya kita akan membahas tentang FUNCTION dan PROCEDURE yang memanggil dirinya sendiri. Atau yang biasa disebut konsep fungsi **rekursi** pada Pascal.\n","\u003Cp>Setelah sebelumnya kita membahas tentang PROCEDURE pada Pascal, pada kesempatan kali ini kita akan membahas penggunaan dan penulisan FUNCTION pada bahasa Pascal.\u003C\u002Fp>\n\u003Ch2 id=\"deklarasi-dan-struktur-function-pada-pascal\">Deklarasi dan Struktur FUNCTION pada Pascal\u003C\u002Fh2>\n\u003Cp>Tempat mendeklarasikan FUNCTION sama seperti deklarasi \u003Ca href=\"https:\u002F\u002Finvasikode.com\u002Fprocedure-pascal\u002F\">PROCEDURE\u003C\u002Fa>, yaitu tepat sebelum bagian \u003Ccode>begin\u003C\u002Fcode> dari program utama. Keduanya memiliki struktur yang kurang lebih sama. Hanya satu hal yang membedakan, yaitu \u003Cstrong>tipe data nilai kembailan\u003C\u002Fstrong> pada FUNCTION.\u003C\u002Fp>\n\u003Cp>Format penulisan FUNCTION pada Pascal.\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=\"procedure%20%3Cnama-function%3E(%3Cparameter%3E%3A%20%3Ctipe-data%3E)%3A%20%3Ctipe-data-kembalian%3E%3B%0A%2F%2F%20deklarasi%20lokal%0Abegin%0A%20%20%2F%2F%20tubuh%20function%0Aend%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\">\u003Ccode>procedure &lt;nama-function&gt;(&lt;parameter&gt;: &lt;tipe-data&gt;): &lt;tipe-data-kembalian&gt;;\n\u002F\u002F deklarasi lokal\nbegin\n  \u002F\u002F tubuh function\nend;\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Perbedaan mendasar dari PROCEDURE dan FUNCTION ada pada \u003Cstrong>data kembaliannya\u003C\u002Fstrong>. Sub program yang tidak mengembalikan nilai dinamakan PROCEDURE, sedangkan yang mengembalikan nilai dinamakan FUNCTION. Seperti yang pernah kita bahas \u003Ca href=\"https:\u002F\u002Finvasikode.com\u002Fpascal-prosedural\u002F\">sebelumnya\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Apa itu data kembalian? dan kenapa harus ada?\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Mari kita jawab dengan membuat program sederhana.\u003C\u002Fp>\n\u003Ch2 id=\"penggunaan-function-pada-pascal\">Penggunaan FUNCTION pada Pascal\u003C\u002Fh2>\n\u003Cp>Kali ini kita akan coba membuat program sederhana untuk mencari hasil dari suatu bilangan bulat \u003Cstrong>b\u003C\u002Fstrong> dipangkatkan dengan bilangan bulat \u003Cstrong>n\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>\\[ hasil = b^n ]\u003C\u002Fp>\n\u003Cp>Jika kita tidak menggunakan sub program (FUNCTION) maka penyelesaiannya kurang lebih seperti 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\">PASCAL\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=\"program%20cariPangkat%3B%0Auses%20crt%3B%0Avar%0A%20%20b%2C%20n%3A%20integer%3B%0A%20%20hasil%3A%20integer%3B%0A%0Abegin%0A%20%20clrscr%3B%0A%0A%20%20n%20%3A%3D%205%3B%20%2F%2F%20nilai%20n%3D5%0A%20%20b%20%3A%3D%202%3B%20%2F%2F%20nilai%20b%3D2%0A%20%20hasil%20%3A%3D%201%3B%0A%0A%20%20%2F%2F%20melakukan%20perulangan%20while%0A%20%20%2F%2F%20untuk%20mengalikan%20bilangan%20b%20sebanyak%20n%20kali%0A%20%20while%20n%20%3E%200%20do%0A%20%20begin%0A%20%20%20%20n%20%3A%3D%20n-1%3B%0A%20%20%20%20hasil%20%3A%3D%20hasil%20*%20b%3B%0A%20%20end%3B%0A%0A%20%20%2F%2F%20output%20hasil%0A%20%20writeln('hasil%3A%20'%2C%20hasil)%3B%0A%20%20readln%3B%0Aend.\" 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>program cariPangkat;\nuses crt;\nvar\n  b, n: integer;\n  hasil: integer;\n\nbegin\n  clrscr;\n\n  n := 5; \u002F\u002F nilai n=5\n  b := 2; \u002F\u002F nilai b=2\n  hasil := 1;\n\n  \u002F\u002F melakukan perulangan while\n  \u002F\u002F untuk mengalikan bilangan b sebanyak n kali\n  while n &gt; 0 do\n  begin\n    n := n-1;\n    hasil := hasil * b;\n  end;\n\n  \u002F\u002F output hasil\n  writeln('hasil: ', hasil);\n  readln;\nend.\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Pada program tersebut kita menghitung nilai dari 25 yang hasilnya adalah 32.\u003C\u002Fp>\n\u003Cp>Metode yang kita gunakan untuk mencari hasil pangkat adalah dengan mengalikan bilangan \u003Cstrong>b\u003C\u002Fstrong> sebanyak \u003Cstrong>n\u003C\u002Fstrong> kali dengan menggunakan perulangan.\u003C\u002Fp>\n\u003Cp>Kode tersbut memang tidak salah, tetapi apa jadinya jika kita ingin mencetak beberapa bilangan pangkat?\u003C\u002Fp>\n\u003Cp>Dengan kekuatan copas, ketika kita ingin mencari hasil dari 25 dan 52 kodenya akan berubah menjadi seperti 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\">PASCAL\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=\"program%20cariPangkat%3B%0Auses%20crt%3B%0Avar%0A%20%20b%2C%20n%3A%20integer%3B%0A%20%20hasil%3A%20integer%3B%0A%0Abegin%0A%20%20clrscr%3B%0A%0A%20%20n%20%3A%3D%205%3B%20%2F%2F%20nilai%20n%3D5%0A%20%20b%20%3A%3D%202%3B%20%2F%2F%20nilai%20b%3D2%0A%20%20hasil%20%3A%3D%201%3B%0A%0A%20%20%2F%2F%20melakukan%20perulangan%20while%0A%20%20%2F%2F%20untuk%20mengalikan%20hasil%20dengan%20b%20sebanyak%20n%20kali%0A%20%20while%20n%20%3E%200%20do%0A%20%20begin%0A%20%20%20%20n%20%3A%3D%20n-1%3B%0A%20%20%20%20hasil%20%3A%3D%20hasil%20*b%3B%0A%20%20end%3B%0A%0A%20%20%2F%2F%20output%20hasil%0A%20%20writeln('hasil%3A%20'%2C%20hasil)%3B%0A%0A%20%20n%20%3A%3D%202%3B%20%2F%2F%20nilai%20n%3D2%0A%20%20b%20%3A%3D%205%3B%20%2F%2F%20nilai%20b%3D5%0A%20%20hasil%20%3A%3D%201%3B%0A%0A%20%20%2F%2F%20melakukan%20perulangan%20while%0A%20%20%2F%2F%20untuk%20mengalikan%20hasil%20dengan%20b%20sebanyak%20n%20kali%0A%20%20while%20n%20%3E%200%20do%0A%20%20begin%0A%20%20%20%20n%20%3A%3D%20n-1%3B%0A%20%20%20%20hasil%20%3A%3D%20hasil%20*b%3B%0A%20%20end%3B%0A%0A%20%20%2F%2F%20output%20hasil%0A%20%20writeln('hasil%3A%20'%2C%20hasil)%3B%0A%20%20readln%3B%0Aend.\" 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>program cariPangkat;\nuses crt;\nvar\n  b, n: integer;\n  hasil: integer;\n\nbegin\n  clrscr;\n\n  n := 5; \u002F\u002F nilai n=5\n  b := 2; \u002F\u002F nilai b=2\n  hasil := 1;\n\n  \u002F\u002F melakukan perulangan while\n  \u002F\u002F untuk mengalikan hasil dengan b sebanyak n kali\n  while n &gt; 0 do\n  begin\n    n := n-1;\n    hasil := hasil *b;\n  end;\n\n  \u002F\u002F output hasil\n  writeln('hasil: ', hasil);\n\n  n := 2; \u002F\u002F nilai n=2\n  b := 5; \u002F\u002F nilai b=5\n  hasil := 1;\n\n  \u002F\u002F melakukan perulangan while\n  \u002F\u002F untuk mengalikan hasil dengan b sebanyak n kali\n  while n &gt; 0 do\n  begin\n    n := n-1;\n    hasil := hasil *b;\n  end;\n\n  \u002F\u002F output hasil\n  writeln('hasil: ', hasil);\n  readln;\nend.\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Kode tersebut jadi terlihat sangat panjang, rumit, dan tidak enak dilihat.\u003C\u002Fp>\n\u003Cp>Di sinilah FUNCTION dapat digunakan, mari kita format ulang kode tersebut dengan menggunakan sub program berupa FUNCTION.\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\">PASCAL\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=\"program%20cariPangkat%3B%0Auses%20crt%3B%0Avar%0A%20%20hasil%3A%20integer%3B%0A%0Afunction%20hitungPangkat(b%2C%20n%3A%20integer)%3A%20integer%3B%0Avar%0A%20%20h%3A%20integer%3B%0Abegin%0A%20%20h%20%3A%3D%201%3B%0A%20%20while%20n%20%3E%200%20do%0A%20%20begin%0A%20%20%20%20n%20%3A%3D%20n-1%3B%0A%20%20%20%20h%20%3A%3D%20h*b%3B%0A%20%20end%3B%0A%20%20hitungPangkat%20%3A%3D%20h%3B%0Aend%3B%0A%0Abegin%0A%20%20clrscr%3B%0A%0A%20%20%2F%2F%20menghitung%202%5E5%0A%20%20hasil%20%3A%3D%20hitungPangkat(2%2C%205)%3B%0A%20%20writeln('hasil%3A%20'%2C%20hasil)%3B%0A%0A%20%20%2F%2F%20menghitung%205%5E2%0A%20%20hasil%20%3A%3D%20hitungPangkat(5%2C%202)%3B%0A%20%20writeln('hasil%3A%20'%2C%20hasil)%3B%0A%0A%20%20readln%3B%0Aend.\" 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>program cariPangkat;\nuses crt;\nvar\n  hasil: integer;\n\nfunction hitungPangkat(b, n: integer): integer;\nvar\n  h: integer;\nbegin\n  h := 1;\n  while n &gt; 0 do\n  begin\n    n := n-1;\n    h := h*b;\n  end;\n  hitungPangkat := h;\nend;\n\nbegin\n  clrscr;\n\n  \u002F\u002F menghitung 2^5\n  hasil := hitungPangkat(2, 5);\n  writeln('hasil: ', hasil);\n\n  \u002F\u002F menghitung 5^2\n  hasil := hitungPangkat(5, 2);\n  writeln('hasil: ', hasil);\n\n  readln;\nend.\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Sekarang coba jalankan program tersebut. Nantinya akan keluar output yang sama seperti sebelumnya.\u003C\u002Fp>\n\u003Cp>Pada program tersebut, FUNCTION \u003Ccode>hitungPangkat\u003C\u002Fcode> memiliki logika yang sama seperti kode kita sebelumnya. Yaitu menggunakan perulangan untuk mengalikan bilangan \u003Cstrong>b\u003C\u002Fstrong> sebanyak \u003Cstrong>n\u003C\u002Fstrong> kali.\u003C\u002Fp>\n\u003Cp>Hasil dari perkalian berulang kita masukkan kedalam variable lokal \u003Cstrong>h\u003C\u002Fstrong>. Setelah perulangan selesai, selanjutnya nilai dari variable \u003Cstrong>h\u003C\u002Fstrong> dimasukkan kedalam nama FUNCTION yaitu \u003Cstrong>hitungPangkat\u003C\u002Fstrong>. Nama FUNCTION tersebut seakan-akan berfungsi sebagai variable dengan tipe integer (tipe kembalian).\u003C\u002Fp>\n\u003Cp>Selanjutnya, pada program utama kita melakukan pemanggilan FUNCTION sekaligus \u003Cem>assignment\u003C\u002Fem> ke dalam variable \u003Cstrong>hasil\u003C\u002Fstrong>. Dan jadilah output seperti yang diinginkan.\u003C\u002Fp>\n\u003Cp>Supaya lebih simepl lagi, kita dapat menghapus variable \u003Cstrong>hasil\u003C\u002Fstrong> dan langsung memanggil FUNCTION \u003Ccode>hitungPangkat\u003C\u002Fcode> sebagai parameter dalam perintah PRINTLN.\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\">PASCAL\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=\"program%20cariPangkat%3B%0Auses%20crt%3B%0A%0Afunction%20hitungPangkat(b%2C%20n%3A%20integer)%3A%20integer%3B%0Avar%0A%20%20h%3A%20integer%3B%0Abegin%0A%20%20h%20%3A%3D%201%3B%0A%20%20while%20n%20%3E%200%20do%0A%20%20begin%0A%20%20%20%20n%20%3A%3D%20n-1%3B%0A%20%20%20%20h%20%3A%3D%20h*b%3B%0A%20%20end%3B%0A%20%20hitungPangkat%20%3A%3D%20h%3B%0Aend%3B%0A%0Abegin%0A%20%20clrscr%3B%0A%20%20writeln('hasil%3A%20'%2C%20hitungPangkat(2%2C%205))%3B%0A%20%20writeln('hasil%3A%20'%2C%20hitungPangkat(5%2C%202))%3B%0A%20%20writeln('hasil%3A%20'%2C%20hitungPangkat(5%2C%205))%3B%0A%20%20writeln('hasil%3A%20'%2C%20hitungPangkat(2%2C%202))%3B%0A%20%20readln%3B%0Aend.\" 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>program cariPangkat;\nuses crt;\n\nfunction hitungPangkat(b, n: integer): integer;\nvar\n  h: integer;\nbegin\n  h := 1;\n  while n &gt; 0 do\n  begin\n    n := n-1;\n    h := h*b;\n  end;\n  hitungPangkat := h;\nend;\n\nbegin\n  clrscr;\n  writeln('hasil: ', hitungPangkat(2, 5));\n  writeln('hasil: ', hitungPangkat(5, 2));\n  writeln('hasil: ', hitungPangkat(5, 5));\n  writeln('hasil: ', hitungPangkat(2, 2));\n  readln;\nend.\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Ch2 id=\"penutup\">Penutup\u003C\u002Fh2>\n\u003Cp>Cukup sekian untuk kesempatan kali ini, semoga bermanfaat :D\u003C\u002Fp>\n\u003Cp>Pada kesempatan selanjutnya kita akan membahas tentang FUNCTION dan PROCEDURE yang memanggil dirinya sendiri. Atau yang biasa disebut konsep fungsi \u003Cstrong>rekursi\u003C\u002Fstrong> pada Pascal.\u003C\u002Fp>\n","",[166,185,198,211,224,245],{"id":167,"title":168,"title_en":21,"slug":169,"excerpt":170,"excerpt_en":21,"has_translation":15,"published_at":171,"reading_time":172,"hidden_from_listing":15,"tags":173,"thumbnail_image":21,"og_image":176,"series":177,"authors":182},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",6,[174,175],"python","string","\u002Fog\u002Fpython-strings.png",{"id":178,"title":179,"title_en":180,"slug":181},30,"Koleksi dan String","Collections and Strings","python-collections",[183],{"authors_id":184},{"id":112,"name":113,"slug":114,"role":115,"profile_picture":21},{"id":186,"title":187,"title_en":21,"slug":188,"excerpt":189,"excerpt_en":21,"has_translation":15,"published_at":190,"reading_time":172,"hidden_from_listing":15,"tags":191,"thumbnail_image":21,"og_image":193,"series":194,"authors":195},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",[174,192],"tuple","\u002Fog\u002Fpython-tuples.png",{"id":178,"title":179,"title_en":180,"slug":181},[196],{"authors_id":197},{"id":112,"name":113,"slug":114,"role":115,"profile_picture":21},{"id":199,"title":200,"title_en":21,"slug":201,"excerpt":202,"excerpt_en":21,"has_translation":15,"published_at":203,"reading_time":172,"hidden_from_listing":15,"tags":204,"thumbnail_image":21,"og_image":206,"series":207,"authors":208},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",[174,205],"set","\u002Fog\u002Fpython-sets.png",{"id":178,"title":179,"title_en":180,"slug":181},[209],{"authors_id":210},{"id":112,"name":113,"slug":114,"role":115,"profile_picture":21},{"id":212,"title":213,"title_en":21,"slug":214,"excerpt":215,"excerpt_en":21,"has_translation":15,"published_at":216,"reading_time":172,"hidden_from_listing":15,"tags":217,"thumbnail_image":21,"og_image":219,"series":220,"authors":221},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",[174,218],"dictionary","\u002Fog\u002Fpython-dictionary.png",{"id":178,"title":179,"title_en":180,"slug":181},[222],{"authors_id":223},{"id":112,"name":113,"slug":114,"role":115,"profile_picture":21},{"id":225,"title":226,"title_en":227,"slug":228,"excerpt":229,"excerpt_en":230,"has_translation":12,"published_at":231,"reading_time":14,"hidden_from_listing":15,"tags":232,"thumbnail_image":21,"og_image":239,"series":240,"authors":242},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",[233,234,235,236,237,238],"rag","cloud-run","cloud-tasks","gcp","serverless","arsitektur","\u002Fog\u002Frag-pisah-jalur-query-dan-ingestion.png",{"id":241,"title":35,"title_en":36,"slug":37},8,[243],{"authors_id":244},{"id":112,"name":113,"slug":114,"role":115,"profile_picture":21},{"id":246,"title":247,"title_en":248,"slug":249,"excerpt":250,"excerpt_en":251,"has_translation":12,"published_at":252,"reading_time":172,"hidden_from_listing":15,"tags":253,"thumbnail_image":21,"og_image":260,"series":261,"authors":262},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",[254,255,256,257,258,259],"multi-agent","langgraph","autogen","orkestrasi","checkpoint","llm","\u002Fog\u002Fmulti-agen-linear-atau-grafik.png",{"id":241,"title":35,"title_en":36,"slug":37},[263],{"authors_id":264},{"id":112,"name":113,"slug":114,"role":115,"profile_picture":21},[266,270,273],{"text":267,"depth":268,"id":269},"Deklarasi dan Struktur FUNCTION pada Pascal",2,"deklarasi-dan-struktur-function-pada-pascal",{"text":271,"depth":268,"id":272},"Penggunaan FUNCTION pada Pascal","penggunaan-function-pada-pascal",{"text":274,"depth":268,"id":275},"Penutup","penutup",1793295834909]