Nama method atau atribut haruslah sudah self-explain tanpa harus diberi comment. Begitu juga logic flow di dalam fungsi. Bila logic flow perlu dijelaskan, dapat dipertimbangkan code tersebut sebagai bagian dari smell Long Method dan perlu di-extract.
Comment boleh diberikan sebagai dokumentasi. Contohnya untuk bahasa pemrograman Java, digunakan Javadoc menggunakan /** */ sebagai dokumentasi. Penggunaan // untuk single line atau /* */ untuk multiline dihindari.
java
/*** The HelloWorld program implements an application that* simply displays "Hello World!" to the standard output.** @author John Doe* @version 1.0* @since 2020-03-20*/publicclassHelloWorld { ... }
/*** The HelloWorld program implements an application that* simply displays "Hello World!" to the standard output.** @author John Doe* @version 1.0* @since 2020-03-20*/publicclassHelloWorld { ... }
Lebih parahnya, terdapat hidden-side-effect pada fungsi printMenu. Di komentar diatas menu, tertulis bahwa fungsi ini melakukan print kemudian scan (terjadi temporal cohesion). Sedangkan nama fungsi hanya printMenu saja. Tentu saja ini menyesatkan programmer lain yang akan memakai fungsi ini.
java
publicclassMenuPrinter {//print kemudian scan dan return hasil scanpublicintprintMenu(){//print header System.out.println("===="); System.out.println("Menu"); System.out.println("====");//print menu System.out.println("1. Foo"); System.out.println("2. Bar"); System.out.println("3. Baz"); System.out.println("4. Exit");//scan inputint input =0; Scanner sc =newScanner(System.in);do{ System.out.println("Input [1-4]: "); sc.nextInt(); sc.nextLine(); }while(input <1|| input >4); sc.close();return input; }}
publicclassMenuPrinter {//print kemudian scan dan return hasil scanpublicintprintMenu(){//print header System.out.println("===="); System.out.println("Menu"); System.out.println("====");//print menu System.out.println("1. Foo"); System.out.println("2. Bar"); System.out.println("3. Baz"); System.out.println("4. Exit");//scan inputint input =0; Scanner sc =newScanner(System.in);do{ System.out.println("Input [1-4]: "); sc.nextInt(); sc.nextLine(); }while(input <1|| input >4); sc.close();return input; }}
Dilakukan extract method pada bagian-bagian di dalam fungsi, dan dilakukan rename method pada fungsi printMenu menjadi printMenuAndGetInput. Jadi, kita dapat membuang komentar-komentar yang tidak perlu (karena nama fungsinya sudah menjelaskan).
Comments
sourcemaking
Penjelasan Smell
Nama method atau atribut haruslah sudah self-explain tanpa harus diberi comment. Begitu juga logic flow di dalam fungsi. Bila logic flow perlu dijelaskan, dapat dipertimbangkan code tersebut sebagai bagian dari smell Long Method dan perlu di-extract.
Comment boleh diberikan sebagai dokumentasi. Contohnya untuk bahasa pemrograman Java, digunakan Javadoc menggunakan
/** */
sebagai dokumentasi. Penggunaan//
untuk single line atau/* */
untuk multiline dihindari.Pada contoh MenuPrinter.java, terdapat banyak komentar.
Lebih parahnya, terdapat hidden-side-effect pada fungsi
printMenu
. Di komentar diatas menu, tertulis bahwa fungsi ini melakukan print kemudian scan (terjadi temporal cohesion). Sedangkan nama fungsi hanyaprintMenu
saja. Tentu saja ini menyesatkan programmer lain yang akan memakai fungsi ini.Penyelesaian
Dilakukan extract method pada bagian-bagian di dalam fungsi, dan dilakukan rename method pada fungsi
printMenu
menjadiprintMenuAndGetInput
. Jadi, kita dapat membuang komentar-komentar yang tidak perlu (karena nama fungsinya sudah menjelaskan).