TOP NEWS

A friend once said, "You can't get so hung up on where you'd rather be that you forget to make the most of where you are." We got lost along the way. But we found each other. And we made a life. A beautiful life. Together.

Wednesday, September 12, 2018

Pemrograman Dasar - 2. Membuat logika alur pemograman


Operator logika merupakan salah satu operator yang paling sering digunakan di JavaScript. Seperti operator perbandingan, operator logika biasa dipakai pada statement if..else, switch, while, for, dll, bersandingan dengan operator perbandingan. Operator logika biasa dipakai dengan nilai boolean. Walaupun begitu hal tersebut tidak membatasi tipe data/expression lain digunakan dengan operator logika.
Operator Logika

Terdapat tiga operator yang termasuk operator logika, yaitu:
AND, &&
OR, ||
NOT, !

Mungkin Anda juga pernah melihat operator & dan |, hanya satu karakter & atau |. Operator tersebut pada JavaScript merupakan operator bitwise. Operator logika dan operator bitwise tidak bisa saling menggantikan fungsi lainnya satu sama lain. Artinya Anda jangan sampai tertukar menggunakan operator logika atau operator bitwise.

Operator logika mengembalikan salah satu dari nilai expression. Baik expression tersebut merupakan nilai boolean atau bukan. Jika expression merupakan nilai boolean maka operator logika akan mengembalikan nilai boolean. Jika tidak maka salah satu dari nilai expression akan dikembalikan. Saya bahas lebih lanjut terkait hal ini pada bagian cara kerja operator logika.
Sintaks

Operator logika AND dan OR membutuhkan dua expression. Sementara operator logika NOT hanya membutuhkan satu expression.

AND, &&expr1 && expr2


OR, ||expr1 || expr2


NOT, !!expr

Cara Kerja Evaluasi Operator Logika

Operator logika mengevaluasi expression sebelah kiri operator kemudian mengevaluasi expression sebelah kanan. Hasil yang dikembalikan operator logika tergantung dari jenis operator logika tersebut, AND, OR, atau NOT, sesuai dengan cara evaluasi diatas.
AND, &&

Untuk operator AND, jika expression sebelah kiri setelah dievaluasi menghasilkan nilai false, maka operator AND akan mengembalikan expression pertama. Kebalikannya, jika expression sebelah kiri setelah dievaluasi menghasilkan nilai true, maka operator AND akan mengembalikan expression kedua.

Jika kedua expression bernilai boolean maka Anda dapat berpatokan terhadap tabel berikut untuk hasil dari operator AND.

Truth table untuk operator AND

OR, ||

Untuk operator OR, jika expression sebelah kiri setelah dievaluasi menghasilkan nilai true, maka operator OR akan mengembalikan expression pertama. Kebalikannya, jika expression sebelah kiri setelah dievaluasi menghasilkan nilai false, maka operator OR akan mengembalikan expression kedua.

Jika kedua expression bernilai boolean maka Anda dapat berpatokan terhadap tabel berikut untuk hasil dari operator AND.

Truth table operator OR

NOT, !

Operator NOT sedikit berbeda dengan operator AND atau OR. Operator NOT hanya membutuhkan satu expression karena tugas dari operator NOT adalah untuk menegasikan hasil evaluasi expression yang diberikan.

Jika expression yang diberikan setelah dievaluasi menghasilkan nilai true,maka operator NOT akan mengembalikan false. Kebalikannya, jika expression yang diberikan setelah dievaluasi menghasilkan nilai false, maka operator NOT akan mengembalikan true.




Konsep yang sudah saya jelaskan tentang operator logika diatas penting untuk dipegang karena pada JavaScript terdapat konsep automatic type conversion. Setiap expression dapat Anda evaluasi menggunakan operator logika diatas. Hasilnya tergantung apakah expression tersebut bernilai truthy atau falsy. Pembahasan tentang truthy dan falsy akan saya bahas pada story selanjutnya.


Short-circuit Evaluation

Seperti yang sudah saya jelaskan pada cara kerja evaluasi operator logika diatas, logical expression dievaluasi dari kiri ke kanan. Hal ini ternyata memungkinkan kita untuk melakukan banyak hal dengan sintaks yang ringkas menggunakan operator logika. Yang perlu diperhatikan hanyalah rule berikut.
False && (any expression), expression tidak akan dijalankan
True && (any expression), expression akan dijalankan
False || (any expression), expression akan dijalankan
True || (any expression), expression tidak akan dijalankan

