love and hate relation with java

Ok, I want to talk why I use Java, and I use a lot, and this is become one of my first priority of language choice when choosing a programming language to solve a problem.

  1. java is easy, easy compare to what? compare to c or c++, and if you can grab c or c++, and also has a understanding of oop, java is rather easy. you don’t have to care about garbage collection, you don’t have to care also about pointer, all is being taking care of. This is like driving an automatic car
  2. there are ton of API not only on default java but also there are a lot libary for doing almost anything. there are a libaray for structure data, parsing xml, cryptograph, and lot more. when you got a problem chance that someone has already solved it and put in sourceforge and it’s written in java. >:)
  3. have a superb IDE to work in it, whatever you are an eclips mania or netbeans fans, bot IDE are superb and easy to work with, and make your productivity increase (but that’s depend on how good you are :P).

But that doesn’t make me love java, I only use it because it make my life much easier. for several reason, Do you think I am one of java zealot don’t yo? guess what I don’t like java, this is the part that I don’t like about java.

  • Generics, since 1.5 java has generics and I hate it so much, making life much more confusing
  • I like freedom, and in java, your freedom is limited, everything is an object, object is first class citizen, the pricess of java universe. function, arrays, primitive is just a slave. and because of that making java is not so expressive.
  • too many xml. aka too many framework 😛
  • too many effort on server side, and making desktop technology behind, swing should have been big, applet also. this is because the myth that swing and applet is sllooow, but started in 5.0 until 7.0 I think this stuff have been taking care, the performance of swing is faster.

that’s my rant, I think I should stop right here, the conclusion is don’t love your programming language just use it as your b&&tch, use it until thera is something else that much more interesting and much more sexier :P.

doLearn(“Generics”,1);

Ketika Sun me-release Java 5.0 aka Tiger, banyak terdapat fitur2 baru, ada yang menarik, akan tetapi ada juga yang menurut saya tidak perlu, salah satu fitur yang tidak perlu itu adalah generics. Cukup hanya dengan melihat syntax-nya saja, mampu membuat saya dengan seketika membenci generics

Ada pepatah mengatakan Tidak kenal, maka tidak sayang, maka selagi ada waktu senggang, saya mencoba untuk mengoprek dan memahami generics

Generic dibuat agar para programmer java, tidak perlu melakukan casting, sewaktu mengambil object dari sebuah collection

   /**
   * print kumpulan String dalam list.
   **/
   public void printStringCollection(List list){
      String sTemp = null;
      for(int idx=0;id < list.size();idx++){
        sTemp = (String) list.get(idx);
      }
   }

seperti diliat dari code diatas, kita harus terlebih dahulu melakukan casting, dan tentu saja ada kemungkinan kita salah dalam melakukan casting dan mengakibatkan Exception sewaktu run-time. Hal ini lah yang mengakibatkan Sun memperkenalkan generics. mari kita liat bagaimana kode diatas diganti dengan menggunakan generic

  public void printStringCollection(List list){
     for(String s: list){
        System.out.println(s);
     }
     //atau dapat juga
     //String s = null;
     //for(int idx=0;idx<list.size();idx++){
     // s = list.get(i); //see without casting.
     //}
  }

Woaaaa, cooollll, what’s that with “for-in”, yup2 selain generics Tiger juga memperkenalkan jenis baru dari untuk pelengkap for-loop dengan menggunakan for-in, Akan tetapi yang paling penting adalah, kita tidak perlu menggunakan casting sewaktu berhubungan dengan collection

Diliat dari code diatas sepertinya generics tidak terlalu susah, yang penting hanya menambah “” setelah keyword collection.
is it worthed?, mungkin, hmm.. tapi setelah ini ternyata masih banyak detail2 dari generic yang harus dipelajadi seperti, extends,super, wildcards, nah kalo diliat dari tambahan hal2 yang harus dipelajari sepertinya generics hanya akan menambah tingkat kerumitan java, yang menurut saya sangat tidak perlu. Hmm… mungkin saya harus mempelajari lebih dalam lagi tentang generics,sebelum memutuskan bahwa generics memang tidak perlu :O

Ada satu hal tambahan mengenai generics, apakah dengan segala macam2 pernak pernik ini, membuat bytecode java 5.0 berbeda? ternyata tidak, generic pada java bersifat erasure, mungkin dari kata erase, jadi sewaktu compile, segala pernah-pernik tentang genericsdibuang, sehingga pada akhirnya bytecode dari java 5.0 ttp sama dengan pre-5.0