Minggu, 05 Agustus 2018

Membuat perulangan bangun segiempat sederhana dengan menggunakan Java



Pada kesempatan kali ini saya akan mencoba mempraktekkan bagaimana membuat sebuah pengulangan bintang dengan pengulangan, dengan menggunakan scanner (input) yang bersifat dinamis. Misalnya seperti ini:
*
   *
   * *
         *
         * *
         * * *
 Atau
*
  * *
  * *
       * * *
       * * *
       * * *
Dst Pada kasus di atas, berarti kita membuat 3 bangun datar. Berarti input kita ialah 3. Lalu, bagaimana kita akan memulainya? Langkah pertama ialah menentukan semua polanya, sebaiknya membuat polanya dengan menggunakan Microsoft excel untuk mempermudah pekerjaan kita. Pada kesempatan kali ini saya akan mencoba membuat pola perulangan segiempat pada gambar 2. Sebelum kita memulai membuat segiempat, mari kita siapkan terlebih dahulu apa input atau scannernya terlebih dahulu, dan saya akan menggunakan variable global untuk menampung N-nya. Seperti ini:
Pada gambar di atas, saya hanya memuat package dan method untuk menampung N untuk inputnya. Keterangan pada gambar di atas ialah Public int n, deklarasi variable global bernama ‘n’, Scanner sc = new scanner(system.in), untuk pendeklarasian variable scanner, this.n = sc.nextInt(), untuk menampung nilai scanner pada n, sc.close(), untuk mengakhiri penggunaan utility scanner, mengacu pada beberapa sumber mengenai penggunaan close, jika scanner tidak diakhiri dengan fungsi close(), maka akan mempengaruhi penggunaan scanner pada class yang lain, (koreksi jika salah!) Kita tentukan dahulu pola segiempatnya. How? Perulangan bangun datar dua dimensi, berarti melalui dua perulangan, yaitu perulangan ke samping (kolom) dan ke bawah (baris). Semisal segiempat pertama ialah segiempat 3 x 3, berarti perulangan sebanyak 3 kali ke samping, dan 3 kali ke bawah. Lalu bagaimana menentukan rumusnya? Kita bisa menggunakan iterasi for, sebanyak 2 kali, atau nested for. Sebelum jauh membuat bagaimana cara kita menggesernya, kita mulai bagaimana membuat pola untuk segiempatnya, karena bintang dari segiempat mengisi seluruh ruang dalam segiempat, maka kita tidak perlu membuat suatu kondisi untuk membuat pola tertentu. Bisa kita tulis seperti ini
 This.polaSegiEmpat = new String[n][n]  memanggil variable global dari polaSegiEmpat, kita bisa mendeklarasikan variable global ini di bawah baris “public int n”, dan cara mendeklarasikannya dengan menulisnya seperti ini [modifier] [type data] “[][]” [nama variable], pada kesempatan kali ini saya menulisnya seperti ini, “public String[][] polaSegiEmpat”. Disini menggunakan [][] karena saya menggunakan array 2 dimensi (kenapa dua? Karena jumlah “[]” ada dua, kalau hanya satu, berarti array satu dimensi). Lalu [n][n] untuk apa? Karena array harus didefinisikan alamatnya, untuk sementara kita mengisinya dengan n pada global variabel, hanya untuk test apakah kode yang saya buat sudah dapat berjalan atau masih terdapat error. Lalu kita menggunakan for 2 kali seperti pada gambar, sepanjang panjang alamat array, atau kita dapat menggantinya dengan ‘n’. Mari coba kita test dengan membuat method cetak() dan main methodnya.
