13 Januari 2012

Mengapa tipe parameter fungsi sebaiknya pointer?

Hal ini berkaitan dengan efisiensi memori. Nilai parameter
bisa jadi berupa struktur yang sangat besar. Dengan menggunakan
pointer maka ukuran untuk menunjuk struktur apapun akan selalu
sama, seukuran pointer.

Sementara jika parameternya merupakan tipe bukan pointer
maka diperlukan memory untuk mengkopi struktur tersebut
yang bisa jadi sangat besar, dan ini adalah pemborosan.

Akumulator

Pada topik pelajaran pemrograman rekursif, akan kita jumpai
dua macam pola; dengan dan tanpa akumulator.
Meskipun hal ini terlihat sepele dan yang terlihat hanya
terjadi pertambahan parameter pada pola dengan akumulator,
namun jauh di dalamnya terdapat konsep yang sangat penting,
yaitu tail recursion.

Pola dengan akumulator adalah program yang menggunakan tail
recursion. Keuntungannya program semacam ini tidak menggunakan
stack dalam proses rekursifnya, sehingga bisa dikatakan dapat
membuat rekursi berapapun juga.

Pada pola tanpa akumulator, setiap melakukan rekursi harus menyimpan
pointer untuk melakukan komputasi selanjutnya setelah titik rekursi. Pointer
ini biasanya disimpan dalam stack, sementara stack adalah sumber daya
yang terbatas, sehingga jika melakukan rekursi berkali-kali makan stack
akan overflow.

Lebih jauh, pada pemrograman level bawah, pola rekursif adalah haram,
mengingat keterbatasan stack tersebut. Silahkan lihat materi sistem operasi
tentang bagaimana stack ini biasanya dialokasikan secara static.

08 Desember 2010

Kritik pedas tentang Java

Berikut ini link yang memuat kritikan pedas untuk Java dari berbagai pandangan:
Hal menarik tentang Java ini adalah peluang kerja di Amerika Serikat. Lulusan yang ahli Java kemungkinan besar akan sulit mencari pekerjaan, karena hal mudah yg bisa dilakukan di Java akan di-outsource-kan ke India atau China.
Bagaimana di Indonesia? Ya kalau memang diniatkan sebagai penerima outsource, Java mungkin pilihan yang tepat untuk SMK, Politeknik dan D3. Tapi untuk setingkat S1 saya kira dua kritik diatas cukup menjelaskan.

17 November 2010

List pada python

Pada website berikut terdapat tutorial berharga tentang list di python:
http://effbot.org/zone/python-list.htm

15 Oktober 2010

Komentar dalam program

Komentar dalam program seharusnya menjelaskan "apa maksud dari program", bukan "apa yang dilakukan program".

13 Oktober 2010

functor/3 dan arg/3 di prolog

Silahkan coba kode berikut:
$ functor(A,int,1), arg(1,A,N).
A = int(N) ?

yes

15 Mei 2009

Oh switch!

switch adalah perintah yang sangat primitif. Untuk programmer pemula pada setiap case diwajibkan menuliskan breakA demi keselamatan dan kemudahan analogi penulisan sintaks dengan deretan if-then-else.

Namun di dunia nyata, programmer yang sebenarnya akan menggunakan switch pada kemampuan aslinya. Perhatikan kode berikut, dimana break tidak digunakan:

int main(int argc, char** args){
  int a=atoi(args[1]);
  printf("%s",args[1]);
  switch(a){
   case 0:
     printf("0");
   case 1:
     printf("1");
   case 2:
     printf("2");
   default:
     printf("def");
  }
  return 0;
}


Untuk mengerti hal ini sedikit diperlukan sedikit "sejarah".
Pada pemograman assembly atau bahasa buruk lainnya(fortran, basic, c juga) ada perintah goto ke suatu label. Inilah sebenarnya yang terjadi terhadap switch dan case. switch adalah goto dan case adalah label. Oleh karena semantik switch yang mirip goto itulah maka semantik ini jarang/tidak diajarkan buat programmer pemula.

Jadi sekali switch menemukan case yang sesuai, kode-kode case dibawahnya akan dieksekusi seperti biasa. Dalam kata lain case yang cocok adalah awal eksekusi program. Karena itu diperlukan break agar setelah satu case selesai dieksekusi program langsung keluar dari switch.