Showing posts with label programming. Show all posts
Showing posts with label programming. Show all posts

Saturday, June 23, 2018

Golang Rest API Menggunakan GIN Framework

Hello Kawan - kawan sekalian, Kali ini saya akan membuat Tulisan tentang Golang Rest API menggunakan Framerowk GIN.
Kenapa Saya Menulis ini karena dapet tantangan dari Mas Yuki untuk membuat presentasi tentang golang, nah saya coba deh untuk menulis nya hehehehe....

mungkin gak usah di jelaskan ya golang itu apa karena bisa di lihat di LINK_INI yang telah di tulis oleh mas yuki sebelumnya sudah jelas dan gamblang tentang go.

Lalu Apa itu GIN adalah salah satu framework yang di buat dengan bahasa go . sudah fiture - fiture yang ada di framework ini seperti koneksi database,json formater dan banyak lagi. Untuk lebih lanjutnya bisa di buka di LINK_INI.

Langsung Saja saya tunjukan langkah - langkah membuat Golang Rest API menggunakan GIN framework, ini juga hasil berguru saya dan cari - cari referensi
Sebelumnya Untuk Koding GO harus mengatur gopath dan goroot nya dulu untuk itu bisa di lihat di tutorial LINK_INI

Setelah Sudah di setting saatnya untuk beraksi.

Pertama Ketikan :


perintah di atas adakah untuk memclone framework gin , gorm dan go driver sql
owh iya di sini untuk ORM nya saya memakai GORM.

Setelah itu Kita Buat koneksi Ke database seperti berikut:

Di atas adalah kodingan untuk mengakses database menggunakan gorm untuk mengakses database nya bisa di sesuaikan nantinya untuk user ,password dan nama database nya.

Selanjutnya Kita akan buat model nya untuk kita olah datanya. kalau di golang namanya adalah struct
kodingannya sebagai berikut:


di dalam model atau struch ini kita untuk membuat model itu sebagai Object table kita tandai dengan gorm.Model . Di dalam struct juga kita dapat langsung membuat json yang nantinya akan kita tampilkan nantinya dengan cara  `json:"nama"` .

Selanjutnya kita akan buat function untuk Create nya. Kodingannya sebagai berikut :


function di atas adalah function untuk cretae data ke database menggunkan gin.Context yang digunakan untuk memanggil fungsi gin. Untuk binding data yang akan di masukan menggunakan c.Bind(&std) dengan pertama buat variable data atau object yang akan di masukan seperti contoh di atas adalah var std transformedStudent adalah objet yang saya gunakan untuk masukan. fungsi db.Create(&model) untuk menyimpan ke database berdasarkan data yang di masukan dari object. fungsi dari c.JSON(http.StatusOK, gin.H{"message": http.StatusOK, "result": model}) adalah untuk mengeluarkan response json dari function yang di buat.

Selajutnya kita membuat function get All berikut kodinganya:

fungsi dari adalah db.Find(&model) untuk mencari semua data yang ada di dalam database, sebelumnya kita definisikan dulu modelnya menjadi sebuah listnya dengan cara seperti berikut var model [] student . Untuk Flownya codingan di atas adalah mencari semua data yang di dalam database lalu di buat object model list setelah itu di transfer ke bentuk object view yang akan di tampilkan.

Selanjutnya kita membuat function get Detail berikut kodinganya:

Cara Untuk Parsing id di atas menggunakan fungsi modelID := c.Param("id") untuk mencari data sesuai dengan field yang di cari di sini saya mencari id yang di masukan . Dan fungsi  untuk mencari data sesuai dengan param yang di inginkan dari fungsi di atas.

Selanjutnya kita membuat function update berikut kodinganya :


Untuk Update di atas ada fungsi db.Model(&model).Update(transferVoToModel(vo)) untuk mengupdate data ke dalam database.

Selanjutnya kita buat function delete berikut kodinganya:

Untuk Delete di atas ada fungsi db.Delete(model) untuk mendelete data yang ada di dalam database berdasarkan id yang di kirimkan.

Selanjutnya kita buat routernya untuk mengases semua function melalui REST HTTP berikut kodinganya:

