Berkenalan Dengan C# Dari Perspektif Java dan Groovy


Salah satu aktifitas yang tepat untuk dilakukan di akhir tahun 2013 ini adalah mencoba sesuatu yang belum pernah saya cicipi sebelumnya. Salah satunya adalah bahasa pemograman C# (pengucapannya seperti C sharp). Bahasa ini merupakan salah satu bahasa populer yang berjalan di .NET Platform milik Microsoft. Tim pengembang bahasa C# versi awal dipimpin oleh Anders Hejisberg yang merupakan seorang sosok penting dibalik bahasa Turbo Pascal dan Delphi. Menariknya, salah satu anggota tim yang kemudian ditarik oleh Microsoft untuk pengembangan C# adalah Neal Gafter yang terlibat dalam pengembangan bahasa Java 5.

Pada kesempatan ini, saya akan mencoba melihat seperti apa pemograman C# 4.0 (Visual Studio 2010). Tidak lupa saya akan membandingkannya dengan bahasa pemograman Java 7 yang sudah menjadi ‘kebiasaan’ sehari-hari saya. Saya juga akan turut membandingkannya dengan bahasa pemograman Groovy karena Groovy adalah sebuah upaya untuk menciptakan Java yang ‘lebih baik’. Tentu saja perbandingan yang ada bersifat subjektif dan sebagian merupakan opini atau pendapat pribadi saya.

Berikut ini adalah contoh sebuah class Mahasiswa yang saya buat dalam bahasa C#:

namespace Domain
{
    class Mahasiswa
    {
        private string nim;
        private string nama;

        public string Nim
        {
            get
            {
                return nim;
            }
            set
            {
                nim = value;
            }
        }

        public string Nama
        {
            get
            {
                return nama;
            }
            set
            {
                nama = value;
            }
        }

        public override string ToString()
        {
            return string.Format("Nim: {0}, Nama: {1}", Nim, Nama);
        }
    }
}

Untuk membuat instance baru dari class di atas, saya memakai kode program seperti berikut ini:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Domain;

namespace Latihan
{
    class Program
    {
        static void Main(string[] args)
        {
            Mahasiswa mahasiswa = new Mahasiswa();
            mahasiswa.Nim = "11223344";
            mahasiswa.Nama = "Solid Snake";
            Console.WriteLine(mahasiswa);
            Console.ReadKey();
        }
    }
}

Pada kode program di atas, saya memakai style yang disarankan untuk C# yaitu ‘aliran’ Pascal. Pada style ini, kurung kurawal buka diletakkan pada sebuah baris baru. Ini bisa membuat kode program menjadi membutuhkan lebih banyak baris. Nama sebuah property atau method selalu diawali dengan huruf kapital. Ini membuat saya merasa tidak nyaman karena saya sudah terbiasa memakai style ‘aliran’ C dimana nama variabel dan nama method selalu diawali dengan huruf non-kapital. Sebagai contoh, ini adalah versi Java-nya:

package domain;

public class Mahasiswa {

    private String nim;

    private String nama;

    public String getNim() {
        return nim;
    }

    public void setNim(String nim) {
        this.nim = nim;
    }

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

    @Override
    public String toString() {
        return String.format("Nim: %s, Nama: %s", getNim(), getNama());
    }
}

Kode program Java yang memakai class di atas akan terlihat seperti berikut ini:

package main;

import domain.Mahasiswa;

public class Program {

    public static void main(String[] args) {
        Mahasiswa mahasiswa = new Mahasiswa();
        mahasiswa.setNim("11223344");
        mahasiswa.setNama("Solid Snake");
        System.out.println(mahasiswa);
    }
}

Walaupun terbiasa memakai gaya penulisan C di Java, saya melihat bahwa kode program Java sedikit lebih rumit dibandingkan pada versi C#. Apalagi C# menyediakan automatic property sehingga kode program class Mahasiswa versi C# dapat dipersingkat lagi menjadi seperti berikut ini:

namespace Domain
{
    class Mahasiswa
    {
        public string Nim { get; set; }

        public string Nama { get; set; }

        public override string ToString()
        {
            return string.Format("Nim: {0}, Nama: {1}", Nim, Nama);
        }
    }
}

Kalau sudah begini, versi Java-nya kalah jauh dan terlihat lebih rumit. Di saat-saat seperti inilah kehadiran Groovy yang membawa perubahan bagi Java terasa berguna. Saya dapat membuat versi Groovy dari class di atas menjadi seperti berikut ini:

class Mahasiswa {

    String nim

    String nama

    public String toString() {
        "Nim: $nim, Nama: $nama"
    }

}

Mahasiswa mahasiswa = new Mahasiswa(nim: "11223344", nama: "Solid Snake")
println mahasiswa

Pada kasus ini, saya lebih memilih kode program Groovy karena cara untuk mendeklarasikan property yang lebih singkat. Selain itu, saya dapat langsung mengisi nilai property yang ada langsung pada saat membuat instance baru.

Tunggu dulu! C# juga punya initializer seperti kode program Groovy di atas, walaupun sedikit lebih rumit, seperti yang terlihat pada kode program berikut ini:

...
Mahasiswa mahasiswa = new Mahasiswa() { Nim = "11223344", Nama = "Solid Snake" };
Console.WriteLine(mahasiswa);
Console.ReadKey();
...

Sekarang, saya akan melihat pada kenyamanan pembuatan kode program.

Hanya ada sebuah IDE populer untuk pengembangan aplikasi dengan C#, yaitu Microsoft Visual Studio. Microsoft menyediakan versi terbatasnya yang gratis dalam distribusi Visual Studio Express Edition. Selain itu, mahasiswa di universitas yang memiliki kerja sama MSDN Academic Alliance (MSDNAA) dapat men-download dan memakai Visual Studio secara cuma-cuma. Perusahaan kecil yang baru berdiri juga dapat bergabung dalam Microsoft DreamSpark untuk memperoleh Visual Studio secara cuma-cuma.

Untuk melakukan navigasi antar tab yang mewakili sebuah file di dalam Visual Studio, saya berusaha membiasakan diri menggunakan shortcut Ctrl+Tab dan Ctrl+Shift+Tab. Walaupun terasa agak aneh dibanding penggunaan Ctrl+PgUp dan Ctrl+PgDown di IntelliJ IDEA, hal ini bukanlah sesuatu yang sulit.

Salah satu shortcut penting yang saya sering pakai pada Visual Studio adalah Ctrl+titik(.). Shortcut ini dipakai pada bagian kode program yang mengandung kesalahan atau memiliki hints pengerjaan. Sebagai contoh, bila saya mengetik sebuah nama class yang belum di-import dengan keyword using, maka Visual Studio akan menampilkan saran untuk men-import class tersebut pada saat saya menekan tombol Ctrl+titik(.) seperti yang terlihat pada gambar berikut ini:

Memakai IntelliSense Di Visual Studio 2010

Memakai IntelliSense Di Visual Studio 2010

Untuk menghasilkan kode secara otomatis, misalnya men-override sebuah method, saya dapat mengetik override kemudian memilih salah satu method yang dapat di-override seprti yang terlihat pada gambar berikut ini:

Code generation di Visual Studio 2010

Code generation di Visual Studio 2010

Sebuah proyek yang dikembangkan secara OOP umumnya memiliki banyak class. Salah satu fasilitas penting untuk meningkatkan produktifitas adalah kemampuan mencari source code class yang dibutuhkan secara cepat. Untuk keperluan tersebut, saya dapat menggunakan shortcut Ctrl+koma(,) yang akan menampilkan dialog dimana saya dapat mengisi nama class yang perlu dicari, seperti yang terlihat pada gambar berikut ini:

Mencari source code sebuah class

Mencari source code sebuah class

Salah satu kekurangan Visual Studio 2010 adalah pencarian hanya dilakukan pada class yang didefinisikan di dalam proyek, tidak termasuk class milik library atau milik .NET Framework. Padahal saya sering kali memakai fitur seperti ini di Java guna mencari tahu class apa saja yang disediakan oleh framework atau Java itu sendiri.

Masalah lainnya di Visual Studio 2010 adalah saya tidak dapat melihat struktur hierarki class (inheritance) secara mudah. Sebagai contoh, saya tidak dapat mencari tahu apa saja class yang meng-implementasi-kan interface IList. Padahal saya sering memakai fitur serupa di Eclipse atau IntelliJ IDEA yang bersifat gratis. Dengan fitur tersebut, saya dapat memperoleh lebih banyak gambaran mengenai arsitektur library atau framework. Sementara itu, untuk memperoleh kemampuan serupa (dan fasilitas lainnya) di Visual Studio, saya perlu merogoh kantong guna membeli plugin ReSharper seharga US$149. ReSharper adalah sebuah plugin populer untuk Visual Studio yang dibuat oleh JetBrains (perusahaan yang juga membuat IntelliJ IDEA).

Perihal Solid Snake
I'm nothing...

2 Responses to Berkenalan Dengan C# Dari Perspektif Java dan Groovy

  1. tvianty mengatakan:

    “Masalah lainnya di Visual Studio 2010 adalah saya tidak dapat melihat struktur hierarki class (inheritance) secara mudah. Sebagai contoh, saya tidak dapat mencari tahu apa saja class yang meng-implementasi-kan interface IList.”

    Mungkin bisa terbantu dengan click kanan project pada Solution Explorer, pilih “View Class Diagram” ini akan me-generate class diagram untuk semua class yg ada dlm project tersebut.

    • Solid Snake mengatakan:

      Pada pernyataan tersebut, yang ingin saya lihat adalah struktur hierarki untuk class bawaan .NET dan framework yang saya pakai (di dll). Sebagai contoh, IList yang diturunkan dari ICollection adalah class bawaan .NET. Saat sedang mengetik kode program, saya ingin tahu apa saja implementasi IList yang tersedia di .NET. Developer tidak harus hafal seluruh class yang ada di .NET. Selain itu, bila ia memakai framework dan dll, bisa saja ada implementasi IList yang tidak terdokumentasikan di .NET. Fasilitas class diagram adalah fasilitas yang bagus, namun ia hanya menampilkan class yang dibuat di proyek bukan milik .NET dan framework.

      Sebagai perbandingan, di IntelliJ IDEA, saat sedang mengetik kode program, bila saya menekan shortcut Ctrl+H pada nama class atau interface, akan muncul struktur inheritance seperti pada gambar berikut ini:

      Hierarki class List

      Pada hierarki yang muncul, bukan hanya implementasi List milik Java seperti ArrayList dan LinkedList yang muncul, namun juga implementasi dari library dan framework. Saya bisa mengetahui dengan mudah bahwa Groovy menambahkan ObservableList, Google Guava menambahkan ImmutableList, Spring menambahkan AutoPopulatingList, GlazedLists menambahkan EventList, dan sebagainya. Dengan demikian, saya hanya tinggal memilih class yang tepat untuk dipakai sesuai kasus yang saya hadapi. Akan sulit bila mengharapkan semua orang bisa mengingat seluruh class yang ada😉

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: