Android Coding Standard

Sebagian orang berkata bahwa code is art, kode adalah seni. Karena itu programmer yang baik adalah layaknya seorang seniman, mereka harus mempunyai sense of art tersendiri. Dan diharapkan bisa menghasilkan barisan kode yang rapi, enak dibaca, namun juga efektif dan efisien.

Seiring dengan semakin matangnya platform Android, aturan-aturan standar dalam pemrograman Android pun semakin diketatkan. Kami di TWOH’s Engineering selalu mendukung penulisan coding dengan standar yang sesuai, mengikuti konvensi-konvensi pemrograman yang ada. Tulisan ini diharapkan mampu membantu pembaca untuk menulis program Android dengan konvensi maupun aturan yang sesuai dengan standar internasional. Sekaligus mengasah skill Android craftsmanship dan memperkenalkan state of art pemrograman Android pada pembaca.

[box type=”bio”] oleh : TWOH’s Engineering [/box]

Java Coding Standard

Sebagian besar aplikasi Android dibuat menggunakan bahasa Java. Karena itu beberapa kode konvensi yang ada mengikuti aturan Code Conventions for the Java TM Programming Language, yang dibuat pada tahun 1999. Silahkan dibaca, beberapa hal yang kami garisbawahi adalah sebagai berikut :

  • Penulisan Nama Kelas, nama kelas/class hendaknya ditulis menggunakan huruf awal kapital. Seperti Person.java. Apabila nama kelas terdiri dari dua kata atau lebih, maka setiap kata harus diawali dengan huruf kapital, seperti PersonProfile.java, DatabaseMapsHelper.java dan sebagainya,
  • Penulisan Nama Variabel, nama variabel ditulis dengan awalan huruf kecil, seperti color, apabila variabel terdiri dari dua kata atau lebih, maka kata kedua dan seterusnya diawali dengan huruf kapital. Contohnya : innerColor, maximumPostRate, dan sebagainya.
  • Penulisan Nama Package, nama package untuk aplikasi Android yang dibuat oleh developer yang berasal dari Indonesia, hendaknya mengikuti aturan penamaan package untuk aplikasi Android buatan Indonesia. Dan hendaknya tidak menggunakan nama package default seperti, com.example.namaaplikasi, maupun com.app.namaaplikasi, dan sebagainya.
  • Penulisan Nama Konstanta, nama konstanta hendaknya ditulis dengan memakai huruf kapital pada semua hurufnya, seperti COLOR. Apabila nama konstanta terdiri atas dua suku kata atau lebih, gunakan tanda “_” (underscore) untuk memisahkan satu suku kata dari suku kata lainnya, dan setiap hurufnya ditulis dengan menggunakan huruf kapital. Contohnya seperti MAXIMUM_POST_RATE.
  • Penulisan Nama Method, nama method diawali dengan lowercase letter atau huruf kecil pada kata pertama. Contohnya, post() Apabila method tersebut terdiri dari dua kata atau lebih, maka kata kedua dan seterusnya menggunakan huruf kapital pada awal kata, contohnya:  getMaximumPostRate(), getColor(), dan sebagainya.
  • Gunakan Nama Variabel Yang Deskriptif, dalam banyak kasus, saya masih menemukan programmer yang menggunakan nama variabel maupun konstanta yang tidak deskriptif. Sehingga kadang orang lain menjadi bingung ketika membaca kode buatan mereka. Hal ini membuat persepsi bahwa programmer yang menuliskan kode tersebut terkesan asal-asalan dalam membuat kodingannya. Di bawah ini merupakan contoh penggunaan nama variabel yang tidak deskriptif :

    //...
    private Button i;
    private EditText j;
    
    public void someMethod()
    {
          i = findViewById(R.id.some_button);
          i.setOnClickListener(this).
    }
    //...
    

    Pada potongan kode di atas, penamaan variabel sangatlah tidak jelas dan tidak deskriptif. Hal ini bisa menyulitkan programmer lain maupun Anda sendiri, karena setiap saat Anda lupa, Anda harus melihat pada bagian deklarasi untuk mengetahui apa tipe dari variabel i, apa fungsi dari variable tersebut dan banyak lagi. Ini adalah kode yang sudah diperbaiki :

    //...
    private Button tombolBack;
    private EditText textUsername;
    
    public void someMethod()
    {
          tombolBack = (Button) findViewById(R.id.some_button);
          tombolBack.setOnClickListener(this).
    }
    //...
    

    Pada kode yang telah diperbaiki di atas, terlihat jelas apa tipe dari variabel tombolBack dan juga fungsinya. tombolBack adalah sebuah tombol yang berfungsi untuk mengembalikan user ke halaman sebelumnya (misalnya). Demikian pula dengan EditText yang sudah terdefinisikan dengan jelas bahwa itu adalah EditText dimana user bisa menginputkan username mereka. Jika Anda malas menulis, maka Anda bisa menyingkat beberapa kata dengan singkatan yang mudah dihafal. Contohnya dua variabel tersebut akan menjadi : tbBack, btnBack, edtUsername, edtUser, dan sebagainya.

Android Coding Standard

Sekarang kita akan membahas Android secara khusus. Dalam konvensi maupun aturan penulisan kode Android, penulisan resource sangatlah penting dan perlu diperhatikan. Karena aplikasi Android mempunyai berbagai macam resource, seperti Button, Layout, Text, EditText, Label, dan sebagainya yang aktif digunakan dan dipanggil ke dalam aplikasi utama. SDK Android terbaru memberikan aturan yang lebih ketat terkait dengan aturan penamaan dan penggunaan resource ini, tidak jarang Eclipse akan memberikan warning apabila Anda tidak mengikuti aturan yang berlaku, namun percayalah. Aturan ini semata mata dibuat untuk memudahkan Anda untuk mengelola resource yang ada di aplikasi yang Anda buat.

No Hard Coded String, di antara banyaknya aturan. Aturan inilah yang paling sering dilanggar. Hard coded String, atau String yang ditulis secara “kasar” merupakan bom waktu yang akan menyulitkan Anda seiring dengan bertambah kompleksnya resource yang dipakai pada aplikasi.

Hard coded String banyak dipakai pada saat kita memberi label pada sebuah tombol, memberi judul aplikasi, memberi hint pada EditText dan sebagainya. Di bawah ini adalah contoh resource tombol yang menggunakan hard coded String :

<Button
        android:id="@+id/button_submit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Submit"
        />

Bayangkan ketika Anda mempunyai banyak resource tombol pada aplikasi, dan karena suatu sebab Anda diharuskan mengganti semua nama yang ada pada tombol-tombol tersebut. Bayangkan betapa repotnya mengganti nama satu persatu! Karena itu aturan standar menyarankan untuk menyimpan semua string/text reources pada file string.xml yang terdapat pada direktori res/values. Sehingga semua string/text pada aplikasi kalian tersimpan di satu tempat, dan kalian hanya perlu memanggilnya apabila dibutuhkan. Hal ini juga memudahkan apabila kalian ingin mengganti label pada tombol, hints, nama aplikasi, dan sebagainya. Berikut ini adalah contoh resource tombol yang sudah mengikuti aturan standar :

<!-- Isi pada file resource string.xml -->
<resources>
        <string name="tombol_submit_text">Submit</string>
</resources>

<!-- string resource yang dipanggil oleh android:text -->
<Button
        android:id="@+id/button_submit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/tombol_submit_text"
        />

Aturan Standar Penulisan ID Resources, seiring dengan banyaknya resource yang dipakai oleh aplikasi Android kalian. Kalian mungkin akan merasa bingung, tombol mana yang berfungsi untuk tombol submit, label  mana yang dipakai untuk tombol Y, dan string mana yang dipakai sebagai header judul pada layout X dan sebagainya. Karena itu, aturan atau konvensi penamaan ID berikut ini akan membantu apabila dipatuhi.

Yang pertama adalah bagaimana memberikan ID pada suatu resource di Android. Entah itu tombol, label, EditText, Layout, List, Spinner dan sebagainya. Pemberian ID pada suatu resource terjadi pada baris berikut pada resource yang bersangkutan :

         android:id="@+id/nama_id"

Tentunya apabila kalian katakanlah memberikan ID secara sembarangan, seperti “submit” pada suatu resource, nantinya kalian akan merasakan hal seperti di atas. Yaitu bingung menentukan resource mana yang akan dipakai. Penulisan yang benar adalah menggunakan format [tipe resource]_[fungsi resource]. Sehingga ketika kalian mempunyai EditText yang berfungsi untuk menginputkan username, cara pemberian ID berikut ini adalah tidak disarankan :

<EditText
        android:id="@+id/username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
</EditText>

Kenapa? Karena apabila kalian ingin memanggil EditText tersebut via ID, kalian harus memanggil melalui, R.id.username. Bayangkan jika kalian mempunyai label, button atau resource lainnya yang mempunyai ID sama yaitu, username.

Cara berikut ini adalah yang disarankan, sehingga kalian bisa memastikan bahwa resource yang dipanggil adalah benar-benar resource EditText, bukan tombol, label, atau lainnya:

<EditText
        android:id="@+id/edittext_username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
</EditText>

Aturan Penulisan String Resources, seiring dengan besarnya aplikasi yang kalian buat. String atau text yang ada pada string.xml akan semakin banyak. Agar bisa memilih mana string yang akan dipanggil atau digunakan, gunakan aturan penamaan berikut [tipe resource yang akan menggunakan string ini]_[nama/fungsi resource tersebut]_text.

Sebagai contohnya adalah kode berikut :

<resources>
        <string name="title_activity_main">MainActivity</string>
	<string name="hint_barang_text">Nama Barang</string>
	<string name="hint_harga_text">Harga Barang</string>
	<string name="hint_merk_text">Merk Barang</string>
	<string name="tombol_submit_text">Submit</string>
	<string name="tombol_tambah_text">Tambah Data</string>
	<string name="tombol_lihat_text">Lihat Data</string>
	<string name="title_view_barang">Data Barang</string>
	<string name="title_submit_barang">Submit Barang</string>
	<string name="deskripsi_barang">Deskripsi : </string>
</resources>

Jika kita lihat, tambahan _text pada akhir resource adalah opsional apabila kita sudah tahu bahwa resource yang akan dipanggil memang bertipe string, seperti title, deskripsi dan sebagainya. Namun apabila kalian akan menggunakan string untuk label suatu tombol, atau hint, maka penambahan _text disarankan.

Dan jika dilihat lagi, aturan ini adalah fleksibel dan bisa dikembangkan sesuai dengan kebutuhan dan kreativitas kalian, selama penamaan tersebut deskriptifmendefinisikan dengan jelas dan tidak ambigu.

Selalu Sediakan Hint Pada EditText, hint atau petunjuk, merupakan hal yang penting untuk memberitahu pengguna apa yang harus mereka tuliskan pada EditText. Pendekatan lama biasa menggunakan Label dengan EditText dibawahnya, seperti di bawah ini. Namun pendekatan tersebut dirasa kurang efisien dari segi tempat dan completely outdated. 

Android Label + EditText

Dengan menggunakan android:hint penulisan akan menjadi lebih efisien dan tidak buang-buang waktu. Seperti contoh di bawah ini :

EditText with Hint

Cara penambahan hint pada EditText adalah sebagai berikut, Android SDK terbaru juga akan secara otomatis memberikan warning apabila kalian tidak menambahkan hint pada EditText.

<EditText
        android:id="@+id/edittext_merk_barang"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="@string/hint_merk_text"
>
</EditText>

Selalu Definisikan Default InputType pada EditText, keyboard Android terdiri dari beberapa macam inputan, demikian juga text format pada Android. Karena itu, pendefinisian android:inputType adalah sangat disarankan. InputType membuat keyboard secara otomatis menyesuaikan formatnya, sesuai dengan inputan yang diinginkan oleh aplikasi. Hal ini mencegah eror, sekaligus membatasi format text yang bisa diinputkan oleh user. Jangan sampai pada saat kalian membutuhkan inputan berupa angka dari user, namun ternyata user bisa memasukkan huruf pada EditText yang kalian buat.

Contoh penerapan inputType adalah seperti di bawah ini, ketika pengguna diminta untuk memasukkan harga, maka keyboard yang dipakai adalah keyboard numerik. Dan bukan keyboard qwerty yang memiliki huruf-huruf.

<EditText
        android:id="@+id/edittext_harga_barang"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:hint="@string/hint_harga_text" >
        <requestFocus />
</EditText>

Gunakan ContentDescription pada Image, atau resources lainnya yang sekiranya membutuhkan atribut tersebut. android:contentDescription berisi deskripsi singkat tentang sebuah gambar. ContentDescription bisa juga berisi penjelasan singkat konten dari sebuah View. Karena bertipe text/string, pastikan kalian tidak menuliskannya secara hard coded melainkan seperti biasa definisikan terlebih dahulu pada String resource.

Kurang lebih ini yang bisa saya share, sebenarnya masih banyak lagi. Saya akan menambahkannya apabila sempat. Aturan-aturan maupun konvensi-konvensi yang ada di sini tidak mutlak harus diikuti, melainkan hal ini sebagai saran untuk meningkatkan standar kalian sebagai programmer. Sekaligus menghasilkan kode yang efisien, bagus, dan enak dibaca. Code is Art.

4 Comments

  1. Rahmad January 29, 2015

Leave a Reply

Do NOT follow this link or you will be banned from the site!