[{"data":1,"prerenderedAt":182},["ShallowReactive",2],{"site-header":3,"site-footer-license":37,"article-tentang-tipe-data-bentukan-pada-pascal-with-latest":41},{"navigations":4},[5,20],{"collection":6,"item":7},"series",{"__typename":6,"title":8,"slug":9,"children_series":10},"Artikel","all",[11,14,17],{"title":12,"slug":13},"Algoritma dan Struktur Data","algoritma-struktur-data",{"title":15,"slug":16},"Konsep Dasar Pemrograman","konsep-dasar-pemrograman",{"title":18,"slug":19},"Kecerdasan Artifisial","kecerdasan-artifisial",{"collection":6,"item":21},{"__typename":6,"title":22,"slug":23,"children_series":24},"Tutorial","tutorial",[25,28,31,34],{"title":26,"slug":27},"Belajar Java","belajar-java",{"title":29,"slug":30},"Belajar Pascal","belajar-pascal",{"title":32,"slug":33},"Belajar Python","belajar-python",{"title":35,"slug":36},"Belajar Golang","belajar-golang",{"name":38,"url":39,"show":40},"CC BY-SA","https://creativecommons.org/licenses/by-sa/4.0/",false,{"article":42,"renderedBody":117,"renderedTakeaway":118,"latestArticles":119,"toc":171},{"id":43,"title":44,"slug":45,"excerpt":46,"published_at":47,"thumbnail_image":48,"tags":50,"reading_time":55,"takeway":56,"body":57,"authors":58,"series":64},"73","Tentang Tipe Data Bentukan pada Pascal","tentang-tipe-data-bentukan-pada-pascal","Tipe data bentukan atau User defined data types terbagi menjadi 2, yaitu Enumerated dan Subrange","2020-11-22T13:49:03.000Z",{"id":49},"c0e9e3ac-75df-4af6-86c5-2c136dc47233",[51,52,53,54],"pascal","tipe-data","struktur-data","konsep",3,null,"Pada kesempatan sebelumnya kita telah membahas tentang [tipe data standar](https://invasikode.com/tipe-data-pascal/) pada Pascal. Sekarang kita bakal coba membuat tipe data racikan kita sendiri, yang biasa disebut sebagai tipe data bentukan pada Pascal.\n\n> 📷 *Ilustrasi: bagan hierarki klasifikasi tipe data pada bahasa Pascal dari tipe standar, bentukan pemrogram, pointer, hingga terstruktur.*\n\nDalam kelompok tipe data Pascal, tipe data bentukan (*user defined data types*) umumnya terbagi menjadi 2 jenis utama, yaitu **Enumerated** dan **Subrange.** Kira-kira apa itu **Enumerated** dan **Subrange**? mari kita bahas lebih lanjut...\n\n## Tipe Data Bentukan Enumerated\n\n**Enumerated** merupakan tipe data bentukan yang memungkinkan programmer mendeklarasikan kumpulan nilai valid dari tipe data tersebut. Contoh sederhananya adalah ketika kita membuat tipe data untuk **NamaHari** yang berisi senin, selasa, rabu, dst.\n\nEnumerated sering juga disebut sebagai **enum** saja\n\nUntuk format deklarasinya adalah sebagai berikut\n\n```\ntype\n  nama-enum = (item1, item2, item3, ...)\n```\n\nBerikut merupakan contoh penggunaan enum dalam mebuatan tipe data nama hari dan nama bulan.\n\n```pascal\nprogram enum;\nuses crt;\ntype\n  NamaHari = (senin, selasa, rabu, kamis, jumat, sabtu, minggu);\n  NamaBulan = (januari, februari, maret, april, mei, juni, juli);\nvar\n  hari: NamaHari; // variable hari bertipe NamaHari\n  bulan: NamaBulan; // variable bulan bertipe NamaBulan\nbegin\n  clrscr;\n  hari := senin;\n  bulan := juli;\n  writeln(hari, ' ', bulan);\n  readln;\nend.\n```\n\nPada contoh di atas kita membuat tipe data baru berupa **enum** dengan cara menuliskannya dibawah keyword `type`. Enum pertama adalah **NamaHari** yang berisi nama hari dari senin sampai minggu. Enum selanjutnya adalah **NamaBulan** yag berisi nama bulan dari januari sampai juli.\n\nNah langkah selanjutnya adalah menggunakan **enum** yang telah kita buat sebagai tipe data variable. Variable pertama adalah **hari** yang memiliki tipe data **NamaHari**, dan variable ke-2 adalah **bulan** yang memiliki tipe data **NamaBulan**.\n\nKedua variable tersebut hanya bisa diisikan sesuai dengan yang telah kita deklarasikan di awal. Misalnya saja jika kita mengisikan variable **bulan** dengan nilai 'desember' maka program akan error `Identifier not found \"desember\"`, karena 'desember' tidak ada pada bagian deklarasi.\n\nOh iya, pada saat pengisian variable dengan tipe data enumerated, tidak perlu menggunakan tanda petik. Karena valuenya sudah terdeklarasi sebelumnya. Analoginya sama seperti saat mengisikan nilai `true` atau `false` pada tipe data [boolean](https://invasikode.com/operasi-logika-pascal/) (Tidak ditulis 'true' atau 'false').\n\n## Tipe Data Bentukan Subrange\n\n**Subrange**, merupakan tipe data bentukan yang berisi rentang tertentu dari tipe data lain. Contohnya saja adalah nilai ujian yang memiliki rentang dari 0 sampai 100. Atau predikat nilai yang memiliki rentang dari 'A' sampai 'E'.\n\nFormat penulisan subrange bisa dituliskan langsung sebagai tipe data variable, atau dituliskan dibawah keyword `type`.\n\n```\ntype\n  nama-subrange = batas-bawah...batas-atas;\n// atau\nvar\n  nama-variable: batas-bawah...batas-atas;\n```\n\nContoh penggunaan subrange dalam penulisan nilai ujian dan predikat.\n\n```pascal\nprogram subrange;\nuses crt;\ntype\n  RentangNilai = 0..100;\n  RentangPredikat = 'A'..'E';\nvar\n  nilai: RentangNilai;\n  predikat: RentangPredikat;\nbegin\n  clrscr;\n  nilai := 78;\n  predikat := 'C';\n  writeln(nilai, ' ', predikat);\n  readln;\nend.\n```\n\nPada contoh tersebut kita membuat tipe data baru yaitu **RentangNilai** yang berisi angka 0 sampai 100, dan **RentangPredikat** yang berisi huruf 'A' sampai 'E'.\n\nSelanjutnya kita membuat variable **nilai** dengan tipe data **RentangNilai**, dan **predikat** dengan tipe data **RentangPredikat**. Kedua variable ini hanya dapat diisi dengan nilai terbatas sesuai deklarasi awal. Jika kita mencoba memasukkan nilai 200 pada variable nilai, maka program akan error.\n\nSebenarnya penulisan kode tersebut bisa disederhanakan lagi menjadi sebagai berikut.\n\n```pascal\nprogram subrange;\nuses crt;\nvar\n  nilai: 0..100;\n  predikat: 'A'..'E';\nbegin\n  clrscr;\n  nilai := 78;\n  predikat := 'C';\n  writeln(nilai, ' ', predikat);\n  readln;\nend.\n```\n\nPada kode tersebut kita hanya perlu menuliskan jangkauan nilai sebagai tipe data, tanpa mendeklarasikan lagi secara terpisah. Sepertinya terlihat lebih bersih ya hehe...\n\n## Penutup\n\nCukup sekian untuk tutorial kali ini tentang tipe data bentukan pada Pascal, semoga bermanfaat :D Pada tutorial selanjutnya kita akan membahas tentang salah satu tipe data terstruktur, yaitu [RECORD pada Pascal](https://invasikode.com/menggunakan-tipe-data-record-pada-pascal/).",[59],{"authors_id":60},{"name":61,"slug":62,"role":63,"profile_picture":56},"Daffa Izzuddin","izzudd","Writer",{"id":65,"title":66,"slug":67,"articles":68,"parent_series":99},"25","Tipe Data Bentukan","pascal-tipe-data-bentukan",[69,72,81,90],{"id":43,"title":44,"slug":45,"excerpt":46,"thumbnail_image":70,"tags":71},{"id":49},[51,52,53,54],{"id":73,"title":74,"slug":75,"excerpt":76,"thumbnail_image":77,"tags":79},"74","Menggunakan Tipe Data RECORD pada Pascal","menggunakan-tipe-data-record-pada-pascal","RECORD merupakan tipe data terstruktur pada bahasa Pascal yang terdiri dari kumpulan tipe data standar dan bentukan.",{"id":78},"92bbe4a8-316f-4549-9819-797a44472a45",[51,80,52,53],"record",{"id":82,"title":83,"slug":84,"excerpt":85,"thumbnail_image":86,"tags":88},"75","Menggunakan Tipe Data Array pada Pascal","menggunakan-tipe-data-array-pada-pascal","ARRAY merupakan struktur data yang berisi sekumpulan data dengan tipe data yang sama. Data dalam ARRAY ini dapat diakses dengan menggunakan index.",{"id":87},"50e5c328-b262-4919-aabc-1fbd607f6c2b",[51,89,52,53],"array",{"id":91,"title":92,"slug":93,"excerpt":94,"thumbnail_image":95,"tags":97},"76","Menggunakan Pointer pada Bahasa Pascal","menggunakan-pointer-pada-bahasa-pascal","Sebuah variable yang bertipe pointer nantinya hanya dapat berisi sebuah alamat dari variable lain.",{"id":96},"f98ed665-5806-4fb3-ba62-3cca57077b56",[51,98,52,54],"pointer",{"id":100,"title":29,"slug":30,"parent_series":101,"children_series":103},"14",{"id":102,"title":22,"slug":23,"parent_series":56},"1",[104,108,112,113],{"id":105,"title":106,"slug":107,"cover_image":56},"23","Berkenalan dengan Bahasa Pascal","pascal-intro",{"id":109,"title":110,"slug":111,"cover_image":56},"24","Struktur Kontrol","pascal-struktur-kontrol",{"id":65,"title":66,"slug":67,"cover_image":56},{"id":114,"title":115,"slug":116,"cover_image":56},"26","Pemrograman Prosedural","pascal-pemrograman-prosedural","\u003Cp>Pada kesempatan sebelumnya kita telah membahas tentang \u003Ca href=\"https://invasikode.com/tipe-data-pascal/\">tipe data standar\u003C/a> pada Pascal. Sekarang kita bakal coba membuat tipe data racikan kita sendiri, yang biasa disebut sebagai tipe data bentukan pada Pascal.\u003C/p>\n\u003Cblockquote>\n\u003Cp>📷 \u003Cem>Ilustrasi: bagan hierarki klasifikasi tipe data pada bahasa Pascal dari tipe standar, bentukan pemrogram, pointer, hingga terstruktur.\u003C/em>\u003C/p>\n\u003C/blockquote>\n\u003Cp>Dalam kelompok tipe data Pascal, tipe data bentukan (\u003Cem>user defined data types\u003C/em>) umumnya terbagi menjadi 2 jenis utama, yaitu \u003Cstrong>Enumerated\u003C/strong> dan \u003Cstrong>Subrange.\u003C/strong> Kira-kira apa itu \u003Cstrong>Enumerated\u003C/strong> dan \u003Cstrong>Subrange\u003C/strong>? mari kita bahas lebih lanjut...\u003C/p>\n\u003Ch2 id=\"tipe-data-bentukan-enumerated\">Tipe Data Bentukan Enumerated\u003C/h2>\n\u003Cp>\u003Cstrong>Enumerated\u003C/strong> merupakan tipe data bentukan yang memungkinkan programmer mendeklarasikan kumpulan nilai valid dari tipe data tersebut. Contoh sederhananya adalah ketika kita membuat tipe data untuk \u003Cstrong>NamaHari\u003C/strong> yang berisi senin, selasa, rabu, dst.\u003C/p>\n\u003Cp>Enumerated sering juga disebut sebagai \u003Cstrong>enum\u003C/strong> saja\u003C/p>\n\u003Cp>Untuk format deklarasinya adalah sebagai berikut\u003C/p>\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/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C/span>\n    \u003C/div>\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=\"type%0A%20%20nama-enum%20%3D%20(item1%2C%20item2%2C%20item3%2C%20...)\" 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/path>\n      \u003C/svg>\n      \u003Cspan class=\"copy-text\">Copy\u003C/span>\n    \u003C/button>\n  \u003C/div>\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>type\n  nama-enum = (item1, item2, item3, ...)\u003C/code>\u003C/pre>\n  \u003C/div>\n\u003C/div>\u003Cp>Berikut merupakan contoh penggunaan enum dalam mebuatan tipe data nama hari dan nama bulan.\u003C/p>\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/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">PASCAL\u003C/span>\n    \u003C/div>\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%20enum%3B%0Auses%20crt%3B%0Atype%0A%20%20NamaHari%20%3D%20(senin%2C%20selasa%2C%20rabu%2C%20kamis%2C%20jumat%2C%20sabtu%2C%20minggu)%3B%0A%20%20NamaBulan%20%3D%20(januari%2C%20februari%2C%20maret%2C%20april%2C%20mei%2C%20juni%2C%20juli)%3B%0Avar%0A%20%20hari%3A%20NamaHari%3B%20%2F%2F%20variable%20hari%20bertipe%20NamaHari%0A%20%20bulan%3A%20NamaBulan%3B%20%2F%2F%20variable%20bulan%20bertipe%20NamaBulan%0Abegin%0A%20%20clrscr%3B%0A%20%20hari%20%3A%3D%20senin%3B%0A%20%20bulan%20%3A%3D%20juli%3B%0A%20%20writeln(hari%2C%20'%20'%2C%20bulan)%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/path>\n      \u003C/svg>\n      \u003Cspan class=\"copy-text\">Copy\u003C/span>\n    \u003C/button>\n  \u003C/div>\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 enum;\nuses crt;\ntype\n  NamaHari = (senin, selasa, rabu, kamis, jumat, sabtu, minggu);\n  NamaBulan = (januari, februari, maret, april, mei, juni, juli);\nvar\n  hari: NamaHari; // variable hari bertipe NamaHari\n  bulan: NamaBulan; // variable bulan bertipe NamaBulan\nbegin\n  clrscr;\n  hari := senin;\n  bulan := juli;\n  writeln(hari, ' ', bulan);\n  readln;\nend.\u003C/code>\u003C/pre>\n  \u003C/div>\n\u003C/div>\u003Cp>Pada contoh di atas kita membuat tipe data baru berupa \u003Cstrong>enum\u003C/strong> dengan cara menuliskannya dibawah keyword \u003Ccode>type\u003C/code>. Enum pertama adalah \u003Cstrong>NamaHari\u003C/strong> yang berisi nama hari dari senin sampai minggu. Enum selanjutnya adalah \u003Cstrong>NamaBulan\u003C/strong> yag berisi nama bulan dari januari sampai juli.\u003C/p>\n\u003Cp>Nah langkah selanjutnya adalah menggunakan \u003Cstrong>enum\u003C/strong> yang telah kita buat sebagai tipe data variable. Variable pertama adalah \u003Cstrong>hari\u003C/strong> yang memiliki tipe data \u003Cstrong>NamaHari\u003C/strong>, dan variable ke-2 adalah \u003Cstrong>bulan\u003C/strong> yang memiliki tipe data \u003Cstrong>NamaBulan\u003C/strong>.\u003C/p>\n\u003Cp>Kedua variable tersebut hanya bisa diisikan sesuai dengan yang telah kita deklarasikan di awal. Misalnya saja jika kita mengisikan variable \u003Cstrong>bulan\u003C/strong> dengan nilai &#39;desember&#39; maka program akan error \u003Ccode>Identifier not found &quot;desember&quot;\u003C/code>, karena &#39;desember&#39; tidak ada pada bagian deklarasi.\u003C/p>\n\u003Cp>Oh iya, pada saat pengisian variable dengan tipe data enumerated, tidak perlu menggunakan tanda petik. Karena valuenya sudah terdeklarasi sebelumnya. Analoginya sama seperti saat mengisikan nilai \u003Ccode>true\u003C/code> atau \u003Ccode>false\u003C/code> pada tipe data \u003Ca href=\"https://invasikode.com/operasi-logika-pascal/\">boolean\u003C/a> (Tidak ditulis &#39;true&#39; atau &#39;false&#39;).\u003C/p>\n\u003Ch2 id=\"tipe-data-bentukan-subrange\">Tipe Data Bentukan Subrange\u003C/h2>\n\u003Cp>\u003Cstrong>Subrange\u003C/strong>, merupakan tipe data bentukan yang berisi rentang tertentu dari tipe data lain. Contohnya saja adalah nilai ujian yang memiliki rentang dari 0 sampai 100. Atau predikat nilai yang memiliki rentang dari &#39;A&#39; sampai &#39;E&#39;.\u003C/p>\n\u003Cp>Format penulisan subrange bisa dituliskan langsung sebagai tipe data variable, atau dituliskan dibawah keyword \u003Ccode>type\u003C/code>.\u003C/p>\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/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C/span>\n    \u003C/div>\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=\"type%0A%20%20nama-subrange%20%3D%20batas-bawah...batas-atas%3B%0A%2F%2F%20atau%0Avar%0A%20%20nama-variable%3A%20batas-bawah...batas-atas%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/path>\n      \u003C/svg>\n      \u003Cspan class=\"copy-text\">Copy\u003C/span>\n    \u003C/button>\n  \u003C/div>\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>type\n  nama-subrange = batas-bawah...batas-atas;\n// atau\nvar\n  nama-variable: batas-bawah...batas-atas;\u003C/code>\u003C/pre>\n  \u003C/div>\n\u003C/div>\u003Cp>Contoh penggunaan subrange dalam penulisan nilai ujian dan predikat.\u003C/p>\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/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">PASCAL\u003C/span>\n    \u003C/div>\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%20subrange%3B%0Auses%20crt%3B%0Atype%0A%20%20RentangNilai%20%3D%200..100%3B%0A%20%20RentangPredikat%20%3D%20'A'..'E'%3B%0Avar%0A%20%20nilai%3A%20RentangNilai%3B%0A%20%20predikat%3A%20RentangPredikat%3B%0Abegin%0A%20%20clrscr%3B%0A%20%20nilai%20%3A%3D%2078%3B%0A%20%20predikat%20%3A%3D%20'C'%3B%0A%20%20writeln(nilai%2C%20'%20'%2C%20predikat)%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/path>\n      \u003C/svg>\n      \u003Cspan class=\"copy-text\">Copy\u003C/span>\n    \u003C/button>\n  \u003C/div>\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 subrange;\nuses crt;\ntype\n  RentangNilai = 0..100;\n  RentangPredikat = 'A'..'E';\nvar\n  nilai: RentangNilai;\n  predikat: RentangPredikat;\nbegin\n  clrscr;\n  nilai := 78;\n  predikat := 'C';\n  writeln(nilai, ' ', predikat);\n  readln;\nend.\u003C/code>\u003C/pre>\n  \u003C/div>\n\u003C/div>\u003Cp>Pada contoh tersebut kita membuat tipe data baru yaitu \u003Cstrong>RentangNilai\u003C/strong> yang berisi angka 0 sampai 100, dan \u003Cstrong>RentangPredikat\u003C/strong> yang berisi huruf &#39;A&#39; sampai &#39;E&#39;.\u003C/p>\n\u003Cp>Selanjutnya kita membuat variable \u003Cstrong>nilai\u003C/strong> dengan tipe data \u003Cstrong>RentangNilai\u003C/strong>, dan \u003Cstrong>predikat\u003C/strong> dengan tipe data \u003Cstrong>RentangPredikat\u003C/strong>. Kedua variable ini hanya dapat diisi dengan nilai terbatas sesuai deklarasi awal. Jika kita mencoba memasukkan nilai 200 pada variable nilai, maka program akan error.\u003C/p>\n\u003Cp>Sebenarnya penulisan kode tersebut bisa disederhanakan lagi menjadi sebagai berikut.\u003C/p>\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/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black/40 inline-block\">\u003C/span>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">PASCAL\u003C/span>\n    \u003C/div>\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%20subrange%3B%0Auses%20crt%3B%0Avar%0A%20%20nilai%3A%200..100%3B%0A%20%20predikat%3A%20'A'..'E'%3B%0Abegin%0A%20%20clrscr%3B%0A%20%20nilai%20%3A%3D%2078%3B%0A%20%20predikat%20%3A%3D%20'C'%3B%0A%20%20writeln(nilai%2C%20'%20'%2C%20predikat)%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/path>\n      \u003C/svg>\n      \u003Cspan class=\"copy-text\">Copy\u003C/span>\n    \u003C/button>\n  \u003C/div>\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 subrange;\nuses crt;\nvar\n  nilai: 0..100;\n  predikat: 'A'..'E';\nbegin\n  clrscr;\n  nilai := 78;\n  predikat := 'C';\n  writeln(nilai, ' ', predikat);\n  readln;\nend.\u003C/code>\u003C/pre>\n  \u003C/div>\n\u003C/div>\u003Cp>Pada kode tersebut kita hanya perlu menuliskan jangkauan nilai sebagai tipe data, tanpa mendeklarasikan lagi secara terpisah. Sepertinya terlihat lebih bersih ya hehe...\u003C/p>\n\u003Ch2 id=\"penutup\">Penutup\u003C/h2>\n\u003Cp>Cukup sekian untuk tutorial kali ini tentang tipe data bentukan pada Pascal, semoga bermanfaat :D Pada tutorial selanjutnya kita akan membahas tentang salah satu tipe data terstruktur, yaitu \u003Ca href=\"https://invasikode.com/menggunakan-tipe-data-record-pada-pascal/\">RECORD pada Pascal\u003C/a>.\u003C/p>\n","",[120,133,148,160],{"id":121,"title":122,"slug":123,"excerpt":124,"thumbnail_image":125,"tags":127},"46","Mengapa C Mulai Ditinggalkan: Duel Filosofi Keamanan Rust vs Kesederhanaan Zig","mengapa-c-mulai-ditinggalkan-duel-filosofi-rust-vs-zig","Pernah denger kalau sekitar 70% celah keamanan kritis software modern itu asalnya dari bahasa C? Iya, bahasa yang udah jadi fondasi internet ini 😅. Yuk, kita bedah duel filosofi Rust vs Zig dan cari tahu mana yang pas buat proyek kalian!",{"id":126},"1942a5c9-c1f6-476d-9913-768f78d9d8eb",[128,129,130,131,132],"system-programming","rust","zig","c","memory-safety",{"id":134,"title":135,"slug":136,"excerpt":137,"thumbnail_image":138,"tags":140},"45","Rate Limiting Algorithms: Token Bucket vs Leaky Bucket vs Sliding Window","rate-limiting-algorithms-token-bucket-leaky-bucket-sliding-window","Udah tahu kenapa *rate limiting* itu wajib, tapi masih bingung beda Token Bucket, Leaky Bucket, Fixed Window, dan Sliding Window? Yuk, kita adu empat algoritma ini bareng-bareng dan cari tahu mana yang paling pas buat API kalian!",{"id":139},"0e0ed26d-20c6-443c-bde1-4a6200f6f801",[141,142,143,144,145,146,147],"backend","system-design","rate-limiting","redis","api-gateway","architecture","traffict-management",{"id":149,"title":150,"slug":151,"excerpt":152,"thumbnail_image":153,"tags":155},"44","Transactional Outbox Pattern: Solusi Konsistensi Database dan Message Broker Tanpa 2PC","transactional-outbox-pattern-konsistensi-database-message-broker","Pernah nggak kalian lihat pesanan udah masuk database, tapi email konfirmasinya nggak pernah kekirim? Itu gejala *dual-write problem*. Yuk, kita bedah Transactional Outbox Pattern biar data dan *event* kalian nggak lagi berselisih paham!",{"id":154},"e3c617fd-1486-4b82-b937-94fbec846c77",[141,156,146,157,158,142,159],"microservices","database","message-broker","postgresql",{"id":161,"title":162,"slug":163,"excerpt":164,"thumbnail_image":165,"tags":167},"43","Dead Letter Queue (DLQ) & Retry Policy: Menyelamatkan Pesan Nyasar di RabbitMQ Tanpa Bikin Worker Macet","dead-letter-queue-retry-policy-rabbitmq-resilient-messaging","Pernah nggak sih, *worker* kalian nolak satu pesan terus-terusan sampai CPU melonjak 100%? Itu namanya *poison message loop*, jebakan klasik di RabbitMQ. Yuk, kita bahas cara pasang *retry policy* dan *dead letter queue* yang bener!",{"id":166},"6c0a7ead-4841-4073-b29e-df7ae0f2aa3c",[168,158,141,146,156,169,170],"rabbitmq","async","python",[172,176,179],{"text":173,"depth":174,"id":175},"Tipe Data Bentukan Enumerated",2,"tipe-data-bentukan-enumerated",{"text":177,"depth":174,"id":178},"Tipe Data Bentukan Subrange","tipe-data-bentukan-subrange",{"text":180,"depth":174,"id":181},"Penutup","penutup",1791045066605]