Router di atas di gunakan untuk client mengakses function yang ada di dalam go dengan menggunakan REST HTTP. fungsi router := gin.Default() di gunakan untuk mendefinisikan variable router sebagai router gin default. fungsi v1 := router.Group("/api/student") digunakan untuk membuat nama url . fungsi router.Run(":20001") digunakan untuk membuat go berjalan di port yang di inginkan di sini saya menggunakan port 20001.

Demikian lah Tutorial membuat REST API Golang mengguanakan GIN framework, untuk kodingan versi full nya ada di LINK

Semoga bermanfaat untuk semuanya..

Sumber:
https://medium.com/@thedevsaddam/build-restful-api-service-in-golang-using-gin-gonic-framework-85b1a6e176f3

https://github.com/gin-gonic/gin

https://github.com/jinzhu/gorm

https://www.youtube.com/watch?v=Mq6qk2xPJsc&t=2039s

Saturday, December 16, 2017

Higher Order Function and Lambda Expression in Android Development

Pada tulisan sebelumnya saya telah menjelaskan mengenai Higher Order Function dan Lambda expression. Pada tulisan ini, saya tidak akan menjelaskan kembali mengenai dua hal tersebut, dan jika ingin mengetahui lebih dalam bisa membuka link ini.

Belum lama ini, Google mengumumkan bahwa Android Studio kini dapat menggunakan Java 8. Java 8 memang sudah lama diluncurkan oleh Oracle, tetapi sampai awal tahun ini, Android masih stuck dengan Java versi lawas. Salah satu fitur Java 8 yang akan sangat berguna untuk digunakan dalam pengembangan Android adalah Lambda Expression dan Higher Order Function (yang selanjutnya akan disebut dengan HOF).

Sebelum Java 8 di-support oleh Android Studio, untuk dapat meng-implement interface yang hanya memiliki satu buah method seperti View.OnclickListener(), kita harus membuat kelas baru dan mengimplementasikan method yang ingin kita gunakan.

Terima kasih untuk team Android Studio, sekarang kita tidak harus menginisialisasikan kelas baru dan meng-implement method yang ingin kita gunakan. Kita bisa menggunakan lambda expression pada method setOnClickListener(). Pada contoh kali ini, setOnClickListener() berlaku sebagai HOF yang menerima Lambda Expression.

Dengan begini kita tidak perlu menuliskan inisialisasi kelas baru dan kode akan menjadi lebih pendek dan mudah untuk dibaca.

Happy Coding! 

Referensi

Intro to Kotlin: Extension, Lambda Expression and Higher Order Function

Pada tulisan sebelumnya tentang Kotlin, saya telah membahas 4 fitur unggulan yang dimiliki Kotlin yaitu Multiple Top Declaration, Named Parameter, Optional Semicolon dan Default Parameter. Selain 4 fitur keren di atas, terdapat beberapa fitur lain yang ada pada bahasa ini yang menurut saya tidak kalah kerennya. Fitur yang dimaksud adalah Extension, Higher Order Function dan Lambda Expression.

Extension

Extension adalah fitur pada Kotlin yang memungkinkan kita untuk menambahkan property dan function pada suatu kelas tanpa mengubah atau meng-extend kelas tersebut. Fitur ini sangat berguna jika kita menggunakan library yang dibuat oleh orang lain dan menemukan kekurangan dan ingin menambahkan sesuatu pada library tersebut. Berikut ini adalah contoh bagaimana extension dapat digunakan.

Misalnya kita menggunakan library yang memiliki kelas Person di dalamnya dan ingin menambahkan fungsi untuk menari dan dan ingin menambahkan property untuk mengetahui apakah objek Person yang kita buat itu sudah tua atau belum. Salah satu cara untuk melakukan ini tanpa extension adalah dengan membuat kelas baru yang meng-extend kelas Person dan menambahkan secara manual property dan fungsi yang diinginkan pada kelas tersebut. Tetapi, karena Kotlin memiliki fitur extension, hal ini dengan mudah dapat dilakukan dengan cara seperti di bawah ini.


Lambda Expression

Fitur lainnya yang ingin saya bahas adalah Lambda Expression. Lambda expression atau juga sering disebut sebagai anonymous function adalah fungsi yang tidak dideklarasikan tetapi langsung digunakan dalam bentuk expression. Berikut ini adalah contoh Lambda Expression.

Di atas adalah contoh lambda expression yang merepresentasikan fungsi yang menerima satu parameter berupa objek Person dan mengembalikan boolean. Lambda expression akan terasa berguna saat kita menggunakan Higher Order Function yang akan saya bahas pada poin berikutnya.

Higher Order Function

Apakah yang dimaksud dengan Higher Order Function(yang selanjutnya akan disebut dengan HOF)? HOF adalah fungsi yang dapat menerima parameter berupa fungsi dan dapat mengembalikan fungsi. Lalu apa gunanya HOF? Pada Functional Programming, HOF sangat berguna untuk melakukan perhitungan yang direpresentasikan dengan bentuk fungsi. Salah satu bidang ilmu yang menggunakan functional programming adalah matematika. Pada bidang ilmu matematika, suatu masalah sering direpresentasikan dengan bentuk fungsi, dan biasanya fungsi pada matematika dapat berupa fungsi komposisi, yaitu fungsi suatu nilai yang juga merupakan sebuah fungsi. Di bawah ini adalah contoh dari HOF.

Fungsi di ataas adalah fungsi yang menerima tiga buah parameter. Parameter pertama adalah List of Person, parameter kedua adalah conditon dan parameter ketiga adalah action. Fungsi ini akan melakukan action pada setiap elemen di List of person jika condition terpenuhi.

Demikianlah tulisan saya kali ini tentang Kotlin, semoga dapat bermanfaat :)

Keep on hackin'!

Referensi

Reference - Kotlin Programming Language

Sunday, June 18, 2017

Kotlin on Android Studio

Sebelum didukung resmi oleh Google, Kotlin sudah cukup lama digunakan oleh programmer-programmer di berbagai platform. Pengembangan program dengan bahasa Kotlin dapat dilakukan dengan dua cara, yaitu dengan mengunakan stand-alone compiler, dan dengan mengunakan IDE yang dipasang plugin untuk bahasa Kotlin. IDE yang dapat digunakan untuk mengembangkan perangkat lunak dengan bahasa Kotlin adalah IntelliJ, Eclipse, Netbeans, dan juga Android Studio.

Sebelum resmi didukung, sudah terdapat banyak aplikasi android yang production code-nya menggunakan bahasa Kotlin. Bersamaan dengan diumumkannya Kotlin sebagai bahasa resmi pegembangan aplikasi Android, Google meluncurkan Android Studio 3.0 Preview (Canary Channel).

Android Studio 3.0 Preview (Canary Channel)

Pada Android Studio versi 3.0, terdapat banyak fitur baru dan perbaikan-perbaikan yang dapat memudahkan programmer dalam mengembangkan aplikasi Android. Fitur-fitur dan perbaikan-perbaikan tersebut diantaranya:
  • Core IDE changes
  • Kotlin language
  • Support for Java 8 language features
  • New Android Profiler
  • Instant Apps Support
  • APK Debugger
  • New Device File Explorer
  • Support for the Android O Developer Preview
  • New Templates for Android Things
  • Layout Editor Improvements
  • Layout Inspector Improvements
  • Google's Maven Repository
  • APK Analyzer Improvements
  • New Android Plugin for Gradle
  • New Android Emulator Features
Tulisan ini tidak akan membahas semua fitur-fitur baru atau perbaikan-perbaikan pada Android Studio 3.0 dan hanya akan fokus pada fitur dukungan bahasa Kotlin. Untuk pembahasan lebih lengkap mengenai fitur-fitur dan perbaikan-perbaikan di atas, dapat dilihat pada halaman ini.

Android Studio 3.0 includes support for the Kotlin language. You can incorporate Kotlin into your project by converting a Java file to Kotlin (click Code > Convert Java File to Kotlin File) or by creating a new Kotlin-enabled project using the New Project wizard. Learn more about Kotlin and Android.

Kotlin Support in Android Studio

Dukungan untuk bahasa Kotlin pada Android Studio Meliputi:
  • Kotlin Enabled Project

Dengan fitur ini, kita dapat membuat project baru pada Android Studio yang menggunakan bahasa Kotlin sebagai bahasa default yang digunakan dalam menulis program logic.
  • Pertama pilih opsi "Start a new Android Studio project" saat membuka Android Studio
  •  Setelah itu Masukan properti yang diinginkan, seperti nama aplikasi, domain perusahaan. Pada tahap ini, jangan lupa check pilihan include Kotlin support.
  •  Selanjutnya, untuk menambahkan activity dapat dilakukan seperti biasa pada menu File.
  •  Pada tahap ini pilih Kotlin sebagai source language
  •  Setelah klik Finish, Android Studio akan men-generate berkas .kt sebagai logic aplikasi dan juga berkas .xml

  •  Saat Pertama project dibuat, Android Studio otomatis membuat sebuah activity yang menggunakan bahasa kotlin.
  •  Convert Java to Kotlin

Selain membuat project baru dengan Kotlin, Android Studio 3.0 juga memiliki fitur untuk mengubah kode java yang ada menjadi kode Kotlin. Prosesnya adalah sebagai berikut:
  •  Pilih Project yang ingin diubah

  •  Setelah project berhasil dibuka, pilih kelas java yang ingin diubah menjadi Kotlin
  •  Pada menu Code, pilih opsi "Convert Java File to Kotlin File"
  •  Setelah itu akan muncul dialog proses pengkonversian kelas java ke Kotlin
  •  Pada Android Studio 3.0 masih terdapat bug yang mengharuskan kita untuk mengkoreksi pengkonversian yang belum sempurna
  •  Setelah pengkonverisan selesai, akan muncul error seperti gambar di bawah ini. Untuk dapat memperbaiki error ini, kita harus mengganti jenis deklarasi variable menjadi "protected lateinit"
  • Saat pertama kali melakukan konversi kelas java ke Kotlin, Android Studio akan meminta kita untuk mengkonfigurasi library Kotlin pada Gradle. Konfigurasi ini dilakukan secara otomatis, yang harus kita lakukan hanya menentukan cakupan kelas Kotlin pada project.


  •  Setelah menambahkan dependency untuk Kotlin (yang dilakukan secara otomatis), kita akan diminta untuk sinkronisasi ulang Gradle

  •  Setelah sinkronisasi gradle selesai, proses pengkonversian kelas java ke Kotlin telah selesai. Aplikasi dapat dijalankan seperti biasa dengan menggunakan emulator atau device Android.

Demikianlah tulisan saya mengenai Kotlin pada Android Studio, selamat mencoba :)

Reference


Intro to Kotlin

Sampai dengan 17 Mei 2017, java merupakan satu-satunya bahasa yang secara resmi didukung oleh Google sebagai bahasa yang digunakan untuk mengembangkan aplikasi Android. Pada Acara Google I/O 2017 yang diadakan Google di Mountain View, California, Google mengumumkan Kotlin ditambahkan sebagai bahasa resmi untuk mengembangkan aplikasi Android.

Dengan diumumkannya berita ini, saya tertarik untuk mencari tau tentang bahasa Kotlin dan ingin berbagi sedikit mengenai Kotlin dengan tulisan ini.

About Kotlin

Apa itu Kotlin? Kotlin adalah bahasa pemrograman yang dikembangkan oleh tim dari JetBrains yang dipimpin oleh Andrey Breslav. Proyek ini dimulai pada tahun 2010 dan secara resmi diumumkan ke publik pada tahun 2011. Satu tahun berikutnya sekitar Februari 2012, proyek ini dijadikan open source dan siapapun dapat berpartisipasi dalam pengembangan bahasa ini.

Sama seperti java, Kotlin diambil dari nama sebuah pulau. Pulau Kotlin terletak di Negara Rusia. Tujuan dibuatnya bahasa ini adalah sebagai bahasa umum yang dapat digunakan sebagai alat yang aman, ringkas, fleksible dan 100% interoperable dengan java. Saat ini Kotlin dapat berjalan pada JVM, Javascript compiler dan Android Dalvik Virtual Machine (DVM).

Pro & Con

Berikut ini adalah beberapa pertimbangan dalam menggunakan bahasa Kotlin. Terdapat banyak alasan mengapa kita harus menggunakan bahasa Kotlin, diantaranya adalah sebagai berikut:
  • Concise
  • Safe
  • Interoperable with java
  • Tool-friendly
  • Many cool feature:
    • Data class,
    • Multiple top level declaration,
    • Names parameter,
    • Optional semicolon,
    • Extensions,
    • Default parameter,
    • Single expression function,
    • Safe operator.
  • Officialy supported by Android
  • Kotlin/Native
Sedangkan untuk contra-nya adalah, kita membutuhkan waktu untuk mempelajari bahasa baru dan ukuran file .apk yang dihasilkan akan sedikit lebih besar jika dibandingkan dengan menggunakan bahasa java.

Overview

Berikut ini adalah overview perbandingan syntax Kotlin dengan java:

 

Try Kotlin

Dalam bagian ini saya akan sedikit menjelaskan fitur-fitur pada Kotlin yang menurut saya keren dan dapat memudahkan programmer dalam menulis program.
  • Multiple Top Level Declaration
Fitur ini memungkinkan kita untuk menulis sebuah fungsi dan kelas pada level yang sama, berbeda dengan bahasa java yang mewajibkan top level declaration-nya adalah sebuah kelas.
  • Names Parameter
Dengan Fitur ini, kita tidak perlu lagi mengingat-ingat urutan sebuah parameter dari sebuah fungsi. Fitur ini sangat berguna jika suatu fungsi memiliki banyak parameter dan kita tidak ingat urutan parameter-parameternya.
  • Optional Semicolon 
Salah satu target dari bahasa kotlin adalah programmer java. Dalam bahasa pemrograman java, semicolon merupakan suatu hal yang wajib. Pada Kotlin, keberadaan semicolon bukanlah suatu hal yang penting. Itu artinya kita dapat menulis sebuah statement dengan atau tanpa menggunakan semicolon. Hal ini sangat memudahkan dalam transisi dari bahasa yang mewajibkan semicolon di setiap statement ke Kotlin.
 
  • Default Parameter
Seringkali kita dihadapkan pada suatu objek yang memiliki lebih dari satu macam jenis deklarasi. Kotlin mengakomodasi hal ini dengan fitur default parameter.

Pada kelas Money di atas, jika kita tidak menginisalisasikan nilai amount dan atau currency, Kotlin akan otomatis menginisialisasikannya dengan default parameter yang telah kita tentukan saat mendefinisikan kelas Money. Currency akan otomatis diinisialisasikan dengan string kosong, dan amount akan diinisialisasikan dengan nol. 

Conclusion

Terdapat banyak fitur dari kotlin yang dapat meningkatkan produktivitas dalam menulis program. Sebagai Software Enginner yang lahir dan besar dengan bahasa java, bagi saya mempelajari bahasa baru untuk menulis program bukanlah hal mudah dan menyenangkan. Meskipun demikian, setelah mengenali Kotlin saya tertarik untuk mempelajari bahasa ini dan menggunakannya sebagai bahasa dalam menulis program.

Kesimpulan dari tulisan ini adalah jangan ragu atau bahkan takut untuk mempelajari sebuah bahasa baru meskipun kita sudah familiar dan mahir dengan satu bahasa. Karena pada akhirnya, bahasa pemrogramman hanyalah sebuah alat yang kita gunakan untuk membuat program.

Reference

Thursday, March 10, 2016

Belajar Scala

Halo teman.
Pada tutorial kali ini saya akan sedikit sharing tentang bahasa pemrograman yang lain, kerana sebelumnya selalu share tentang hal yang berkaitan dengan Java. Tentang 'SCALA'.
Scala pertama kali diciptakan oleh Martin Odersky, pertama kali release pada 2003. Apa alasan saya yang membuat saya tertarik belajar scala?.
Scala hampir mirip dengan java. Tetapi syntax tidak terlalu panjang. tentu sebagai java developer akan gampang memahami. bisa memanggil dan menggunakan class atau library milik java. dan konon katanya scala mempunyai fitur untuk menangani concurrent yang tinggi.
Scala dipopulerkan dan digunakan secara luas oleh Twitter. tentu siapa yang tidak kenal dengan social media ini. Pemakai lain yang terkenal antara lain Linkedin, Foursquare, Netflix, Sony, dan masih banyak lagi.

