[{"data":1,"prerenderedAt":292},["ShallowReactive",2],{"tag-labels":3,"site-header":4,"article-tentang-tipe-data-bentukan-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":180,"renderedTakeaway":181,"latestArticles":182,"toc":282},{"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":87,"series":88,"authors":173,"body_locale":176,"available_locales":177,"body":179,"takeway":21,"prerequisite":21},73,"Tentang Tipe Data Bentukan pada Pascal","User-Defined Data Types in Pascal","tentang-tipe-data-bentukan-pada-pascal","Tipe data bentukan atau User defined data types terbagi menjadi 2, yaitu Enumerated dan Subrange","User-defined data types in Pascal come in 2 kinds, Enumerated and Subrange, and you declare both of them yourself.","2020-11-22T13:49:03.000Z",3,[83,84,85,86],"pascal","tipe-data","struktur-data","konsep","\u002Fog\u002Ftentang-tipe-data-bentukan-pada-pascal.png",{"id":89,"title":90,"title_en":91,"slug":92,"description":93,"description_en":94,"articles":95,"children_series":152,"parent_series":153},25,"Tipe Data Bentukan","Composite Types","pascal-tipe-data-bentukan","Tipe data racikan sendiri: record, array, sampai pointer yang sering bikin pusing di awal.","Types you build yourself: record, array, and the pointer that keeps confusing everyone at first.",[96,105,120,136],{"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":87,"series":97,"authors":98},{"id":89,"title":90,"title_en":91,"slug":92},[99],{"authors_id":100},{"id":101,"name":102,"slug":103,"role":104,"profile_picture":21},1,"Daffa Izzuddin","izzudd","Writer",{"id":106,"title":107,"title_en":108,"slug":109,"excerpt":110,"excerpt_en":111,"has_translation":12,"published_at":112,"reading_time":81,"hidden_from_listing":15,"tags":113,"thumbnail_image":21,"og_image":115,"series":116,"authors":117},74,"Menggunakan Tipe Data RECORD pada Pascal","Using the RECORD Data Type in Pascal","menggunakan-tipe-data-record-pada-pascal","RECORD merupakan tipe data terstruktur pada bahasa Pascal yang terdiri dari kumpulan tipe data standar dan bentukan.","RECORD is a structured data type in Pascal, built from a collection of standard and user-defined data types.","2020-11-27T13:54:30.000Z",[83,114,84,85],"record","\u002Fog\u002Fmenggunakan-tipe-data-record-pada-pascal.png",{"id":89,"title":90,"title_en":91,"slug":92},[118],{"authors_id":119},{"id":101,"name":102,"slug":103,"role":104,"profile_picture":21},{"id":121,"title":122,"title_en":123,"slug":124,"excerpt":125,"excerpt_en":126,"has_translation":12,"published_at":127,"reading_time":128,"hidden_from_listing":15,"tags":129,"thumbnail_image":21,"og_image":131,"series":132,"authors":133},75,"Menggunakan Tipe Data Array pada Pascal","Using the Array Data Type in 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.","An ARRAY is a structure that holds a set of data with the same type, and you reach each item in it through its index.","2020-12-02T14:01:22.000Z",4,[83,130,84,85],"array","\u002Fog\u002Fmenggunakan-tipe-data-array-pada-pascal.png",{"id":89,"title":90,"title_en":91,"slug":92},[134],{"authors_id":135},{"id":101,"name":102,"slug":103,"role":104,"profile_picture":21},{"id":137,"title":138,"title_en":139,"slug":140,"excerpt":141,"excerpt_en":142,"has_translation":12,"published_at":143,"reading_time":144,"hidden_from_listing":15,"tags":145,"thumbnail_image":21,"og_image":147,"series":148,"authors":149},76,"Menggunakan Pointer pada Bahasa Pascal","Using Pointers in Pascal","menggunakan-pointer-pada-bahasa-pascal","Sebuah variable yang bertipe pointer nantinya hanya dapat berisi sebuah alamat dari variable lain.","A variable of pointer type can only hold the address of another variable, and changing it changes that other variable.","2020-12-02T14:17:47.000Z",2,[83,146,84,86],"pointer","\u002Fog\u002Fmenggunakan-pointer-pada-bahasa-pascal.png",{"id":89,"title":90,"title_en":91,"slug":92},[150],{"authors_id":151},{"id":101,"name":102,"slug":103,"role":104,"profile_picture":21},[],{"id":154,"title":64,"title_en":65,"slug":66,"parent_series":155,"children_series":156},14,{"id":101,"title":48,"title_en":48,"slug":49},[157,162,167,168],{"id":158,"title":159,"title_en":160,"slug":161,"cover_image":21},23,"Berkenalan dengan Bahasa Pascal","Getting Started with Pascal","pascal-intro",{"id":163,"title":164,"title_en":165,"slug":166,"cover_image":21},24,"Struktur Kontrol","Control Structures","pascal-struktur-kontrol",{"id":89,"title":90,"title_en":91,"slug":92,"cover_image":21},{"id":169,"title":170,"title_en":171,"slug":172,"cover_image":21},26,"Pemrograman Prosedural","Procedural Programming","pascal-pemrograman-prosedural",[174],{"authors_id":175},{"id":101,"name":102,"slug":103,"role":104,"profile_picture":21},"id",[178,176],"en","Pada kesempatan sebelumnya kita telah membahas tentang [tipe data standar](https:\u002F\u002Finvasikode.com\u002Ftipe-data-pascal\u002F) 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; \u002F\u002F variable hari bertipe NamaHari\n  bulan: NamaBulan; \u002F\u002F 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:\u002F\u002Finvasikode.com\u002Foperasi-logika-pascal\u002F) (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\u002F\u002F 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:\u002F\u002Finvasikode.com\u002Fmenggunakan-tipe-data-record-pada-pascal\u002F).\n","\u003Cp>Pada kesempatan sebelumnya kita telah membahas tentang \u003Ca href=\"https:\u002F\u002Finvasikode.com\u002Ftipe-data-pascal\u002F\">tipe data standar\u003C\u002Fa> pada Pascal. Sekarang kita bakal coba membuat tipe data racikan kita sendiri, yang biasa disebut sebagai tipe data bentukan pada Pascal.\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>📷 \u003Cem>Ilustrasi: bagan hierarki klasifikasi tipe data pada bahasa Pascal dari tipe standar, bentukan pemrogram, pointer, hingga terstruktur.\u003C\u002Fem>\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Dalam kelompok tipe data Pascal, tipe data bentukan (\u003Cem>user defined data types\u003C\u002Fem>) umumnya terbagi menjadi 2 jenis utama, yaitu \u003Cstrong>Enumerated\u003C\u002Fstrong> dan \u003Cstrong>Subrange.\u003C\u002Fstrong> Kira-kira apa itu \u003Cstrong>Enumerated\u003C\u002Fstrong> dan \u003Cstrong>Subrange\u003C\u002Fstrong>? mari kita bahas lebih lanjut...\u003C\u002Fp>\n\u003Ch2 id=\"tipe-data-bentukan-enumerated\">Tipe Data Bentukan Enumerated\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Enumerated\u003C\u002Fstrong> 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\u002Fstrong> yang berisi senin, selasa, rabu, dst.\u003C\u002Fp>\n\u003Cp>Enumerated sering juga disebut sebagai \u003Cstrong>enum\u003C\u002Fstrong> saja\u003C\u002Fp>\n\u003Cp>Untuk format deklarasinya adalah sebagai berikut\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=\"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\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>type\n  nama-enum = (item1, item2, item3, ...)\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Berikut merupakan contoh penggunaan enum dalam mebuatan tipe data nama hari dan nama bulan.\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%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\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 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; \u002F\u002F variable hari bertipe NamaHari\n  bulan: NamaBulan; \u002F\u002F variable bulan bertipe NamaBulan\nbegin\n  clrscr;\n  hari := senin;\n  bulan := juli;\n  writeln(hari, ' ', bulan);\n  readln;\nend.\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Pada contoh di atas kita membuat tipe data baru berupa \u003Cstrong>enum\u003C\u002Fstrong> dengan cara menuliskannya dibawah keyword \u003Ccode>type\u003C\u002Fcode>. Enum pertama adalah \u003Cstrong>NamaHari\u003C\u002Fstrong> yang berisi nama hari dari senin sampai minggu. Enum selanjutnya adalah \u003Cstrong>NamaBulan\u003C\u002Fstrong> yag berisi nama bulan dari januari sampai juli.\u003C\u002Fp>\n\u003Cp>Nah langkah selanjutnya adalah menggunakan \u003Cstrong>enum\u003C\u002Fstrong> yang telah kita buat sebagai tipe data variable. Variable pertama adalah \u003Cstrong>hari\u003C\u002Fstrong> yang memiliki tipe data \u003Cstrong>NamaHari\u003C\u002Fstrong>, dan variable ke-2 adalah \u003Cstrong>bulan\u003C\u002Fstrong> yang memiliki tipe data \u003Cstrong>NamaBulan\u003C\u002Fstrong>.\u003C\u002Fp>\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\u002Fstrong> dengan nilai &#39;desember&#39; maka program akan error \u003Ccode>Identifier not found &quot;desember&quot;\u003C\u002Fcode>, karena &#39;desember&#39; tidak ada pada bagian deklarasi.\u003C\u002Fp>\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\u002Fcode> atau \u003Ccode>false\u003C\u002Fcode> pada tipe data \u003Ca href=\"https:\u002F\u002Finvasikode.com\u002Foperasi-logika-pascal\u002F\">boolean\u003C\u002Fa> (Tidak ditulis &#39;true&#39; atau &#39;false&#39;).\u003C\u002Fp>\n\u003Ch2 id=\"tipe-data-bentukan-subrange\">Tipe Data Bentukan Subrange\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Subrange\u003C\u002Fstrong>, 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\u002Fp>\n\u003Cp>Format penulisan subrange bisa dituliskan langsung sebagai tipe data variable, atau dituliskan dibawah keyword \u003Ccode>type\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=\"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\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>type\n  nama-subrange = batas-bawah...batas-atas;\n\u002F\u002F atau\nvar\n  nama-variable: batas-bawah...batas-atas;\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Contoh penggunaan subrange dalam penulisan nilai ujian dan predikat.\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%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\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 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\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Pada contoh tersebut kita membuat tipe data baru yaitu \u003Cstrong>RentangNilai\u003C\u002Fstrong> yang berisi angka 0 sampai 100, dan \u003Cstrong>RentangPredikat\u003C\u002Fstrong> yang berisi huruf &#39;A&#39; sampai &#39;E&#39;.\u003C\u002Fp>\n\u003Cp>Selanjutnya kita membuat variable \u003Cstrong>nilai\u003C\u002Fstrong> dengan tipe data \u003Cstrong>RentangNilai\u003C\u002Fstrong>, dan \u003Cstrong>predikat\u003C\u002Fstrong> dengan tipe data \u003Cstrong>RentangPredikat\u003C\u002Fstrong>. 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\u002Fp>\n\u003Cp>Sebenarnya penulisan kode tersebut bisa disederhanakan lagi menjadi sebagai berikut.\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%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\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 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\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\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\u002Fp>\n\u003Ch2 id=\"penutup\">Penutup\u003C\u002Fh2>\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:\u002F\u002Finvasikode.com\u002Fmenggunakan-tipe-data-record-pada-pascal\u002F\">RECORD pada Pascal\u003C\u002Fa>.\u003C\u002Fp>\n","",[183,202,215,228,241,262],{"id":184,"title":185,"title_en":21,"slug":186,"excerpt":187,"excerpt_en":21,"has_translation":15,"published_at":188,"reading_time":189,"hidden_from_listing":15,"tags":190,"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",6,[191,192],"python","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":101,"name":102,"slug":103,"role":104,"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":189,"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",[191,209],"tuple","\u002Fog\u002Fpython-tuples.png",{"id":195,"title":196,"title_en":197,"slug":198},[213],{"authors_id":214},{"id":101,"name":102,"slug":103,"role":104,"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":189,"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",[191,222],"set","\u002Fog\u002Fpython-sets.png",{"id":195,"title":196,"title_en":197,"slug":198},[226],{"authors_id":227},{"id":101,"name":102,"slug":103,"role":104,"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":189,"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",[191,235],"dictionary","\u002Fog\u002Fpython-dictionary.png",{"id":195,"title":196,"title_en":197,"slug":198},[239],{"authors_id":240},{"id":101,"name":102,"slug":103,"role":104,"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":259},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":258,"title":35,"title_en":36,"slug":37},8,[260],{"authors_id":261},{"id":101,"name":102,"slug":103,"role":104,"profile_picture":21},{"id":263,"title":264,"title_en":265,"slug":266,"excerpt":267,"excerpt_en":268,"has_translation":12,"published_at":269,"reading_time":189,"hidden_from_listing":15,"tags":270,"thumbnail_image":21,"og_image":277,"series":278,"authors":279},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",[271,272,273,274,275,276],"multi-agent","langgraph","autogen","orkestrasi","checkpoint","llm","\u002Fog\u002Fmulti-agen-linear-atau-grafik.png",{"id":258,"title":35,"title_en":36,"slug":37},[280],{"authors_id":281},{"id":101,"name":102,"slug":103,"role":104,"profile_picture":21},[283,286,289],{"text":284,"depth":144,"id":285},"Tipe Data Bentukan Enumerated","tipe-data-bentukan-enumerated",{"text":287,"depth":144,"id":288},"Tipe Data Bentukan Subrange","tipe-data-bentukan-subrange",{"text":290,"depth":144,"id":291},"Penutup","penutup",1793295835360]