8 Hal Yang Membuat Perl Relatif Unreadable

  1. 1. Titik Berat Bahasa Pada Ekspresivitas
  2. 2. Prefiks Variabel Yang Berbeda-beda
  3. 3. $_, $/, dan Segerombolan !@#*\()% Lainnya
  4. 4. Regular Expression
  5. 5. Kultur Serba Ringkas
  6. 6. Idiom
  7. 7. Sintaks OO Yang “Mengerikan”
  8. 8. Lingkaran Setan
  9. Kesimpulan

 

Perl—the only programming language that looks the same both before and after RSA encryption.

Perl seringkali dijuluki ‘write only language.’ Program yang ditulis dalam Perl seringkali dikatai ‘line noise.’ Dan programer Perl seringkali disebut ‘hacker’ karena mampu menulis kode yang kriptik. (Atau mungkin sebaiknya ditulis: tidak mampu menulis kode yang dapat dibaca orang lain?)

Pertanyaannya: apakah semua itu benar? Apakah Perl memang unreadable?

Tentu saja pertanyaan empat kata seperti di atas bisa menghasilkan jawaban ribuan kata dan debat ratusan thread. Readability juga sesuatu yang cukup subjektif. Bergantung pada selera dan mata orang.

Tapi karena Perl dari dulu sering jadi bahan pembicaraan seputar readability, ada kemungkinan memang ada sesuatu yang “salah” padanya.

Dalam artikel kali ini, saya akan mencoba mengemukakan poin-poin opini saya sendiri mengenai hal-hal yang berpotensi mengurangi readability program Perl. Meskipun rata-rata ini sudah jadi “rahasia umum”, berhubung ini tetap opini pribadi, Anda selalu bebas untuk setuju atau tidak setuju.

1. Titik Berat Bahasa Pada Ekspresivitas

A real programmer can write assembly in any language.—Larry Wall

Poin pertama adalah titik berat desain bahasa itu sendiri. Berbeda sekali dengan Python yang diturunkan dari bahasa untuk pendidikan, Perl diramu dari beberapa tool Unix yang dicampur jadi satu. Titik berat Perl adalah kepraktisan (P pada Perl = “practical”) dan ekspresivitas dan keringkasan. Belum lagi, Larry Wall—yang punya latar belakang pendidikan linguistik, bukan computer science—memang menganut faham bahwa bahasa pemrograman mirip-mirip dengan bahasa manusia. Karena itu sintaks Perl kadangkala kompleks, sulit diparse, atau tata bahasanya ambigu (mirip-mirip bahasa Inggris). Semuanya demi mencapai ekspresivitas tapi seringkali mengorbankan readability.

TMTOWTDI (“There Is More Than One Way To Do It”) adalah salah satu pernyataan klasik yang memberi indikasi bahwa ekspresivitas amat amat penting di Perl. Karena itu, di Perl tidak berkembang satu gaya koding standar tunggal. Tiap software house, tiap komunitas, tiap programer mungkin punya “dialek” dan “ekspresi-ekspresi favoritnya” sendiri-sendiri. Dan ini justru disukai oleh Larry.

2. Prefiks Variabel Yang Berbeda-beda

Keberadaan simbol pada variabel (seperti prefiks $ di Perl dan PHP atau sufiks % dan $ di Basic) bisa membantu kita secara visual dalam membedakan mana variabel dan mana elemen bahasa lain. Prefiks/sufiks juga bisa melindungi menjadi pembeda variabel dan kata kunci sehingga kata-kata umum seperti for, if, begin, atau end bisa kita pakai sebagai nama variabel.

Tapi Perl tidak berhenti sampai situ. Berbeda dari PHP yang hanya menggunakan prefiks $, Perl punya tiga prefiks: $ untuk skalar, @ untuk array, % untuk hash. Tapi, untuk mengakses elemen array atau hash, digunakan $var[i] dan $var{i}. Sampai di sini masih cukup bisa diterima karena elemen array/hash adalah skalar. Tapi, Perl juga punya array slice dan hash slice, yang menggunakan sintaks @var[…] dan @var{…}. Tidak cukup hanya itu saja, mulai Perl 5 ada referensi yang memperkenalkan sintaks seperti $var->[], $var->{}, @$var, %$var, @{$var}[], dsb. Ini semua amat membuat frustasi pemula. Apalagi jika sudah menyangkut struktur data kompleks.

Prefiks yang berbeda-beda ini pun akan dipertahankan di Perl 6.

3. $_, $/, dan Segerombolan !@#*\()% Lainnya

Sesuai filosofi “kemiripan bahasa pemrograman dan bahasa manusia”, maka di Perl ada $_ yang banyak digunakan di mana-mana sebagai “kata ganti.” Banyak fungsi builtin Perl yang bukan saja membaca tapi menulisi variabel ini secara implisit jika kita tidak menyebutkan argumen. Seorang awam atau pemula Perl mungkin saja akan pusing tujuh keliling dengan potongan kode ini:

while (<>) {
chomp;
$_ = ucfirst unless $_ eq uc;
/perl/ and print;
}

Karena fungsi dan operator nampaknya tidak diberi argumen. Ternyata, secara diam-diam mereka membaca dan menulis variabel default $_ di belakang layar.