Untuk memulai scala perlu install dua software ini.
- Java JDK, diperlukan karena scala perlu berjalan di atas JVM.
- Scala binary. bisa didownload disini
Keduanya diinstall dan ditambahkan di environment variable OS kita.
Ide yang digunakan bisa bermacam macam. tetapi yang sangat compatible pluginnya menurut saya adalah Intelij Idea. fitur autocomplete nya juga bagus. tersedia juga wizard untuk create new project.



Pertama-tama kita perlu belajar dan memahami syntax dasar nya dulu.

Semicolon
tanda semicolon atau titik koma ';' sifatnya optional bisa dipake bisa tidak.

Varible.
Ada 2 macam variable yakni immutable dan mutable. "val" merupakan immutable, variable yang tidak bisa diubah lagi nilainya setelah diinisialiasai. Jika di java sama dengan final. "var" merupakan mutable variable yg bisa diubah nilainya kapan saja. Deklarasi variable ada dua cara tanpa tipe data atau tanpa tipe data. Scala compiler akan otomatis mengenali tipe variable berdasarkan isinya mirip dengan java script.

 var name = "andri"  
 val name = "andri"  
 val total : Int = 10  
 var status : Boolean = false  

Tipe data
Tipe data di scala hampir sama dengan di java. sperti Int, String, Float, Boolean, Char, Short

Function
Deklarasi function secara garis besar seperti ini, selalu diawali dengan keyword 'def' tapi bisa berbagai macam variasi.

 def functionName ([list of parameters]) : [return type] = {  
   function body  
   return [expr]  
 }  

Function yg menghasilkan return bisa ditulis tanpa keyword 'return' didalam body methodnya. barus terakhir otomatis jadi return value.

 def calculate (a : Int , b : Int) : Int {  
    a + b  
 }  

Function bisa juga ditulis tanpa kurung kurawal (bracket) '{ }'. tetapi langsung diberikan '=' (equal)

 def calculate (a : Int , b : Int) : Int = (a + b)  

Anonymous function
method yang tanpa nama atau tanpa signature. sangat mirip dengan lambda expression di java 8.

 (x: Int) => x + 1  
 val value = (x: Int) => x + 1  
 (x: Int, y: Int) => "(" + x + ", " + y + ")"  
 () => { println("test") }  

Function adalah object
semua function dianggap jadi sebuah object. Maka function dapat dipasaing sebagai parameter juga di function lain.
 val firstN : Int = 1  
   val secondN : Int = 2  
   // anonymous function sample  
   def doWithOneAndTwo(f: (Int, Int) => Int, b : Int) = {  
    f(firstN, secondN ) + b  
   }  
   // this function will be a parameter  
   def call(x: Int, y : Int): Int = x + y  
   def sumInts( x: Int): Int = doWithOneAndTwo(call, x)  
   println("anonymous function call " +sumInts(3))  

code diatas akan menghasilkan nilai '6'.
Function 'call()' (didalamnya ada proses logic) dipassing sebagai parameter di function lain 'doWithOneAndTwo()'. dan didalam body-nya diprosess lagi hasil parameter 'call()' tadi.

Executable class.
seperti main class di java. bisa dijalankan dengan klik kanan run dari IDE anda.
 object Test {  
  def main(args: Array[String]) {  
    println ("do someting")  
  }  
 }  

For-loop
sama seperti bahasa lainnya digunakan untuk perulangan.
basic syntax :
 for( var x <- Range ){  
   statement(s);  
 }  

contoh :
 for( a <- 1 to 10){  
   println( "Value of a: " + a );  
 }  

hasilnya akan menampilkan a dari 1 sampai 10.

for-loop dengan conditional.
 for( var x <- Range  
    if condition1; if condition2...  
   ){  
   statement(s);  
 }  

if-else conditional bisa dimasukkan ke definition for-loopnya.
contoh :
 for( a <- 1 to 10 ; if a < 8){  
    println( "Value of a: " + a );  
   }  

akan menghasilkan printout a yang lebih kecil dari 8.

Learning tentang basic fundamental scala bisa dipelajari dari video berikut ini, yang menurut saya penjelasannya sangat membantu.