Expression dapat berupa apapun termasuk pemanggilan fungsi.

Menggunakan short-circuit evaluation
Mengkombinasikan Operator Logika

Pada kasus nyata saat mengembangkan produk, Anda akan menemukan bahwa dalam melakukan pengecekan operator logika biasanya dikombinasikan untuk menghasilkan suatu expression pengecekan yang kompleks. Misalkan seperti contoh berikut. Saya akan menggunakan kasus menentukan tahun kabisat untuk dimodelkan menjadi bentuk logical expression.

Aturan suatu tahun disebut tahun kabisat berdasarkan https://en.wikipedia.org/wiki/Leap_year, yaitu:

Suatu tahun disebut tahun kabisat jika,
Angka tahun tersebut habis dibagi 400, atau
Angka tahun tersebut habis dibagi 4 dan tidak habis dibagi 100

Selain itu, tahun tersebut disebut tahun biasa

Mari kita breakdown satu per satu.

Angka tahun tersebut habis dibagi 400. Jika diterjemahkan ke dalam logical expression JavaScript maka akan seperti ini.year % 400 === 0


Kemudian, Angka tahun tersebut habis dibagi 4 DAN TIDAK habis dibagi 100. Jika diterjemahkan ke dalam logical expression hasilnya sebagai berikutyear % 4 === 0 // habis dibagi 4
year % 100 !== 0 // tidak habis dibagi 100
(year % 4 === 0 && year % 100 !== 0)


Selanjutnya tinggal kita gabungkan kedua logical expression tersebut menjadi:(year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0))


Grouping operator ( ) memastikan bahwa evaluasi terhadap kasus kedua dilakukan terlebih dahulu baru dilakukan pengecekan dari kiri ke kanan. Semakin dalam grouping operator tersebut berada maka makin cepat menunggu antrian dievaluasi.

Mari kita coba di repl.

Fungsi untuk melakukan pengecekan apakah suatu tahun merupakan tahun kabisat

isLeap() mengembalikan true jika parameter year merupakan tahun kabisat, dan sebaliknya. Apa jadinya jika grouping operator saya hilangkan?

Derajat operator AND lebih tinggi dari operator OR sehingga dievaluasi terlebih dahulu

Hasilnya akan tetap sama. Mengapa? Derajat operator AND lebih tinggi daripada operator OR. Jika ada operator AND dan OR dalam satu level maka operator AND akan dikerjakan terlebih dahulu. Berikut saya coba visualisasikan alur dari evaluasi logical expression diatas.


Breakdown:

0. Pre-check, ada grouping operator. Evaluasi expression didalam grouping operator terlebih dahulu.
Mulai evaluasi dari sebelah kiri. Evaluasi year % 4 === 0, 2000 % 4 === 0. TRUE.
Operator AND. Expression pertama bernilai TRUE. Oleh karena itu, lanjut ke evaluasi expression kedua.
Evaluasi year % 10 !== 0, 2000 % 100 !== 0. FALSE.
Kembalikan FALSE karena expression kedua bernilai false. Semua expression dalam grouping operator telah habis. Kembali satu level keatas.
Mulai evaluasi dari sebelah kiri. Evaluasi year % 400 === 0, 2000 % 400 === 0. TRUE.
Operator OR. Expression pertama bernilai TRUE. Oleh karena itu, langsung kembalikan expression pertama bernilai TRUE. Tidak perlu mengevaluasi TRUE dengan expression kedua.
Semua expression telah selesai dievaluasi. Kembalikan TRUE hasil dari gabungan evaluasi seluruh expression.
Derajat Operator Logika

Melanjutkan dari story sebelumnya pada operator perbandingan, derajat operator juga berlaku untuk operator logika. Jika operator logika ditambahkan pada daftar tersebut maka daftar nya akan menjadi seperti berikut.
Postfix Increment, x++
Postfix Decrement, x--
Logical NOT, !
Prefix Increment, ++x
Prefix Decrement,--x
Perkalian, *
Pembagian, /
Modulus, %
Penjumlahan, +
Pengurangan, -
Less than, <
Less than or equal, <=
Greater than, >
Greater than or equal, >=
Equality, ==
Inequality, !=
Strict equality, ===
Strict inequality, !==
Logical AND, &&
Logical OR, ||

Tugas 6



Tugas 7


0 komentar: