8 Hal Yang Membuat Perl Relatif Unreadable- 1. Titik Berat Bahasa Pada Ekspresivitas
- 2. Prefiks Variabel Yang Berbeda-beda
- 3. $_, $/, dan Segerombolan !@#*\()% Lainnya
- 4. Regular Expression
- 5. Kultur Serba Ringkas
- 6. Idiom
- 7. Sintaks OO Yang Mengerikan
- 8. Lingkaran Setan
- Kesimpulan
Perlthe
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 Wallyang
punya latar belakang pendidikan linguistik, bukan computer sciencememang
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, dansiapa sangkatentang readability
juga. Tak ada kata tidak untuk belajar. (sh)
[Last-Modified: Wed Apr 9 01:15:49 2003]
|