referensi :
http://docs.scala-lang.org/
https://www.jetbrains.com/idea/help/creating-and-running-your-scala-application.html
http://alvinalexander.com/scala/whos-using-scala-akka-play-framework

bersambung ke tutorial scala selanjutnya yang akan membahas tentang object oriented

Monday, December 14, 2015

Simple Java Code Refactoring

Beberapa minggu lalu saya mengikuti semacam training atau workshop tentang android di India. Tentang how to android (pengenalan tentang coding android). Tapi ada satu hal yang membuat saya tertarik, yakni code refactoring, kebetulan yang dipakai adalah Java language. Membuat saya ingin mereview kembali code saya yang sepertinya saya rasa sering salah
Code refaktoring disini dimaksudkan untuk memperbaiki struktur code kita sehingga lebih mudah dipahami, mengurangi kompleksitas dan mungkin bisa lebih reusable (jika bahasanya berbasis Object Oriented). Istilahnya mencegah code kita menjadi sebuah benang kusut yang susah dibaca dan dimengerti orang lain yang mungkin melanjutkannya di kemudian hari. Kadang kadang kalau kita membaca code kita sendiri yang sudah lama, perlu waktu juga untuk memahaminya lagi.
Disini akan saya mencoba sharing beberapa hal yang sifatnya basic saja yang kemaren sempat dibahas. karena refactoring itu luas dan panjang konsepnya.

1.  Naming variable

Untuk membuat nama variable terkadang kita asal saja memberi nama variable dalam suatu class sering asal saja. Seharusnya naming variable itu harus mudah dibaca, dimengerti dan mencerminkan apa isi class tersebut. dan ikutilah naming convention dari bahasa yang bersangkutan.

 public class Employee {  
   public int _id;  
   public String fname;  
   public String lname;  
   public String addr;  
   public String dept;  
 }  

Dari contoh di atas tentu kita mesti menebak-nebak fname, lname, addr, dept itu atribut apa maksudnya. Code di atas bisa diperbaiki jadi seperti ini.

 public class Employee {  
   public int id;  
   public String firstName;  
   public String lastName;  
   public String address;  
   public String department;  
 }  

Jika sudah seperti diatas orang lain yang membaca sekilas pun pasti mudah tau kalau class employee itu atributnya id, firstname, lastname, address dan department.

3. Comment

Comment di sebuah code itu kalo di java istilahnya JavaDoc. Ada baiknya kalo seorang programmer itu memberikan comment atau doc diatas method yang dibuat. Untuk menandakan method itu di dalamnya melakukan apa. Kalau methodnya cuma sekedar logic sederhana atau setter-getter its ok lah, masih gampang dipahami. Kita bisa ambil contoh style code dari library atau framework yang sudah terkenal itu biasanya Doc nya malah lebih panjang dari isi methodnya sendiri. Contohnya seperti di bawah ini (diambil dari :  org.apache.http.impl.client.CloseableHttpClient).

 /**  
    * Executes a request using the default context and processes the  
    * response using the given response handler. The content entity associated  
    * with the response is fully consumed and the underlying connection is  
    * released back to the connection manager automatically in all cases  
    * relieving individual {@link ResponseHandler}s from having to manage  
    * resource deallocation internally.  
    *  
    * @param target  the target host for the request.  
    *         Implementations may accept <code>null</code>  
    *         if they can still determine a route, for example  
    *         to a default target or by inspecting the request.  
    * @param request  the request to execute  
    * @param responseHandler the response handler  
    * @param context  the context to use for the execution, or  
    *         <code>null</code> to use the default context  
    *  
    * @return the response object as generated by the response handler.  
    * @throws IOException in case of a problem or the connection was aborted  
    * @throws ClientProtocolException in case of an http protocol error  
    */  
   public <T> T execute(final HttpHost target, final HttpRequest request,  
       final ResponseHandler<? extends T> responseHandler, final HttpContext context)  
       throws IOException, ClientProtocolException {  
     Args.notNull(responseHandler, "Response handler");  
     final HttpResponse response = execute(target, request, context);  
     final T result;  
     try {  
       result = responseHandler.handleResponse(response);  
     } catch (final Exception t) {  
       final HttpEntity entity = response.getEntity();  
       try {  
         EntityUtils.consume(entity);  
       } catch (final Exception t2) {  
         // Log this exception. The original exception is more  
         // important and will be thrown to the caller.  
         this.log.warn("Error consuming content after an exception.", t2);  
       }  
       if (t instanceof RuntimeException) {  
         throw (RuntimeException) t;  
       }  
       if (t instanceof IOException) {  
         throw (IOException) t;  
       }  
       throw new UndeclaredThrowableException(t);  
     }  
     // Handling the response was successful. Ensure that the content has  
     // been fully consumed.  
     final HttpEntity entity = response.getEntity();  
     EntityUtils.consume(entity);  
     return result;  
   }  

