Transcription of Dasar Haskell
1 Dasar HaskellBacaan tambahan: Learn You a Haskell for Great Good, bab 2 Real World Haskell , bab 1 dan 2 Apa itu Haskell ? Haskell adalah bahasa pemrograman yanglazydan fungsional yang diciptakanpada akhir tahun 80-an oleh komite akademis. Pada saat itu, ada banyakbahasa pemrograman fungsional berseliweran dan setiap orang punya favorit-nya sendiri-sendiri sehingga mempersulit pertukaran ide. Sekelompok orangakhirnya berkumpul bersama dan mendesain bahasa baru dengan mengambilbeberapa ide terbaik dari bahasa yang sudah ada (dan menambah beberapa idebaru milik mereka sendiri). Lahirlah , seperti apa Haskell ? Haskell itu:FungsionalTidak ada pengertian tepat dan baku untuk istilah fungsional.
2 Tapi ketikakita mengatakan bahwa Haskell adalah bahasa pemrograman fungsional, kitabiasanya mengingat dua hal ini: Fungsi-nyafirst-class, yakni fungsi adalah nilai yang bisa digunakanlayaknya nilai-nilai yang lain. Program Haskell lebih bermaknamengevaluasi ekspresiketimbangmengeksekusi keduanya menghasilkan cara berpikir tentang pemrograman yangsepenuhnya berbeda. Kebanyakan waktu kita di semester ini akan dihabiskanmengeksplorasi cara berpikir di Haskell selalureferentially transparent, yakni: Tanpa mutasi! Semuanya (variable, struktur ) immutable Ekspresi tidak memiliki efek samping (seperti memperbarui variabelglobal atau mencetak ke layar).
3 Memanggil fungsi yang sama dengan argumen yang sama selalu meng-hasilkan output yang sama setiap ini mungkin terdengar gila. Bagaimana mungkin bisa mengerjakan sesuatutanpa mutasi dan efek samping? Tentunya ini memerlukan perubahan caraberpikir (jika kalian terbiasa dengan paradigma pemrograman berbasis objek).Tapi setelah kalian bisa berubah, akan ada beberapa keuntungan menakjubkan:1 Equational reasoningdanrefactoring. Di Haskell kita bisa menggantiequals dengan equals , seperti yang kita pelajari di aljabar. Parallelism. Mengevaluasi ekspresi secara paralel amatlah mudah ketikamereka dijamin tidak mempengaruhi yang lain.
4 Lebih sedikit sakit kepala. Sederhananya, efek tanpa batas dan aksi dikejauhan membuat program sulit di-debug, di-maintain, dan Haskell , ekspresi tidak akan dievaluasi sampai hasilnya benar-benar dibu-tuhkan. Hal ini adalah keputusan sederhana dengan konsekuensi yang meram-bat kemana-mana, yang akan kita eksplorasi sepanjang semester ini. Beberapakonsekuensinya antara lain: Mendefinisikancontrol structurebaru lewat pendefinisian fungsi menjadimudah. Memungkinkan definisi dan pengerjaan dengan struktur data tak hingga. Mengakibatkan model pemrograman yang lebih komposisional (lihatwholemeal programmingdi bawah). Salah satu akibat negatif utamanya adalah analisa terhadap penggunaanruang dan waktu menjadi lebih typedSetiap ekspresi di Haskell memiliki tipe, dan tipe-tipe tersebut semuanyadiperiksa pada waktu kompilasi.
5 Program dengan kesalahan tipe tidak akandikompilasi, apalagi kuliah ini, kita akan fokus pada tiga tema type systembisa terlihat mengganggu. Faktanya, di bahasa seperti C++dan Java, mereka memang mengganggu. Tapi bukanstatic type system-nya yangmengganggu, melainkantype systemdi C++ dan Java yang kurang ekspresif!Semester ini kita akan melihat lebih dekat padatype systemdi Haskell yang: Membantu mengklarifikasi pemikiran dan ekspresi struktur programLangkah pertama dalam menulis program Haskell biasanya adalah denganmenulis semua tipenya. Karenatype systemHaskell sangat ekspresif, langkahdesain non-trivial ini akan sangat membantu dalam mengklarifikasi pemikiranseseorang tentang programnya.
6 Menjadi salah satu bentuk dokumentasi2 Dengan type system yang ekspresif, hanya dengan melihat tipe pada suatufungsi mampu memberitahu kalian tentang apa yang mungkin dikerjakan fungsitersebut dan bagaimana ia bisa digunakan, bahkan sebelum kalian membacadokumentasinya satu kata pun. Mengubahrun-time errorsmenjadicompile-time errorsJauh lebih baik jika kita bisa memperbaiki kesalahan di depan daripada harusmenguji sebanyak mungkin dan berharap yang terbaik. Jika program iniberhasil di-compile, maka program tersebut pasti benar sering dianggap can-daan (karena masih mungkin untuk memiliki kesalahan di logika meskipun pro-gramnyatype-correct), tetapi hal tersebut sering terjadi di Haskell ketimbangbahasa Don t Repeat Yourself adalah mantra yang sering didengar di dunia pemrogra-man.
7 Juga dikenal sebagai Prinsip Abstraksi , idenya adalah tidak ada yangperlu diduplikasi: setiap ide, algoritma, dan potongan data harus muncul tepatsatu kali di kode kalian. Mengambil potongan kode yang mirip dan memfak-torkan kesamaannya sering disebut sebagai proses sangatlah bagus dalam abstraksi: fitur sepertiparametric polymorphism,fungsihigher-order, dantype classsemuanya membantu melawan pengulanganyang tak perlu. Perjalanan kita dalam semester ini sebagian besar akan meru-pakan perjalanan dari yang spesifik menuju ke yang abstrakWholemeal programmingSatu lagi tema yang akan kita eksplorasi ialahwholemeal programming.
8 Berikutadalah sebuah kuotasi dari Ralf Hinze: Bahasa pemrograman fungsional unggul diwholemeal programming,istilah yang diciptakan oleh Geraint programmingberarti berpikir besar dan menyeluruh. Bekerja dengan seluruh listsecara utuh ketimbang barisan elemen-elemennya; mengembangkanruang solusi ketimbang solusi individual; membayangkan sebuahgraphketimbangpathtunggal. Pendekatanwholemealseringkalimenawarkan perspektif baru terhadap masalah yang diberikan. Halini juga dengan sempurna dilengkapi dengan ide dari pemrogra-man proyektif: pertama selesaikan masalah yang lebih umum, laluekstrak bagian dan potongan yang menarik dengan mentransfor-masikan masalah umum tadi ke yang masalah yang lebih spesifik.
9 Sebagai contoh, perhatikanpseudocodeberikut ini di bahasa C/Java-ish:int acc = 0;for ( int i = 0; i < ; i++ ) {acc = acc + 3 * lst[i];}3 Kode ini menderita apa yang dikatakan Richard Bird dengan istilah indexi-ties , yakni kita harus khawatir terhadap detaillow-leveldari iterasi array den-gan tetap mencatat indeks saat ini. Kode tersebut juga menggabungkan apayang baiknya dipisahkan sebagai dua operasi berbeda: mengalikan setiap itemdengan 3, dan menjumlahkan semua Haskell , kita cukup menuliskansum (map (3*) lst)Semester ini kita akan mengeksplorasi pergeseran cara berpikir dengan carapemrograman seperti ini, dan mememeriksa bagaimana dan mengapa Haskellmembuatnya menjadi HaskellFile ini adalah dokumenliterateHaskell.
10 Baris yang diawali dengan > danspasi (lihat dibawah) merupakan kode. Lainnya (seperti paragraf ini) adalahkomentar. Tugas pemrograman kalian tidak harus berupaliteratehaskell,meskipun diperbolehkan jika kalian mau. DokumenliterateHaskell , sedangkan kode sumbernon-literateHaskell berekstensi . dan variabelBerikut ini adalah kode Haskell :x ::Intx=3-- Perhatikan bahwa komentar (non-literate) normal diawali dengan dua tanda strip{- atau diapit dalam pasangankurung kurawal/strip. -}Kode diatas mendeklarasikan variabelxdengan tipeInt(:: diucapkan memi-liki tipe ) dan mendeklarasikan nilaixmenjadi3. Perhatikan bahwa nilai iniakan menjadi nilaixselamanya (paling tidak dalam program kita saja).