Pada method cetak, kita memanggil method getN() dan setPolaSegiEmpat() agar dapat diterapkan dalam method ini. public static void main(String[] args)  merupakan main method, dan merupakan method utama yang akan di run, dimana pada sebuah aplikasi java harus memiliki 1. Lets check our code.
Yeah, We did it! やった!!!(笑) Jika dalam tahap ini kita sudah berhasil, maka tahap selanjutnya ialah bagaimana kita bisa menggeser segiempat yang kita buat dan menyusutkannya. First, kita harus membuat rumus seberapa jauh pergeserannya Mari kita buat method baru untuk membuat berapa kali pengulangannya, disini saya membuat method iterasiSegiEmpat untuk membuat berapa kali pengulangannya. Dalam method ini nantinya kita masukkan looping for untuk membuat berapa banyak pengulangannya.
Pada method getPolaSegiEmpat sebelumnya kita telah membuat array polaSegiEmpat[n][n] didalamnya, kita pindahkan deklarasi array tersebut ke method iterasiSegiEmpat. Yang perlu diperhatikan ialah bahwa panjang array bukanlah n (read, [n][n]) lagi, melainkan jumlah dari panjang dan lebar dari total sisi persegi yang kita gunakan, misalnya jika hanya ada satu persegi maka total array yang dibuat ialah [0][0], jika 2 maka [3][3], jika 3 maka [6][6], dst. Dan bagaimana rumusnya? Sejujurnya, ketika saya membuat lagi kode ini saya menghabiskan waktu sekitar tiga jam untuk menemukan letak kesalahannya, (sudah termasuk dengan makan, absent-minded syndrome, dan gangguan keponakan). Dengan menggunakan rumus (n * (n + 1)) / 2, kita dapat membuat jumlah alamat array I dan j-nya. Pada method ini saya juga memanggil method sebelumnya dengan parameter k (jumlah pengulangannya). Dan membuat perulangan k selama k kurang dari n, dan iterasi k ialah k++, atau k = k + 1. Dan akhirnya kita memasuki tahap akhir sebelum tahap yang benar-benar akhir. Yaitu saatnya kita menyunting apa yang ada di method pola segi empat.
Pada method ini, saya membuat variabel geser untuk menentukan pergeseran sesuai dengan perulangannya, maksudnya ialah ketika persegi ke 0, dengan rumus geser, saya menggeser persegi sesuai nilai k-nya, jika dihitung maka, persegi ke 0, menggeser sejauh 0 (tidak bergeser), ke 1 menggeser sejauh 1, ke 2 menggeser sejauh 3, ke 3 sejauh 6, dst. Dimana pergeseran ke bawah dan ke kanan, maka nilai I dan j setiap bergeser pasti tidak tetap, dengan kata lain, alamat array I dan j setiap perulangan dipengaruhi oleh k. maka kita buat pergeserannya sesuai k, dimana rumus geser yang saya gunakan ialah (k * (k + 1)) / 2. Karena pada method sebelumnya parameter k digunakan dalam iterasi for, maka pada method ini, nilai k juga berubah sesuai dengan urutan iterasinya dimana ketika k = 0, maka variabel gesernya adalah 0, jika k = 1 maka geser = 1, jika k = 2 maka geser = 3, jika k = 3, maka geser = 6, dst.

Dan hasilnya, menjadi seperti ini.



Lalu bagaimana menghilangkan null-nya, kita dapat menambahkan fungsi pada method cetak(). Dengan menambahkan fungsi if value sama dengan null, maka hanya menambahkan spasi.


Dan hasil akhirnya menjadi



sekian tutorial kali ini, semoga bisa bermanfaat bagi yang membaca. Terima kasih.

BootCamp Xsis Academy - up to week five - part II

Masuk ke part II, karena semalam harus segera tidur karena termasuk manusia yang sulit tidur dan sulit bangun saya, selain itu hari ini harus berangkat dari tangerang yang cukup makan waktu perjalanannya. Lets continue!

Setelah membahas front-end dan back-end-nya, mari masuk lebih jauh lagi. Pada proses bisnis yang lebih besar, pada back-end ditambah package DAO, yaitu Data Access Object. dimana pada bagian service kita memanipulasi data yang akan kita masukkan ke database, maka bagian DAO ialah untuk proses query-nya, atau proses request ke databasenya, baik insert, update, maupun delete-nya. Misalnya ada data A ingin kita masukkan ke database, sementara database menginginkan data tersebut berupa 65. Maka kita dapat mengubahnya di service atau jika ingin menambahkan A- atau yang lain maka kita mengubahnya di service, walaupun kita bisa melakukannya dengan cara lain.

Pada pertengahan minggu ke empat, kami sekelas mulai menggunakan spring. Dengan menggunakan framework ini kita bisa mengurangi banyak kode, yang pada bagian kontroller habis untuk method doGet dan doPost-nya. Selain itu kami juga menggunakan framework hibernate untuk mapping object-oriented domain model ke relational database. Ada yang unik menggunakan hibernate, dimana data kueri dibentuk menjadi sebuah objek sehingga ketika memanipulasi satu data pada kolom tertentu maka harus mengubah full satu kolom tersebut.

Sekian untuk share kali ini, semoga bisa bermanfaat. Maaf jika ada salah-salah penjelasan atau salah-salah kata

BootCamp Xsis Academy - up to week five - part I

days after days, sekitar dua minggu setelah evaluasi tahap satu, mulai memasuki minggu teknologi. Pada minggu ini mulai dikenalkan pada bahasa Java dan bagaimana membangun sebuah aplikasi berbasis web sederhana. Jika selama dua minggu pertama hanya dikenalkan java hanya pada kulit arinya saja, minggu ini mulai memasuki ke lapisan epidermis kulitnya, bagian yang lebih bawahnya. Memasuki minggu ini, awalnya dikira logic itu sudah cukup membuat pusing kepala, ternyata memasuki minggu-minggu ini, kesulitan makin menjadi-jadi, terlebih harus memahami apa itu polimorphysm, encapsulation, dan kawan-kawannya.

Memasuki minggu-minggu teknologi ini, saya hanya bisa memahami sekilas, bahasanya telan mentah-mentah karena waktu yang diberikan cukup singkat. hampir setiap malamnya, saya mengulang materi karena singkatnya waktu yang diberikan, dan mungkin jika ketika tidur dan bermimpi bisa koding, ingin rasanya koding saat mimpi karena mereview materipun hanya sepersekian persen yang benar-benar bisa dipahami, itupun jika paham (笑).