2. Magic number

Magic number (angka ajaib) di sini maksudnya suatu angka yang secara tiba tiba muncul di tengah-tengah code, tanpa tahu maksudnya itu apa. Berikut ini contohnya.

 public class Receipt {  
   private Taxi taxi;  
   public Receipt(Taxi taxi) {  
     this.taxi = taxi;  
   }  
   public double totalTaxiCost(Taxi taxi) {  
     // fixed charges  
     double totalCost = 50;  
     // taxi charges  
     int totalKms = taxi.getTotalKms();  
     double peakTimeMultiple = taxi.isPeakTime() ? 1.2 : 1.0;  
     if(taxi.isAirConditioned()) {  
       totalCost += Math.min(10, totalKms) * 20 * peakTimeMultiple;  
     } else {  
       totalCost += Math.min(10, totalKms) * 15 * peakTimeMultiple;  
     }  
     return totalCost;  
   }  
 }  

Variable 50, 1.2, 20, 10 dan lainnya itu variable apa?, maksudnya nilai apa?.
Variable diatas mungkin bisa dibuatkan constant value, seperti dibawah ini.

 public class Receipt {  
   public static final int FIXED_CHARGE = 50;  
   public static final double MULTIPLE_PERCENTAGE_PEAK_TIME = 1.2;  
   public static final double MULTIPLE_PERCENTAGE_NON_PEAK_TIME = 1.0;  
   public static final int SALES_TAX = 10;  
   public static final int PRICE_PER_KM_AC = 20;  
   public static final int PRICE_PER_KM_NON_AC = 15;  
   private Taxi taxi;  
   public Receipt(Taxi taxi) {  
     this.taxi = taxi;  
   }  
   public double totalTaxiCost(Taxi taxi) {  
     // fixed charges  
     double totalCost = FIXED_CHARGE;  
     // taxi charges  
     int totalKms = taxi.getTotalKms();  
     double peakTimeMultiple = taxi.isPeakTime() ? MULTIPLE_PERCENTAGE_PEAK_TIME : MULTIPLE_PERCENTAGE_NON_PEAK_TIME;  
     if(taxi.isAirConditioned()) {  
       totalCost += Math.min(SALES_TAX, totalKms) * PRICE_PER_KM_AC * peakTimeMultiple;  
     } else {  
       totalCost += Math.min(SALES_TAX, totalKms) * PRICE_PER_KM_NON_AC * peakTimeMultiple;  
     }  
     return totalCost;  
   }  
 }  


3. Enumeration

Enum di java digunakan sebagai untuk kumpulan contants value yang digunakan untuk mentukan pilihan.

 public class Direction {  
   public static final String NORTH = "NORTH";  
   public static final String SOUTH = "SOUTH";  
   public static final String EAST = "EAST";  
   public static final String WEST = "WEST";  
 }  

Class diatas berisi pilihan tentang arah (direction). Karena tujuan / maksudnya sama. maka bisa di jadikan sebuah Enum. seperti dibawah ini.

 public enum Direction {  
   NORTH,  
   SOUTH,  
   WEST,  
   EAST;  
 }  

4. Test Class coverage

Setiap kali membuat method biasakan juga membuat test class (di Java bisanya menggunakan jUnit).
Bisa untuk mengetest logic kita sudah benar atau belum (menghasilkan result yang diharapkan) dengan berbagai macam inputan.

Selamat mencoba dan semoga bermanfaat.
Terima kasih.