Skip to content

Instantly share code, notes, and snippets.

@alfianyusufabdullah
Last active June 21, 2021 03:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alfianyusufabdullah/ba3f7e7060e75b4a8aca7f568e223d6a to your computer and use it in GitHub Desktop.
Save alfianyusufabdullah/ba3f7e7060e75b4a8aca7f568e223d6a to your computer and use it in GitHub Desktop.
{
"Boolean_literal": "<p>Jika menggunakan Boolean untuk ekspresi, Anda tidak perlu lagi menuliskan nilainya.&nbsp;Cukup seperti di bawah ini:</p><pre><code>if (sleep){<br> ...<br>}</code></pre>",
"Overlap_view": "Perbaiki overlap view yang terjadi pada halaman <strong>xxx</strong> seperti berikut.",
"Binding_leaks": "Hindari mendeklarasi kelas Binding dengan <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">lateinit</span> karena hanya akan menyebabkan <em>memory leaks</em>. Untuk detail pembahasannya bisa dibaca <a href=\"https://proandroiddev.com/avoiding-memory-leaks-when-using-data-binding-and-view-binding-3b91d571c150\" target=\"_blank\" rel=\"noopener noreferrer\">di sini</a>.",
"Suspending_function": "Kode yang ditambahkan pada TODO ini masih belum lengkap. Seharusnya fungsi ini dijadikan <em>suspending function.</em>&nbsp;",
"Multiple_observer": "Fungsi <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">observeMovieData</span> sebaiknya hanya dipanggil sekali untuk menghindari multiple instance dari observer.",
"Pesan_keterangan": "Pastikan kembali setiap pesan yang ditampilkan pada halaman aplikasi dapat dimengerti dengan baik oleh pengguna.",
"Material_design_references": "Mulailah untuk menerapkan konsep Material Design ketika mengembangkan proyek Aplikasi.&nbsp;Kamu&nbsp;bisa mengunjungi&nbsp;<a data-target-href=\"https://www.material.io/\" href=\"https://www.material.io/\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">www.material.io</a> sebagai referensi.",
"Unused_variable_di_dataclass": "Di kelas ini dan kelas model lainnya terdapat variable yang tidak pernah digunakan, sebaiknya dihapus.",
"TODO": "Beberapa <strong>TODO</strong> pada latihan ini masih belum dikerjakan. Pastikan kembali seluruh <strong>TODO</strong> sudah dikerjakan dengan baik sebelum dikirimkan.",
"Nilai_vehicle": "Beberapa nilai pada TODO 2 ini harus memanfaatkan nilai dari variable <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">vehicle</span>. Silakan periksa kembali perintahnya pada project latihan.",
"Return_di_dalam_when": "<p>Fungsi return sebaiknya tidak berada di dalam scope when expression, kode ini bisa dituliskan seperti berikut:</p><pre><code>fun &lt;T&gt; getResult(args: T): Int {<br>&nbsp; &nbsp; return when (args){<br>&nbsp; &nbsp; &nbsp; &nbsp; is Int -&gt; args * 5&nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; is String -&gt; &nbsp;args.length&nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; else -&gt; 0<br><nbsp; &nbsp;=\"\" }<br=\"\">}</nbsp;></code></pre>",
"Kotlin_1.5.10": "Selalu gunakan versi terbaru dari Kotlin Plugin agar kode yang kamu tuliskan sesuai dengan best practice yang disarankan. Saat ini versi terbaru dari Kotlin Plugin adalah <strong>1.5.10</strong>. Silakan update pada file <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">build.gradle</span> level root atau project.",
"Favorite_kosong": "Halaman favorite sebaiknya menampilkan informasi yang konsisten ketika sedang tidak ada data yang dapat ditampilkan.",
"Text_tools": "<p>Sebaiknya gunakan attribute <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">tools:text</span> sebagai preview placeholder untuk editor agar tidak perlu menuliskan nilai secara hardcode. Contoh:</p><pre><code>&lt;TextView<br>&nbsp; &nbsp; android:layout_width=\"wrap_content\"<br>&nbsp; &nbsp; android:layout_height=\"wrap_content\"<br><strong>&nbsp; &nbsp; tools:text=\"Lorem Ipsum\"</strong>/&gt;</code></pre>",
"With_argument_function": "<p style=\"\">Penggunaan fungsi <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">with</span> ini tidak diperlukan karena nilai argumentnya tidak pernah digunakan.&nbsp;</p>",
"Const_variable": "Variable konstan ini sebaiknya ditandai dengan&nbsp;<strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">const</span></strong> dan dimasukkan ke dalam scope&nbsp;<strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">companion object</span></strong>.<br>",
"Hapus_kode_yang_tidak_digunakan": "Kode yang tidak pernah digunakan sebaiknya dihapus daripada dikomentar agar kode yang sudah dapat berjalan dengan baik terlebih lebih bersih dan rapih.",
"Delay": "Anda belum menambahkan delay untuk beberapa TODO di latihan ini. Silakan periksa kembali perintah yang ada pada project latihan ya.",
"Invalid_invocation": "Invocation yang dilakukan belum sesuai dengan kelas pengujian. Kelas ini digunakan untuk menguji kelas repository jadi seharusnya invocation yang dilakukan adalah <strong>xxx</strong> bukan <strong>xxx</strong> SIlakan disesuaikan terlebih dahulu ya.",
"Penyederhanaan_dengan_elvis": "<p>Fungsi ini bisa disederhanakan lagi dengan hanya menggunakan style&nbsp;<em>single expression</em><em>&nbsp;body&nbsp;</em>seperti berikut:</p><pre><code>fun calculateResult(valueA: Int, valueB: Int, valueC: Int?)<br>&nbsp; &nbsp;&nbsp;<strong>= valueA + (valueB - (valueC ?: 50))</strong></code></pre>",
"Content_Desctiption": "Pada sebuah&nbsp;<strong>ImageView</strong>, jangan lupa untuk tambahkan attribut&nbsp;<strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">android:contentDescription</span></strong>. Ini mendefinisikan konten dengan teks yang menjelaskan secara singkat konten tampilan. Properti ini digunakan terutama untuk aksesibilitas. Karena beberapa tampilan tidak memiliki representasi tekstual, atribut ini dapat digunakan untuk menyediakannya.",
"Safe_call_dihapus": "<p>Kode pada latihan ini belum tepat karena Anda menghapus&nbsp;<em>safe call</em> yang berada pada parameter&nbsp;<strong>valueC</strong>. Baca kembali perintah pada project latihan, di sana Anda disuruh menetapkan nilai&nbsp;<strong>50</strong> sebagai angka default dari&nbsp;<strong>valueC</strong></p>",
"Ekspresi_belum_sesuai": "Ekspresi pada <em>if expression</em> ini masih belum sesuai. Silakan periksa kembali perintah yang berada pada project latihan.",
"Testing_scenario": "Agar dapat diperiksa dengan baik, tuliskan skenario pengujian dengan rinci dan dan detail seperti id view mana yang di test agar tim reviewer tau pengujian seperti apa yang akan dijalankan. Contohnya bisa dilihat pada modul <a href=\"https://www.dicoding.com/academies/129/tutorials/4739\" target=\"_blank\" rel=\"noreferrer noopener\" data-mce-href=\"https://www.dicoding.com/academies/129/tutorials/4739\"><strong>Latihan Instrumentation Testing</strong></a>. Silakan disesuaikan terlebih dahulu ya.",
"Unused_lambda_argument": "<p>Jika tidak pernah digunakan, lambda argument ini bisa diubah menjadi seperti berikut:</p><pre><code>binding.toggleButton.setOnCheckedChangeListener { _, _isChecked -&gt;</code></pre>",
"Use_onViewCreated_instead_onActivityCreated": "Inisialisasi nilai object view sebaiknya dilakukan di dalam fungsi&nbsp;<span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\"><strong>onViewCreated</strong><span>. Karena kedepannya fungsi&nbsp;<span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\"><strong>onActivityCreated</strong><span> akan berstatus&nbsp;<em>deprecated</em> dan tidak disarankan untuk digunakan lagi.",
"Private_variable": "Variable atau fungsi yang tidak pernah diakses dari kelas lain sebaiknya dijadikan <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">private</span>.",
"Parameter_dengan_nilai_sama": "Parameter format ini selalu bernilai sama saat dipanggil, sebaiknya dituliskan inline.",
"Credential_security": "<p>Untuk alasan keamaan kredensial, hindari menyematkan sebuah <strong>TOKEN API</strong> ke dalam sebuah kelas, sebaiknya dipindahkan ke dalam berkas <em><strong>build.gradle</strong></em> seperti berikut:</p><pre><code>android {<br>&nbsp; &nbsp; defaultConfig {<br> &nbsp; &nbsp; buildConfigField(\"String\", \"KEY\", '”b650046bf640e7bf7054093854b8d02a\"')<br>&nbsp; &nbsp; }<br>}</code></pre><p>Untuk mengaksesnya kamu bisa menggunakan properti&nbsp;</p><pre><code spellcheck=\"false\">val mySuperScretKey = BuildConfig.KEY</code></pre>",
"Property_access_syntax": "Kotlin memiliki <em>Property Access Syntax</em> yang memungkinkan kamu untuk mengakses suatu properti tanpa menggunakan <em>getter setter</em> seperti pada Java. Periksa kembali seluruh kode kamu dan ubahlah penggunaan <em>getter setter</em> menggunakan <em>Property Access Syntax</em>.",
"adapterPosition_deprecated": "Properti <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\"><strong>adapterPosition</strong></span> telah <em>deprecated</em>, sebaiknya diganti dengan <strong>binding<span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\" data-mce-style=\"padding: 2px 4px; color: #c7254e; background-color: #f9f2f4; border-radius: 4px;\">bindingAdapterPosition</span></strong>.",
"If_daripada_when": "Jika menggunakan Boolean untuk ekspresi, cukup gunakan <em>if expression</em> daripada menggunakan <em>when expression</em>.",
"PascalCase": "Penamaan interface sebaiknya menggunakan format penulisan <strong>PascalCase</strong> (xxx)",
"Getter_setter_belum_ditambahkan": "TODO untuk menambahkan <em>getter setter</em> pada properti <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">sleep</span> ini belum dikerjakan.&nbsp;",
"Avoid_warning": "Agar memastikan project yang kamu buat terhindar dari segala bentuk warning ataupun error, kamu bisa melakukan inspeksi kode dengan mudah melalui <strong>Analyze → Inspect Code</strong>.&nbsp;",
"First_and_last": "<p>Fungsi ini bisa disederhanakan dengan memanfaatkan fungsi&nbsp;<strong>first</strong> dan&nbsp;<strong>last</strong> seperti berikut:</p><pre><code>fun String.getFirstAndLast() = mapOf(\"first\" to first(), \"last\" to last())</code></pre>",
"If_at_testing": "Saat menerapkan unit testing, hindari menggunakan <em>if expression</em> karena jika hasil evaluasinya bernilai <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">false<span>, skenario di dalamnya tidak akan tereksekusi dan pengujian akan menjadi tidak valid.",
"Hasil_pencarian_hilang": "Pastikan kembali hasil pencarian yang sebelumnya sudah tampil tidak hilang ketika pengguna kembali dari halaman detail menggunakan tombol back yang ada pada toolbar",
"Remove_unused_code": "Kode yang tidak pernah digunakan baik itu Class, method, ataupun variable jika tidak digunakan sebaiknya dihapus. Kamu bisa memanfaatkan <strong>Analyze - Code Cleanup</strong> untuk melakukannya dengan cepat.",
"Indentasi": "Selalu perhatikan indentasi baris agar kode yang sudah dituliskan menjadi rapih",
"Anotasi_mock": "<p style=\"\">Sebaiknya manfaatkan anotasi <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\" data-mce-style=\"padding: 2px 4px; color: #c7254e; background-color: #f9f2f4; border-radius: 4px;\">@Mock</span></strong> untuk melakukan mocking pada object yang memiliki tipe parameter.</p>",
"KTX": "Cobalah untuk memanfaatkan versi library KTX yang disedikan AndroidX untuk mempermudah penerapan library yang akan digunakan di dalam project.",
"Grouping_package": "Cobalah untuk mengelompokkan Class yang memiliki fungsi dan tanggung jawab yang sama dalam suatu package agar project yang dikembangkan memiliki struktur yang lebih rapih dan akan memudahkan kamu dalam melakukan maintenances kedepannya.",
"idling_call": "Pemanggilan fungsi <em>increment</em> ini seharusnya dilakukan pada layer data, bukan layer view. Silakan disesuaikan ya.",
"Companion_object": "Penulisan <em>companion object</em> sebaiknya diletakkan di paling bawah dari sebuah class sesuai dengan konvensi penulisan kode Kotlin di tautan <a data-mce-href=\"https://kotlinlang.org/docs/reference/coding-conventions.html#class-layout\" href=\"https://kotlinlang.org/docs/reference/coding-conventions.html#class-layout\">ini</a>.",
"Unused_with": "Penggunaan fungsi <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">with</span> ini tidak diperlukan karena nilai argumentnya tidak perna digunakan",
"Incorrect_idling_resources": "<strong>Instrumentation test</strong> masih belum tepat. Pada submission ini, jika pada aplikasi terdapat proses <strong><em>asynchronous</em></strong>, maka <strong>wajib</strong> menerapkan <strong>Idle Resources</strong>. Tidak diperbolehkan menggunakan fungsi delay. Periksa kembali ketentuan pada modul submission.",
"ViewLifeCyclerOwner": "Untuk <strong>observe</strong> LiveData di dalam Fragment sebaiknya menggunakan <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\"><strong>viewLifecycleOwner</strong></span> daripada menggunakan kelas Fragment sebagai owner untuk menghindari lifecycle issue.",
"Library_version": " Library ini sudah tersedia versi terbarunya x.x. Silakan diupdate beserta library lainnya ya agar kode yang dituliskan mengikuti best practice dari library yang digunakan.",
"Package_of_Parcelize": "<p style=\"\">Sebaiknya gunakan <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\"><strong>@Parcelize</strong></span> yang disediakan dari package <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">kotlinx.parcel.Parcelize</span>.</p>",
"Shared_dependencies": "Beberapa dependensi ini sudah dideklasi di dalam berkas <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">shared_dependencies.gradle</span>, sehingga sudah tidak perlu ditambahkan lagi.",
"Security_in_interceptor": "Saat menggunakan logging interceptor, pastikan kembali pesan log hanya akan tampil pada mode debug. Saat informasi sensitif dapat mudah lihat di jendela logcat dan ini membuat penerapan security menyebabkan vuln di mana data yang tampil dapat dimanfaatkan oleh pihak yang tidak bertanggung jawab.",
"Setting_preferences": "Sebaiknya manfaatkan setting preferences untuk halaman detail karena saat ini halaman tersebut ambigu karena ketika pengguna belum mengaktifkan alarm, tombol untuk menonaktifkannya sudah tersedia",
"Lambda_argument": "Lambda argumen yang tidak pernah digunakan sebaiknya diubah menjadi seperti berikut.",
"Hasil_perncarian_kosong": "Tambahkan pesan keterangan yang tampil konsisten saat pencarian tidak dapat menampilkan data.",
"just_invocation": "Skenario yang berada di dalam test case ini masih belum tepat karena hanya terdapat invocation tanpa adanya assertion dan verification, silakan ditambahkan terlebih dahulu ya.",
"Nilai_kembalian": "Nilai yang dikembalikan dari beberapa fungsi ini adalah hasil perhitungan paramter <em>valuaA</em> dan <em>valueB</em>.&nbsp;",
"Empty_constructor": "Sebuah kelas yang tidak mempunyai <em>primary constructor</em> tidak memerlukan parenthese <strong>()</strong>.",
"Text_size": "Ukuran dari sebuah teks pada TextView sebaiknya tidak lebih kecil dari 12sp.",
"Unused_namespace": "Namespace yang attributenya tidak pernah digunakan sebaiknya dihapus.",
"HTMLCompat": "<p style=\"\">Sebaiknya gunakan kelas <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\" data-mce-style=\"padding: 2px 4px; color: #c7254e; background-color: #f9f2f4; border-radius: 4px;\">HtmlCompat</span></strong> daripada <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\" data-mce-style=\"padding: 2px 4px; color: #c7254e; background-color: #f9f2f4; border-radius: 4px;\">Html</span></strong> agar tidak terdapat penggunaan fungsi yang telah <em>deprecated</em>.</p>",
"Use_sp_instead_dp": "<p>Gunakan <em>Scale-Independent Pixels</em> (<strong>sp</strong>) untuk mengatur ukuran teks pada view yang mempunyai attribute <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">textSize</span></strong>.</p><pre><code>&lt;TextView<br><strong>&nbsp; &nbsp; android:textSize=\"20sp\"</strong><br>&nbsp; &nbsp; android:layout_width=\"match_parent\"<br>&nbsp; &nbsp; android:layout_height=\"wrap_content\" /&gt;</code></pre>",
"Nested_with_constraintlayout": "Ketika menggunakan <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">ConstraintLayout</span>, sebaiknya hindari nested hirarki layout karena dengan <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">ConstraintLayout</span> kamu bisa menyusun tampilan aplikasi yang kompleks tanpa harus melakukan nested.",
"GlobalScope": "Sebaiknya hindari penggunaan <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\" data-mce-style=\"padding: 2px 4px; color: #c7254e; background-color: #f9f2f4; border-radius: 4px;\">GlobalScope</span></strong> karena job akan dijalankan pada level application.",
"Menggunakan_elvis": "<p>Fungsi ini bisa disederhanakan dengan hanya menggunakan&nbsp;<em>elvis operator</em> seperti berikut:</p><pre><code>fun calculateResult(valueA: Int, valueB: Int, valueC: Int?)&nbsp;<br>&nbsp; &nbsp; = valueA + (valueB - (valueC ?: 50))</code></pre>",
"Remove_unused_resources": "Selalu perhatikan resources yang tidak pernah digunakan di dalam project karena akan mempengaruhi size APK nantinya. Kamu bisa memanfaatkan fitur <strong>Remove Unused Resource</strong> untuk menghapus resources yang tidak pernah digunakan.",
"Kelas_yang_mirip": "Kelas ini kurang lebih sama seperti kelas <strong>xxx </strong>, sebaiknya dijadikan satu implementasi agar efisien dan menghindarkan kode dari boilerplate.<br>",
"Invalid_unit_test": "Penerapan unit testing pada kelas xxx masih belum tepat. Silakan periksa komentar reviewer pada kolom Submitted App.",
"Ekspresi_untuk_iterasi": "<em>If expression</em> ini seharusnya digunakan untuk menghentikan proses iterasi. Silakan periksa kembali perintahnya pada project latihan.<br>",
"Raw_string": "<p>Anda bisa memanfaatkan&nbsp;<strong><em>Raw String</em></strong> untuk mencetak beberapa baris text seperti berikut</p><pre><code>println(\"\"\"<br>&nbsp; &nbsp; Vehicle<br>&nbsp; &nbsp; Type: $type<br>&nbsp; &nbsp; Maximal Speed: $maxSpeed<br>&nbsp; &nbsp; Maximal Tank: $maxTank<br>\"\"\".trimIndent())</code></pre>",
"Indexing_operator": "<p>Manfaatkanlah fitur indexing sebagai pengganti fungsi get seperti:</p><pre><code>val type = vehicle.getValue(\"type\")</code></pre><p>Sehingga bisa dituliskan seperti:</p><pre><code>val type = vehicle[\"type\"]&nbsp;</code></pre>",
"Nilai_valueC_keliru": "<p>Kode pada latihan ini masih belum sesuai dengan yang diharapkan. Silakan cek kembali perintah yang terdapat pada latihan. Di sana Anda disuruh menerapkan nilai&nbsp;<strong>50</strong> pada&nbsp;<strong>valueC</strong> jika variable tersebut bernilai&nbsp;<strong>null</strong>, bukan mengembalikan nilai&nbsp;<strong>50</strong> saat&nbsp;<strong>valueC</strong> bernilai&nbsp;<strong>null</strong> ketika fungsi dipanggil. Silakan gunakan&nbsp;<em>elvis operator</em> untuk menetapkan nilai default pada object bertipe&nbsp;<strong>nullable.</strong></p>",
"CamelCase": "Penamaan variable atau fungsi sebaiknya menggunakan format penulisan <strong>camelCase</strong> (xxx)",
"Onboarding_atau_preload_data": "Sebaiknya tambahkan onboarding fitur pencarian atau preload data daripada dibiarkan kosong ketika pengguna membuka halaman aplikasi",
"Always_return_true": "Hasil ekspresi ini selalu mengembalikkan nilai <strong>true</strong>, silakan disesuaikan kembali.",
"Dynamic_feature_favorite": "Penerapan dynamic-feature untuk fitur favorite masih belum tepat. Di dalam module maps tidak terdapat akses apapun terkait favorite baik itu untuk daftar item dfavorite atau yang lainnya. Silakan diperiksa kembali dan disesuaikan terlebih dahulu ya.",
"Nilai_dinamis": "Kode yang berada pada latihan ini masih belum tepat karena selalu mengembalikkan nilai statis. Seharusnya fungsi yang berada di latihan tersebut dapat mengembalikan nilai dinamis berdasarkan nilai receivernya.&nbsp;",
"Ubah_struktur": "Untuk menyelesaikan tugas latihan, Anda tidak diperbolehkan mengubah/menghapus kode yang sudah ada. Silakan sesuaikan kembali dan kerjakan berdasarkan perintah yang ada pada project latihan ya.",
"Satu_kondisi": "Jika hanya terdapat satu kondisi, sebaiknya gunakan if expression.",
"Empty_function": "Jika tidak terdapat logika kode, sebaiknya pemanggilan fungsi ini dihapus.",
"Rumus_perhitungan": "Rumus perhitungan pada kode yang ditambahkan masih belum tepat.&nbsp;",
"Hardcoded_string": "Hindari penggunaan hardcoded string.&nbsp;Kamu&nbsp;bisa memindahkannya kedalam file&nbsp;<strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">strings.xml</span></strong>.",
"conditional_statement": "Dalam menerapkan Instrumental Testing hindari menggunakan <em>conditional statement</em> seperti ini karena jika hasil evaluasinya bernilai false, skenario di dalamnya tidak akan pernah dijalankan dan menjadikan test case tidak valid. Silakan disesuaikan terlebih dahulu ya.",
"Latihan_belum_tepat": "Latihan: <strong>xxx</strong> belum tepat. Silakan periksa review yang diberikan pada latihan tersebut.",
"Key": "Ketentuan key pada TODO 1 ini belum sesuai dengan Task TODO yang diberitahukan. Silakan untuk disesuaikan ya :)",
"Layout": "Jika tidak terdapat data variable, penggunaan <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">layout</span> sebagai parent tidak terlalu diperlukan. Silakan disesuaikan lagi ya.",
"Unused_property": "Properti yang tidak pernah digunakan sebaiknya dihapus.",
"Fungsi_baru": "Untuk menyelesaikan latihan, Anda tidak perlu membuat fungsi baru.",
"Use_apply_instead_commit": "Gunakanlah fungsi&nbsp;<span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\"><strong>apply()</strong></span> pada&nbsp;<strong>SharedPreferences.Editor</strong>, ini karena fungsi&nbsp;<span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\"><strong>commit()</strong></span> akan memblok &amp; menulis data penyimpanan persisten sesegera mungkin sedangkan fungsi&nbsp;<strong>apply()</strong> akan menanganinya didalam background proses.",
"Retrofit_and_Coroutine": "Pastikan kembali saat menggunakan Retrofit dan Coroutiene, terdapat handling ketika terjadi error.",
"Redundant_ID_properties": "Saat menggunakan <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">BaseColumns</span>, <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">_ID</span> tidak perlu dideklarasi karena sudah disediakan kelas tersebut.",
"Deprecated": "Sebaiknya hindari menggunakan properti yang telah deprecated.",
"if_else_implementasi": "Kode yang berada pada <em>branch if</em> ini kurang lebih sama seperti kode yang berada pada <em>branch else</em>, sebaiknya kode yang sama tersebut diekstrak menjadi satu fungsi tersendiri untuk menghindari boilerplate code.<br>",
"Invalid_instrumentation_test": "Penerapan instrumentation testing pada kelas xxx masih belum tepat. Silakan periksa komentar reviewer pada kolom Submitted App.",
"List_item_tools": "Di dalam&nbsp;layout&nbsp;editor,&nbsp;<strong>Recyclerview</strong> bisa ditambahkan atribut&nbsp;<span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">tools:listitem</span> yang berguna sebagai placeholder ketika kita sedang menyusun&nbsp;tampilan list item untuk&nbsp;<strong>Recyclerview</strong>. Contohnya seperti berikut:<p></p><pre><code>&lt;androidx.recyclerview.widget.RecyclerView<br>&nbsp; &nbsp; android:layout_width=\"match_parent\"<br>&nbsp; &nbsp; android:layout_height=\"match_parent\"<br><strong>&nbsp; &nbsp; tools:listitem=\"@layout/item_list\"</strong> /&gt;</code></pre>",
"Wrong_scenario": "Skenario pengujian yang berada di dalam test case ini masih belum valid. Saat menguji fungsi <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">viewModelForTvShow.setTvShowBookmark()</span> yang seharusnya diverifikasi adalah interaksi dari fungsi <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">catalogueRepository.setMovieBookmark()</span>. Silakan disesuaikan terlebih dahulu ya.",
"Idling_resources": "<p style=\"\">Pemanggilan <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">EspressoIdlingResource.decrement()</span> seharusnya tidak dilakukan di layer view. Cobalah untuk memindahkannya pada layer data.</p>",
"Gunakan_when_expression": "<p>Fungsi ini sebaiknya memanfaatkan when expression daripada if expression seperti berikut:</p><pre><code>&nbsp; &nbsp;return when (args) {<br>&nbsp; &nbsp; &nbsp; &nbsp; is Int -&gt; args * 5<br>&nbsp; &nbsp; &nbsp; &nbsp; is String -&gt; args.length<br>&nbsp; &nbsp; &nbsp; &nbsp; else &nbsp;-&gt; 0<br>&nbsp; &nbsp; }</code></pre>",
"Menambahkan_kode_untuk_memberi_tahu_pengguna": "Sebaiknya tambahkan kode untuk memberi tahu pengguna jika data tidak dapat ditampilkan daripada hanya menampilkan log error.",
"Kode_transaksi_database": "Kode untuk transaksi database ini seharusnya ditempatkan di dalam kelas <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">ViewModel</span>.",
"Kode_tidak_sesuai": "Kode yang ditambahkan pada latihan ini tidak sesuai dengan perintah yang ada. Silakan periksa kembali perintahnya dan diperbaiki.",
"Elvis_dan_!!": "Ketika menggunakan elvis operator, Anda sudah tidak memerlukan operator <strong>!!</strong> karena operand yang berada setelah elvis tidak akan terpanggil. Silakan diperbaiki.",
"Unused_parcelize": "Kelas ini tidak perlu dijadikan Parcelable karena tidak pernah digunakan untuk transaksi object menggunakan Bundle atau komponennya.",
"Getter_setter_tidak_sesuai": "<p>Pembuatan&nbsp;<em>getter setter</em> properti sleep masih belum tepat. Silakan pelajari kembali bagaimana cara membuat&nbsp;<em>getter setter</em> dari sebuah&nbsp;<em>property</em> pada modul&nbsp;<a data-target-href=\"https://www.dicoding.com/academies/80/tutorials/4315\" href=\"https://www.dicoding.com/academies/80/tutorials/4315\" rel=\"noreferrer nofollow noopener\" target=\"_blank\"><strong>Properties</strong></a>.<br></p>",
"Instrumentation_test_error": "Instrumental Testing masih terdapat test case yang tidak dapat dijalankan dengan baik seperti berikut:<br><br>Screenshoot<br><br>Error di atas terjadi karena perbedaan nilai ekspetasi dan nilai aktual saat pengujian berlangsung. Sedikit catatan, jika aplikasi menampilkan data yang dinamis (API), hindari melakukan pengujian dengan data statis (Dummy)",
"Update_course": "Untuk lulus dari tugas latihan dan mendapatkan sertifikat. Latihan yang dikirimkan haruslah latihan yang terbaru. Silakan lakukan&nbsp;<em>Synchronize Course</em> di IntelliJ IDEA dan pastikan sudah&nbsp;<em>up to date</em> sebelum dikerjakan.",
"Remove_unused_import": "Dalam menulis sebuah kode di dalam sebuah kelas, selalu perhatikan import yang tidak pernah digunakan agar kode yang sudah ditulis menjadi lebih bersih dan enak dilihat. Kamu bisa melakukan reformat code dan optimized import supaya code lebih rapi dan bersih dari import yang tidak digunakan.",
"CollapsingToolbarLayout": "Kamu bisa memanfaatkan <strong>CollapsingToolbarLayout</strong> pada halaman detail untuk menambahkan experience pengguna ketika menggunakan aplikasi.",
"Long_description_item": "Deskripsi item pada list sebaiknya ditampikan semuanya karena akan menyebabkan tinggi list item menjadi tidak sama.",
"Using_Glide_or_Picasso": "Untuk menghindari error seperti Out Of Memory karena aplikasi kehabisan memory saat ingin menampilkan gambar,&nbsp;kamu&nbsp;bisa memanfaatkan seperti&nbsp;<a data-target-href=\"https://github.com/bumptech/glide\" href=\"https://github.com/bumptech/glide\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Glide</a> atau&nbsp;<a data-target-href=\"https://square.github.io/picasso/\" href=\"https://square.github.io/picasso/\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Picasso</a>.",
"Package_direction": "Penulisan package seharusnya disesuaikan dengan lokasi file",
"Waktu_reminder": "Project aplikasi sudah dapat berjalan dengan baik begitupun dengan reminder. Tapi saat ini waktu untuk fitur reminder belum sesuai dengan yang ditentukan yaitu pukul 09.00. Silakan disesuaikan terlebih dahulu.",
"Fungsi_nilai_kembalian_dinamis": "<p style=\"\">Fungsi ini sebiaknya dibuat mengembalikan nilai dinamis dengan memanfaatkan nilai dari <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">TAB_TITLES</span>.</p><pre style=\"\">override fun getCount(): Int = TAB_TITLES.size</pre>",
"Map": "TODO pada latihan ini seharusnya dikerjakan dengan memanfaatkan Map, yakni sebuah collection yang dapat menyimpan data dengan format key-value. Silakan periksa kembali ketentuan pada latihan.",
"BottomNavigationView": "Best practices menggunakan <strong>BottomNavigationView</strong> adalah jika menu yang ditampilkan berjumlah minimal tiga. Jika kurang dari tiga, kamu bisa menggunakan <strong>TabLayout</strong>.",
"Parcelize_package": "Sebaiknya gunakan anotasi <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">@Parcelize</span> yang berasal dari package <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">kotlinx.parcel.Parcelize</span>.",
"Notifikasi_tidak_menampilkan_kembali_aplikasi": "Project aplikasi dikirimkan sudah dapat berjalan dengan baik. Namun untuk lulus dari tugas submission, halaman aplikasi wajib ditampilkan kembali saat notifikasi reminder diklik. Silakan disesuaikan terlebih dahulu ya.",
"Avoid_using_safecall_in_nonnull": "Terdapat penggunaan&nbsp;<em>safe calls</em> pada beberapa variable yang bertipe&nbsp;<em>non-null</em>. Ubah&nbsp;<em>safe calls</em> tersebut menggunakan&nbsp;<em>dot calls</em>. Pelajari kembali tentang fitur&nbsp;<a data-target-href=\"https://kotlinlang.org/docs/reference/null-safety.html\" href=\"https://kotlinlang.org/docs/reference/null-safety.html\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">Null Safety</a><a data-target-href=\"https://www.dicoding.com/academies/55/tutorials/1538?from=1573\" href=\"https://www.dicoding.com/academies/55/tutorials/1538?from=1573\" rel=\"noreferrer nofollow noopener\" target=\"_blank\">.</a>",
"User_onViewCreated_instead_onCreateView": "Fungsi&nbsp;<strong>onCreateView</strong> sebaiknya hanya digunakan untuk melakukan inflate view. Untuk inisialisasi view sebaiknya dilakukan di dalam fungsi&nbsp;<strong>onViewCreated</strong>.",
"Build_tools_version": "Gunakanlah build tools versi terbaru, 30.0.3.",
"Variable_TODO_2": "Yang seharusnya dicetak adalah beberapa variable yang berada pada TODO 2.",
"Logging_interceptor": "Saat menggunakan logging interceptor, pastikan kembali pesan log hanya akan ditampilkan pada mode debug.",
"empty_repo_test": "Untuk lulus dari tugas submission, project submission wajib terdapat pengujian untuk kelas <strong>Repository</strong>, saat ini hanya terdapat pengujian untuk kelas <strong>ViewModel</strong>. Silakan ditambahkan terlebih dahulu ya.",
"Elvis_operator": "<p>Kode ini masih belum tepat, seharusnya Anda menggunakan&nbsp;<em>elvis operator</em>. Baca kembali perintah pada project latihan, di sana Anda disuruh menetapkan nilai&nbsp;<strong>50</strong> sebagai angka default&nbsp;dari&nbsp;<strong>valueC</strong>.<br></p>",
"Handler_deprecated": "Kode untuk membuat object dari kelas <strong>Handler</strong> ini sudah deprecated, untuk mengatasinya kamu harus menambahkan argument seperti berikut:",
"val ": "Variable yang nilainya tidak pernah di-assign lagi sebaiknya menggunakan kata kunci val.",
"Non-null_assertion": "Hindari penggunaan double bang operator (!!) saat pengecekan null, karena akan memaksa suatu variable menjadi non-null. Dan jika ternyata variable tersebut bernilai null, maka bisa menyebabkan NPE. Periksa kembali semua kode kamu dan jangan biarkan satupun operator tersebut tersisa.",
"flatcase": "Penamaan package sebaiknya menggunakan format penulisan <strong>flatcase</strong> ()",
"unloadKoinModules": "Saat menggunakan <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">loadKoinModules</span></strong>, jangan lupa untuk memanggil juga fungsi <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\"><strong>unloadKoinModules</strong></span>.<br>",
"Three_model_in_each_layer": "Pada project yang dikirimkan tidak terdapat model untuk layer presentation seperti yang disematkan pada Catatan:",
"CardView-Guideline": "Silakan pelajari kembali aturan bagaimana menyusun tampilan aplikasi menggunakan <strong>CardView</strong> pada guildeline material <a href=\"https://material.io/components/cards.\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>https://material.io/components/cards.</strong></a>",
"ClassCastException": "Hindari melakukan casting dari <strong>nullable</strong> ke <strong>non-null</strong> karena berpotensi menyebabkan <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">ClassCastException</span></strong>.<br>",
"Activity_name_guideline": "Penamaan kelas activity sebaiknya diakhiri kata kunci Activity (DetailMovieActivity)",
"Submitted_app": "Jangan lupa untuk memeriksa komentar reviewer pada kolom Submitted App.",
"Improvement": "Aplikasi yang Anda kirimkan telah berjalan sesuai kriteria dan kode sudah dituliskan dengan sangat baik. Good Job! Selanjutnya mulailah mempelajari tentang clean code dan clean architecture untuk semakin meningkatkan kualitas kode yang ditulis.",
"Content_description_value": "Nilai dari content description pastikan kembali detail dan sesuai dengan informasi yang ditampilkan",
"Security_implementation": "Penerapan security masih berpotensi menyebabkan vuln. Silakan periksa komentar reviewer pada inisialisasi network client.",
"Multiple_instance_observer": "Hindari memanggil fungsi <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">observe</span></strong> dari dalam fungsi <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">onQueryTextChange</span></strong> karena hanya akan menyebabkan multiple observer instance.<br>",
"Module_name": "Penamaan module sebaiknya dibuat berdasarkan fungsinya, Contohnya module maps bisa diubah menjadi favorite",
"Favorite_as_dynamic-feature": "Untuk lulus dari tugas submission, fitur yang seharusnya dijadikan <strong><em>dynamic-feature</em></strong> adalah fitur favorite. Silakan disesuaikan terlebih dahulu ya.",
"Empty_favorite_scenario": "Seluruh skenario pengujian untuk Instrumental Testing sudah dapat berjalan dengan baik. Namun pada skenario tersebut belum terdapat pengujian menambah dan menghapus favorite pada halaman detail. Silakan ditambahkan terlebih dahulu ya",
"Root_parent": "XXXView ini sebaiknya langsung dijadikan root parent dari berkas layout ini",
"Empty_documentation": "Di dalam berkas ini belum terdapat dokumentasi teknis dari perubahan yang sudah dilakukan. Silakan ditambahkan terlebih dahulu ya.",
"Unused_builder": "<p>Jika tidak terdapat konfigurasi lainnya, deklarasi ini bisa diubah menjadi seperti berikut:</p><pre>private val httpClient = OkHttpClient()</pre>",
"Nested_observation": "<p>Hindari memanggil fungsi <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">observe</span></strong> dari dalam fungsi <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">observer</span></strong> lainnya (<em>nested observation</em>) karena akan menyebabkan multiple observation.<br></p>",
"New_in_dart": "Mulai Dart versi 2 Anda tidak perlu lagi menuliskan keyword <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">new</span></strong> secara eksplisit.<br>",
"Useless_StatefulWidget": "Penerapan <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">StatefulWidget</span></strong> Anda saat ini dapat digantikan dengan StatelessWidget karena tidak ada state yang dikelola baik itu dari segi data maupun widget. Anda bisa menggantinya dengan menggunakan <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">StatelessWidget</span></strong> agar dapat menghemat memori.",
"Wrong_StatefulWidget_implementation": "Penerapan <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">StatefulWidget</span></strong> pada project yang dikirimkan masih belum tepat. Silakan periksa komentar reviewer pada kolom <strong>Submitted App</strong>.<br>",
"Immutable_in_StatelessWidget": "Kelas <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">StatelessWidget</span></strong> tidak melakukan perubahan property di dalamnya, sehingga property sebaiknya dideklarasikan sebagai <span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">final</span>. Silakan tambahkan final pada variabel tersebut.",
"Empty_StatefulWidget_implementation": "Pada project yang dikirimkan belum terdapat penerapan <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">StatefulWidget</span></strong>. Silakan ditambahkan terlebih dahulu ya.<br>",
"Overflow": "<p>Aplikasi Anda berjalan dengan baik, tetapi terdapat error <em>overflow</em> seperti berikut ini:</p><p>//Screenshot</p><p>Untuk solusi tersebut, Anda dapat menggunakan widget <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">Expanded</span></strong>/<strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">Flex</span></strong>/<strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">Flexible</span></strong> agar aplikasi yang Anda buat tidak melebihi batas UI. Atau anda bisa menggunakan komponen <strong><span style=\"padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;\">MediaQuery</span></strong> untuk menentukan sebuah size/ukuran pada sebuah widget agar semua item pada aplikasi Anda dapat responsive disemua ukuran device.</p>",
"glide_4.12.0": "Library Glide ini sudah tersedia versi terbarunya yaitu <strong>4.12.0</strong>. Silakan diupdate beserta library lainnya ya agar kode yang dituliskan mengikuti best practice dari library yang digunakan.",
"Mockito_3.11.0": "Library Mockito ini sudah tersedia versi terbarunya yaitu <strong>3.11.0</strong>. Silakan diupdate beserta library lainnya ya agar kode yang dituliskan mengikuti best practice dari library yang digunakan.",
"Hero_animation": "Akan lebih baik jika Anda menambahkan animasi supaya tampilan aplikasi menjadi lebih menarik. Salah satu yang paling mudah adalah Hero Animation yang dapat Anda pelajari pada tautan berikut: <a href=\"https://www.dicoding.com/blog/menerapkan-animasi-pada-project-flutter/\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Menerapkan Animasi Pada Project Flutter</strong></a>."
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment