Tuesday, 18 November 2014

Membahas soal test PHP

Kali ini saya mencoba membahas 4 soal untuk test PHP Beginner pada web penyedia jasa freelance.

Fantastic three sequence

Pada soal pertama ini kita diminta membuat function baris bilangan, lihat gambar soal dibawah.

Pada soal diatas kita diminta membuat sebuah function yang menampilkan urutan angka seperti pada gambar, urutan angka ini memiliki sebuah pola, yang dari pola ini kita bisa membuat code function yang dibutuhkan. Fantastic three sequence adalah urutan angka yang dihasilkan dari penjumlahan tiga angka sebelumnya dan dikurangi satu (baca soalnya). Untuk menyelesaikan soal ini saya memanfaatkan array() (ini hanya salah satu cara untuk menyelesaikan soal ini), perhatikan code-nya.

Pada soal ini telah disebutkan hasil baris angka yang dihasilkan adalah hasil penjumlahan tiga angka dikurang satu. Maka saya menggunakan variable array, dimana variable array ini akan menyimpan setiap urutan angka. Untuk tiga angka diawal "0, 1, 1" saya buat sama dengan soal, dan penghitungan dimulai pada angka ke-4.

Output yang dihasilkan oleh function sequence adalah hasil dari inputan $n, setiap angka hasil looping nilai $n disimpan kedalam variable array, ketika looping sampai kepada angka 4, penjumlahan 3 angka sebelumnya dilakukan dengan mengambil kembali angka pada variable array yang telah disimpan. Untuk mendapatkan 3 angka sebelumnya saya melakukan pengurangan pada nilai $n yang dijadikan index pada variable array (perhatikan code), hasil dari penjumlahan ini dimasukkan kembali ke dalam variable array. Begitu seterusnya sampai looping berhenti.

Karena pada soal yang diminta hanya menampilkan angka terakhir, function sequence hanya mencetak angka akhir dari looping. Gunakan "print_r" jika ingin mencetak variable array.

Count Days

Ini adalah soal ke-2, dalam soal ini kita diminta membuat sebuah function yang menghitung jumlah hari dari rentang waktu yang dimasukkan. Lihat gambar soalnya.

Saya rasa gambar di atas sudah cukup menjelaskan soalnya. User memasukkan sebuah tanggal, lalu kita menghitung jumlah hari yang dihitung dari bulan Januari pada tahun yang sama dari tanggal yang diinput. Perhatikan code-nya.

Perhatikan format tanggal inputan "m.d.Y", dalam kasus ini saya mengubah titik menjadi slash "/" menggunakan function str_replace. Ini saya lakukan karena ketika saya tetap menggunakan titik, format tanggal berubah menjadi "d.m.Y" (pent-- dalam kasus saya).

Untuk mendapatkan tanggal awal, kita memisahkan tanggal, bulan dan tahun. Dan ambil tahun untuk memasukan startDay. Ketika startDay dan endDay telah di convert dari string menjadi date, kita tinggal mengurangi endDay dengan startDay, hasil dari pengurangan ini dibagi dengan bilang 86400 (ini adalah jumlah detik dalam satu hari).

Untuk soal no.2 ini saya membuat dua function (function dalam tanda comment) atau dua jawaban, yang menghasilkan hasil yang sama. Untuk function ke-2 saya menggunakan fungsi "diff" pada object DateTime, fungsi "diff" ini ada pada PHP 5 >= 5.3.0, jadi jika PHP yang kita gunakan tidak memenuhi syarat sebaiknya tidak menggunakan fungsi ini. Menggunakan fungsi ini sangat mudah, seperti contoh code di atas.

Perhatikan dalam menggunakan fungsi-fungsi tanggal setting local time pada local server kita mempengaruhi hasil, karena ada perbedaan waktu dengan waktu international.

Change Nickname

Soal ke-3 kita adalah mengubah nickname pada data array. Perhatikan soalnya pada gambar-gambar berikut.

Pada soal diatas beberapa task yang harus kita penuhi:

  • Nickname lama harus ada di dalam list array.
  • Nickname baru tidak boleh ada dalam list array yang akan digunakan.
  • Nickname baru hanya boleh menggunakan angka dan huruf dengan beberapa karakter yang bisa digunakan.
  • Nickname baru tidak bisa dimulai dengan angka.

Perhatikan code berikut.

Pada code di atas ada 3 function yang dibuat, validationString dan searchData hanya function yang dibuat untuk melakukan pengecekan/validasi string yang sama-sama mengembalikan nilai BOOL. Function changeName memiliki 3 parameter yang akan dimanipulasi. Ketika function ini dieksekusi yang pertama dilakukan adalah melakukan pengecekan apakah data yang akan diubah ada dalam data array users menggunakan function searchData, selanjutnya pengecekan apakah string oldName dan newName tidak memiliki caracter yang dilarang dalam inputan dengan function validationString. Setelah validasi ini terlewati function melakukan looping mencari data yang akan diubah dan juga memindahkan data ke dalam variable array yang baru. Didalam looping diberikan kondisi jika data ditemukan ubah dengan data baru.

Calculate Shipping Fees

Soal ke-4 atua soal terakhir adalah membuat class dan function yang menghasilkan nilai hasil penghitungan untuk jasa pengiriman. Class yang diberikan oleh soal adalah class abstrak. Untuk penjelasan class abstrak bisa dilihat di article Understanding Abstract Classes in PHP. Yang harus dipahami dalam soal ini berhubungan dengan penggunaan class abstra, ketika kita membuat sebuah class abstrak kita juga akan mendefinisikan sebuah function abstrak yang menjadi sebuah function delegation dan besifat mandatory (wajib ada) bagi subclass yang menjadi turunan class abstrak ini. Perhatikan code berikut:

Coba perhatikan penggunaan class abstrak yang dijadikan class induk dua class lain yaitu InternationalShipping dan LocalShipping, setiap subclass ini medeklarasikan function abstrak yang telah ditentukan oleh class abstrak, yang dalam kasus ini adalah function getFees().

Setiap subclass berfungsi menghitung fee dari jenis traksaksinya, lalu dikembalikan hasilnya. Dan yang terakhir adalah function yang menghitung penjumlahan dari kedua transaksi tersebut dan menampilkan hasil dari penghitungan fee.

Untuk catatan dalam memanfaatkan class inheritance atau turunan ketika menggunakan function __construct, jika kita menggunakan PHP > v.5.3 sebaiknya function __construct menggunakan nama class-nya. Karena akan ada perbedaan hasil dikarenakan class InternationalShipping yang menambahkan parameter baru. Permasalahan yang akan timbul adalah parameter ketiga di class InternationalShipping akan bernilai NULL sehingga nilai yang dikembalikan akan salah.

Demikian pembahasan 4 soal test PHP, jawaban yang saya buat di atas bukanlah yang paling benar jadi jika ada kesalahan silakan memberikan perbaikan pada comment dibawah, dan jika ada masukkan atau request tutorial berhubungan dengan pemrograman silakan comment dibawah juga.

No comments:

Post a comment