Arithmetic Expression
- Functional side effect merupakan kejadian ketika suatu fungsi mengganti parameter dua-arah
atau non-local variable
- Masalah terkait fuctional side effect:
Ketika suatu function direferensikan di suatu expression mengubah operand lain di
expression tersebut, contoh:
int a = 5;
int fun1() {
a = 17;
return 3;
} /* end of fun1 */
void main() {
a = a + fun1();
} /* end of main */
Overloaded Operator
- Penggunaan sebuah operator untuk lebih dari satu maksud dikenal dengan operator
overloading
- Beberapanya umum, seperti operator penambahan (+)
- Beberapa lainnya berpotensi menimbulkan masalah,, seperti operator * di C dan C++
Menghilangkan pendeteksi compiler error
Kehilangan beberapa readability
- Beberapa bahasa seperti C++, C#, dan F# memperbolehkan user-defined overloaded operator
Ketika digunakan dengan bijak, operator semacam itu dapat membantu readability
(menghindari method call, expression muncul natural)
Dapat memunculkan masalah seperti, user dapat mendefinisikan operation yang tak masuk
akal; readability bisa berkurang, bahkan ketika operator tersebut masuk akal
Type Conversion
- Narrowing conversion merupakan conversion yang meng-konversi suatu objek ke tipe yang tak
dapat memasukkan seluruh nilai dari tipe originalnya, missal float menjadi int
- Widening conversion merupakan conversion yang objeknya dikonversii ke suatu tipe yang dapat
memasukkan setidaknya perkiraan semua nilai dari tipe originalnya seperti int menjadi float
- Mixed-mode expression merupakan expression yang operatornya dapat memiliki operand dari
tipe yang berbeda
- Coercion merupakan tipe conversion implisit
Kelemahan: mengurangi kemampuan pendeteksi error compiler
- Di kebanyakan bahasa, semua numeric type dipaksa (coerced) di expression, menggunakan
widening conversion
- Explicit type conversion dikenal casting di bahasa berbasis C
C: (int)angle
F#: (float)sum
Error di Expression
- Klausa
Batasan inheren dari aritmatika (seperti pembagian ke nol)
Batasan aritmatika komputer (seperti overflow)
- Terkadang diacuhkan oleh system run-time
Relational Expression
"7" == 7
Bernilai true, sedangkan
"7" === 7
Bernilai false
Boolean Expression
- Boolean operator hanya mengambil Boolean operand dan menghasilkan nilai Boolean
- C89 tidak memiliki tipe Boolean, sehingga ia menggunakan tipe integer dengan 0 sebagai false
dan nonzero sebagai true
- Tingkat precedence:
postfix ++, --
unary +, -, prefix ++, --, !
*, /, %
binary +, -
<, >, <=, >=
=, !=
&&
|| lowest
- Short circuit evaluation merupakan evaluasi yang mana hasilnya dapat ditentukan tanpa
mengevaluasi semua operand dan atau operator, misal:
(13 * a) * (b / 13 - 1)
Jika salah satu (13 * a atau b / 13 - 1) menghasilkan nilai nol, maka hasil dari ekspresi tersebut
bisa diketahui merupakan nol
Assignment Statement
- Syntax umum
<target_var> <assign_operator> <expression>
- Operator assignment:
= Fortran, Basic, bahasa berbasis C
:= Ada
- = dapat berbahaya ketika di-overload untuk operator relational sebagai equality, sehingga
bahasa berbasis C menggunakan == sebagai operator relational
- Compound assignment operator merupakan metode cepat menjelaskan bentuk umum yang
diperlukan assignment, missal:
sum = sum + value;
ekuivalen dengan
sum += value;
- Unary assignment operator di bahasa berbasis C menggabungkan operasi increment dan
decrement dengan assignment, contoh:
- Di bahasa berbasis C, Perl, dan JavaScript, pernyataan assignment menghasilkan suatu hasil dan
dapat digunakan sebagai operand, contoh:
ch = getchar()