Perl juga tidak punya hanya $_. Ada segerombolan variabel spesial (variabel simbol) lainnya yang punya efek/makna masing-masing. Kehadiran variabel-variabel ini memiliki beberapa efek samping. Pertama, meskipun praktis untuk skrip pendek, bagi program besar kadang-kadang menimbulkan masalah. $/ memiliki efek global sehingga jika sebuah fungsi ingin membaca sebuah baris maka bisa saja yang tertelan adalah sebuah paragraf atau seluruh isi file sekaligus. Untuk memastikan, si fungsi harus membatalkan efek $/ secara lokal dulu dengan perintah local $/="\n"; Ini tentu saja menjengkelkan kalau harus sering-sering dilakukan. Rata-rata variabel spesial lain juga memiliki efek global.

Kedua, program yang secara ekstensif menggunakan variabel spesial akan berkesan tak terbaca karena persentasi jumlah huruf (a-z) pada program menjadi berkurang. Seperti diketahui, variabel spesial seluruhnya terdiri dari simbol (@_, $:, _, dsb). Dan butuh seorang yang mengerti Perl untuk tahu arti dari tiap-tiap variabel simbol ini. Alternatif nama panjang variabel spesial (use English;) kurang efektif karena jarang dipakai. Bayangkan, menghafalkan belasan simbol saja sudah ruwet, apalagi kalau harus juga mengingat nama panjangnya sekaligus.

4. Regular Expression

Meskipun bukan salah Perl (karena regex memang amat ringkas dan sulit dibaca), namun kehadiran operator quoting custom (m#...#, qr<…>, s{…}{…}igmx) bisa membuat seorang pemula Perl kesulitan menemukan mana batas regular expression dan mana operator Perl lainnya. Regex juga begitu banyak dipakai di Perl sehingga tak aneh menemukan program yang 30-40% isinya adalah murni regex!

5. Kultur Serba Ringkas

Seperti telah disebutkan sebelumnya tentang titik berat akan keringkasan, di Perl nampaknya segala sesuatu yang lebih ringkas akan lebih dihargai/lebih cool. Ini dipengaruhi juga kultur Unix yang memang secara historis banyak menggunakan nama-nama yang kelewat pendek (ls, /bin, /dev/ttyS0, chsh, dsb). Ditambah lagi program Perl rata-rata berukuran pendek sehingga nama variabelnya pun ikut pendek-pendek.

Sejauh pengalaman saya melihat source code bahasa skripting, programer Perl termasuk yang paling suka/sering menyingkat-nyingkat nama variabel, fungsi, program, sehingga tidak jelas artinya. Untuk singkatan-singkatan yang telah umum memang tidak mengapa, seperti $prog atau $dir. Tapi saya seringkali menjumpai programer Perl menulis $prg ketimbang $prog atau $program, $xyr ketimbang $xyear, $acctnam ketimbang $account_name, dsb.

6. Idiom

Lagi-lagi karena filosofi “bahasa alamiah manusia” dan titik berat pada ekspresivitas, di Perl banyak dimasukkan idiom-idiom ringkas yang memaksa bahkan seorang programer Perl pemula untuk memutar-mutar otak karena tidak tahu apa artinya. Contoh paling umum adalah penggunaan operator diamond (<>) untuk membaca masukan:

print while <>;

di mana <> punya arti khusus yaitu membaca dari STDIN atau dari sekumpulan file yang disebutkan di argumen. Atau penggunaan hash untuk set:

$words{$w}++ while  ($w) = $text =~ m#(\w+)#g;

Kadang-kadang idiom di Perl juga begitu aneh dan kriptik bagi kaum awam. Misalnya, untuk memflush buffer filehandle:

select((select(OUTPUT_HANDLE), $| = 1)[0]); 

Bukan hanya itu saja, semakin familiar seseorang dengan Perl, semakin sering ia akan menggunakan idiom. Ini indikasi positif bagi si programernya sendiri, menunjukkan bahwa ia telah lebih menguasai bahasa Perl, namun bisa semakin menjauhkan programnya dari readability oleh orang awam/pemula.

7. Sintaks OO Yang “Mengerikan”

Karena Perl 4 sama sekali tidak mengenal konsep OO seperti objek dan kelas, dan Perl 5 harus backward compatible dengan versi sebelumnya, maka diciptakanlah sintaks OO yang merupakan sebuah “hack” yang cukup cerdas namun tidak manusiawi bagi pemula. Pemula harus berkenalan dengan makhluk bernama bless yaitu untuk mengasosiasikan sebuah referensi dengan package. Padahal bless sama sekali bukan konsep OO.

8. Lingkaran Setan

Bahasa pemrograman yang tidak memaksakan cukup banyak disiplin pada programernya akan mendorong si programer untuk lebih tidak teratur dalam koding. Sehingga si programer memakai fasilitas-fasilitas di bahasa pemrograman yang memudahkan/praktis tapi lagi-lagi kriptik dan mengurangi readability. Sehingga akan lebih sulit lagi menerapkan disiplin pada programer. Dan seterusnya. Kontras dengan Python misalnya, yang cukup rigid dalam hal sintaks. Sehingga semua program nampak terlihat sama karena kebanyakan programer memang melakukan/menulis dengan cara yang sama.

Kesimpulan

Perl punya banyak cacat. Tapi gading mana yang tak retak? Kalau Anda sedang mempertimbangkan mempelajari Perl, saran saya: lakukanlah. Perl telah membuat hari-hari saya ceria karena saya dapat membuat oneliner-oneliner “sakti” yang butuh belasan-puluhan baris jika harus dikoding dalam shell atau C atau Python. Perl juga akan mengajarkan Anda banyak hal tentang penggunaan regex, tentang ekspresivitas, dan—siapa sangka—tentang readability juga. Tak ada kata tidak untuk belajar. (sh)

[Last-Modified: Wed Apr 9 01:15:49 2003]


Copyright © 2003 PT Masterweb Indonesia
Hak cipta dilindungi undang-undang.