Banyak sekali yang diberitahukan kepada kami, semua yang berkaitan bagaimana dan apa saja yang diperlukan untuk membangun aplikasi web dengan menggunakan Java. Seperti kata trainer yang mengajari saya, Java bagaikan hutan belantara dimana untuk membangun sesuatu memiliki banyak cara dan permasalahannya ialah bagaimana membangun sebuah aplikasi yang baik dan dipahami oleh orang lain untuk dikembangan serta membuat kode se-efektif mungkin, karena yang mampu banyak namun tidak banyak yang mampu membuatnya dengan rapi.

Awalnya, kami sekelas membuat beberapa halaman dengan fungsi dasar dengan menggunakan bahasa pemprograman Java, tanpa menggunakan framework. Basically, untuk membuat halaman web dengan membuat Java cukup banyak membuat folder ini itu, secara pribadi jika halaman web tidak memiliki cakupan modul yang banyak, cukup rumit untuk membuatnya daripada menggunakan bahasa PHP (dengan menggunakan XAMPP dan database MySQL), karena harus banyak mengunduh library serta konfigurasi servlet yang cukup asing bagi pembelajar baru seperti JSTL (Java Standard Tag Library), library untuk koneksi ke database. Berbeda dengan menggunakan XAMPP yang hanya membuat koneksi ke database dengan memanggil server databasenya, untuk Java kita harus menyematkan library koneksi agar Java bisa memindai database yang tersedia.

Ok, lets to the lesson. Membangun sebuah web dengan java, kita membuat sebuah program dengan multithreading programming, itu berarti kita membuat satu proses yang dapat menyelesaikan banyak fungsi. Kelebihannya ialah threads dapat berkomunikasi satu sama lain (shared memory), selain itu dengan ini program akan lebih responsive, saat menjalankan operasi yang panjang. Kekurangannya ialah permasalahan ketika mengakses shared objek atau memory. (source: stackoverflow.com)

Saya dapatkan dalam membangun sebuah aplikasi web ada dua hal yang harus diperhatikan, yaitu mengenai back-end dan front-end (belum termasuk yang lain-lainnya, namun itu salah dua utamanya). Pembuatan web dinamis, tidak akan lepas dari dua hal ini, karena ada yang mengendalikan server dan juga mengatur tampilan di user. Berbeda dengan web statis yang hanya berfokus pada tampilannya saja, namun jarang menemui web statis karena kebutuhan user di web sederhanapun makin beragam, terutama jika memerlukan database.

Untuk back-end, dengan menggunakan bahasa pemprograman Java. Dibangun atas 4 package, yaitu controller, modal, service pada awalnya (untuk util saya lupa apakah ini diajarkan pada basic atau ketika sudah memakai spring, saya jelaskan nanti). Pada controller kita berfokus pada pengendalian request dan respons, yang memberitahukan bahwa semua proses dikendalikan oleh controller ketika ada request masuk ke sistem dan mengembalikannya berupa respons ke depan. Request nantinya bisa bermacam-macam, namun yang paling dasar ialah berupa 'GET' atau link URL. Lalu model mempresentasikan data request, biasanya model merepresentasikan data di dalam database. Yang terakhir adalah service, dimana service ialah manipulasi request dan mengolah respons tertentu sesuai dengan kebutuhan. Kita buat gambaran umumnya mengenai back-end ini, misalnya saja ketika user meminta (request) data A lalu service yang mengolah data A ingin diolah seperti apa, Controller yang mengatur A akan masuk ke service yang mana, dan jika ada kaitannya dengan database controller akan memanggil model yang sesuai dengan kebutuhan si user dan mengirimkannya ke service yang terlibat dalam proses request user. Nantinya ketika request selesai maka akan menghasilkan respons sesuai permintaan, tergantung fungsi yang kita buat.

Lalu masuk ke front-end, di front-end banyak yang bilang jika lebih mudah dari back-end, nyatanya baik back-end maupun front-end sama-sama memiliki kendala masing-masing, semisal tampilannya harus ramah, minim loading, dapat dijalankan normal baik melalui komputer maupun mobile, dan lain lain. Dalam hal tampilan, biasanya pembuat web menggunakan bahasa HTML dengan menggunakan framework untuk mempercantik tampilannya, semisal bootstrap. Selain itu bisa juga dengan menambah beberapa fungsi untuk menjadikan halaman lebih komunikatif, seperti menambah fungsi javascript. Dalam javascript juga kita bisa menambah fungsi jquery, ajax, datatable, dll tergantung kebutuhan sehingga lebih memudahkan front-end developer dalam membangun tampilan depan yang komunikatif dan memiliki desain yang lebih menarik.

Cukup sekian untuk cerita kali ini mengenai pengalaman saya di bootcamp Xsis Academy kali ini, semoga bisa bermanfaat.