Tutorial Function Pada PHP
Latihan Tahun Kabisat
Materi ini memiliki 1 buah lampiran. Namun Anda tidak dapat mengakses lampiran karena belum terdaftar di kursus ini. Klik disini untuk mendaftar.
Pada video ini, kita akan latihan menuliskan kode untuk menentukan apakah suatu tahun termasuk tahun kabisat atau tidak. Sebelum melanjutkan, tentunya kita perlu tau terlebih dahulu apakah itu tahun kabisat? Tahun kabisat adalah tahun yang mendapatkan tambahan 1 hari, yaitu tanggal 29 Februari.
Bagaimana cara menentukan apakah suatu tahun merupakan tahun kabisat atau bukan? Ada aturan main yang harus kita ikuti. Setiap tahun yang merupakan kelipatan 4 adalah tahun kabisat. Kecuali, tahun yang habis dibagi 100 bukanlah tahun kabisat. Kecuali lagi tahun yang habis dibagi 400 adalah tahun kabisat.
Ini adalah source code awal dari latihan. Tugas kita adalah mengisi function isLeapYear untuk memberikan hasil true apabila parameter $year adalah tahun kabisat, atau false apabila parameter $year bukan tahun kabisat.
Di bawahnya ada function testLeapYear yang saya buat untuk menampilkan hasil dari function isLeapYear di layar. Apabila hasilnya benar, maka kita tampilkan tahun sekian adalah Tahun Kabisat. Sedangkan bila hasilnya salah maka kita tampilkan tahun sekian bukan Tahun Kabisat. Lalu dibawahnya lagi kita panggil function testLeapYear untuk menguji hasil latihan kita dengan nilai 1, 4, 1900, 2000 dan 2023. Kalau kita jalankan program ini, maka semua tahun masih dianggap tahun kabisat, karena pada function isLeapYear kita masih langsung return true tanpa memproses parameter $year.
Tulis kode di dalam function isLeapYear untuk menentukan apakah $year adalah tahun kabisat atau bukan, sesuai dengan aturan pada slide barusan. Pause terlebih dahulu video ini dan kerjakan latihan di komputer masing-masing. Kita akan kembali untuk membahas solusi dari latihan ini.
Kita akan mengerjakan soal latihan. Perhatikan aturan pertama dari Tahun Kabisat. Setiap tahun yang merupakan kelipatan 4 adalah Tahun Kabisat. Bagaimana cara kita mengetahui apakah tahun merupakan kelipatan 4? Cara paling mudahnya adalah dengan menggunakan operator modulus. Kita modulus parameter $year dengan angka 4, kalau hasilnya adalah 0, artinya $year adalah kelipatan 4.
Jadi kita bisa tulis kodenya seperti ini. Jika $year % 4 == 0, maka hasilnya true. Selain itu hasilnya false.
if($year % 4 == 0) return true; else return false;
Kita simpan dan jalankan kodenya. Function kita sudah mulai bisa membedakan antara tahun kabisat dan bukan tahun kabisat. Tahun 1 dan 2023 bukanlah tahun kabisat. Namun kita perhatikan lagi aturan yang kedua. Semua tahun yang habis dibagi 100 bukanlah tahun kabisat. Artinya tahun 1900 dan 2000 bukan tahun kabisat. Di program kita masih dianggap sebagai tahun kabisat karena tahun tersebut habis dibagi dengan 4.
Jadi sebelum kita memberikan nilai true, kita harus periksa kembali apakah tahun tersebut habis dibagi 100 atau tidak. Di dalam percabangan, kita tambahkan lagi percabangan. Jika tahun habis dibagi 100, maka kembalikan false. Selain itu kembalikan true.
if($year % 4 == 0) if($year % 100 == 0) return false; else return true; else return false;
Kita simpan dan jalankan. Sekarang dari semua tes, hanya tahun 4 saja yang dianggap Tahun Kabisat. Kita lanjutkan ke aturan ketiga. Semua tahun yang merupakan kelipatan 400 adalah Tahun Kabisat. Artinya tahun 2000 seharusnya adalah tahun kabisat ya. Namun di program kita masih dianggap bukan kabisat karena kelipatan 100.
Artinya sebelum kita memberikan hasil false, kita harus menambahkan percabangan lagi. Jika tahun habis dibagi 400, maka hasilnya true. Selain itu baru hasilnya false.
if($year % 4 == 0) if($year % 100 == 0) if($year % 400 == 0) return true; else return false; else return true; else return false;
Kita simpan dan jalankan. Sekarang barulah kode kita bisa berjalan sesuai dengan semua aturan pada slide.
Sampai disini sebenarnya kita sudah berhasil mengerjakan soal latihan. Namun perhatikan kode jawaban kita agak susah untuk dibaca, karena kita menggunakan percabangan bersarang yang menjorok ke dalam.
Agar jawaban kita bisa lebih bagus, kita lakukan refactoring ya. Bagaimana caranya? Kita buat function baru isLeapYear2 untuk menuliskan jawaban versi kedua yang lebih mudah untuk dibaca.
Untuk percabangan seperti ini, bisa kita refactoring dengan cara memeriksa percabangan di bagian paling dalam terlebih dahulu. Jadi yang pertama kali kita periksa adalah apakah $year habis dibagi 400. Apabila iya, maka jawabannya adalah true.
Namun apabila tidak, maka kita periksa lagi percabangan di luarnya, yaitu apakah $year habis dibagi 100. Jika benar maka jawabannya false. Jika salah, maka kita periksa lagi percabangan paling luar, yaitu apakah $year habis dibagi 4. Jika benar maka jawabannya true, dan sisanya jawabannya adalah false. Kode percabangan seperti ini lebih gampang untuk dibaca dibandingkan dengan kode percabangan versi sebelumnya.
if($year % 400 == 0) return true; else if($year % 100 == 0) return false; else if($year % 4 == 0) return true; else return false;
Selanjutnya kita ubah function untuk tes jawaban. Kita pakai cara mudah terlebih dahulu ya. Kita copy paste kodenya. Lalu di bagian bawah, kita panggil function isLeapYear versi kedua. Kita simpan dan jalankan. Maka kita mendapatkan hasil tes ganda ya, dimana isLeapYear versi pertama dan versi kedua memberikan jawaban yang sama.
Nah, function isLeapYear versi 2 ini, masih bisa kita refactoring lagi menggunakan fitur baru PHP8 yang bernama MatchExpression. Bagaimana caranya? Kita buat lagi ya versi ketiga.
Apa isi functionnya? Pertama kita return match(true). Sedangkan untuk kondisi di dalamnya, kita tinggal ikuti kode percabangan pada isLeapYear versi 2. Pertama kita cek dahulu kalau $year habis dibagi 400, maka hasilnya true. Kemudian apabila $year habis dibagi 100, maka jawabannya false. Dan kondisi terakhir apabila $year habis dibagi 4, maka jawabannya true. Dan jawaban default adalah false.
Kita copy paste lagi bagian test untuk mencoba function isLeapYear versi 3. Kita simpan dan jalankan. Dan ternyata ketiganya memberikan jawaban yang sama ya.
Sampai disini kita sudah berhasil menjawab soal latihan dengan menggunakan 3 versi jawaban ya. Versi pertama adalah percabangan bersarang. Versi kedua adalah percabangan bersarang yang telah di-refactoring agar lebih mudah untuk dibaca. Sedangkan versi ketiga menggunakan fitur PHP8 Match Expression.
Dengan menggunakan fasilitas tanya jawab, maka Anda bisa bertanya dan akan dijawab langsung oleh instruktur kursus.
Anda belum terdaftar pada kursus ini sehingga tidak bisa mengajukan pertanyaan.