• Expression adalah dasar dari komputasi dalam menentukan perhitungan dalam sebuah bahasa pemrograman salah satu bentuk nya adalah BNF. Ini sangat penting bagi programmer untuk memahami syntax dan semantics dari bahasa pemrograman yang digunakan.

    Untuk memahami evaluation expression penting untuk mengenal urutan dari operator dan operand evaluation. Urutan dari evaluation operator diketahui dari associativity dan hukum dari bahasa pemrograman. Meski terkadang nilai dari expression bergantung padanya, urutan operasi operand pada sebuah expression biasanya tidak dijelaskan oleh designer program. Ini memberikan si pembuat untuk memilih urutan, yang membawanya pada kemungkinan dari hasil program yang berbeda dari implementasi. Jadi semua bahasa imperative memiliki konsep variable yang nilai nya dapat berubah selama eksekusi berjalan.

    Inti dari bahasa pemrograman imperative adalah peran dominan dari pernyataan penugasan(assignment statement). Tujuan dari statement ini untuk menyebabkan efek samping pada perubahan nilai variable, atau state dari sebuah program.

    Fungsi bahasanya menggunakan variable yang sedikit berbeda, seperti parameter function. Bahasa ini  juga memiliki declaration statement yang mengikat nilai pada nama. Deklarasi ini mirip dengan assignment statement, tetapi tidak memiliki efek samping.

    1. Arithmetic Expression

    Arithmetic expression di dapat dari konvensi yang berevolusi dari matematika. Arithmetic expression terdiri dari operator(karakter khusus untuk memproses operand), operand(angka/karakter), parentheses(tanda kurung), dan function call. Operator itu sndiri bisa unary(punya single operand), binary(two operand), atau ternary(three operand). Dalam bahasa pemrograman binary operator itu adalah infix, yang berarti muncul diantara operand. Kecuali pada perl, memiliki beberapa operator yang prefix, yang artinya muncul sebelum operand.

    Tujuan dari arithmetic expression adalah menentukan arithmetic computation. Implementasi dari komputasi ini harus memiliki 2 aksi yaitu fetching operand atau mengambil operand, biasanya pada memory, dan melakukan eksekusi arithmetic operation pada operand.

     

     

    1. Operator Evaluation Order

    Operator evaluation order berfungsi sebagai menentukan urutan dari evaluasi proses operator.

     

    Ada 3 jenis yaitu :

     

    1. Precedence

    Precedence menggunakan nilai dari sebuah expression bergantung pada bagian yang di evaluasi dari operator pada sebuah expression. Sebagai contoh :

    A+B*C

    Jika nilai a, b, dan c adalah 3, 4 , 5 jika kita lakukan perhitungan dari kiri ke kanan maka akan menghasilkan nilai 35. Tetapi jika melakukan perhitungan dari kanan ke  kiri maka akan menghasilkan nilai 23. Dari pada bingung menggunakan proses dari kiri ke kanan atau kanan ke kiri maka dilihat lah operand nya yang mana yang harus lebih dulu.

    Operation precedence rules adalah untuk expression evaluation menentukan urutan operator mana yang harus diproses terlebih dulu. Dalam bahasa ini exponent adalah nilai tertinggi, lalu perkalian dan pembagian pada level kekuatan yang sama, lalu diikuti oleh pertambahan dan pengurangan pada level yang sama.

    Banyak bahasa menggunakn unary version dari pertambahan dan pengurangan. Pertambahan unary(unary addition) biasa di sebut identity operator, karena biasanya tidak memiliki asosiasi operasi dan tidak memberikan efek pada sebuah operand.

     

    1. Associativity

    Associativity adalah proses dimana jika level nya (operator) sama, maka akan dilakukan perhitungan biasa dari kiri ke kanan(kecuali ** dibaca dari kanan ke kiri). Misal :

    A-B + C-D

    Maka akan dilakukan dari A-B lalu dilanjutkan +C dan –D

    Sebuah operator dapat memiliki left associativity ataupun right associativity, bermaksud jika 2 operator berdekatan, maka left operator didahulukan baru kekanan secara berurutan. Associativity biasanya diproses dari kiri ke kanan kecuali exponent operator (ketika diberikan) terkadang dari kanan ke kiri.

    Jika pada kasus ruby seperti :

    A ** B ** C

    Akan diproses dari kanan ke kiri

     

    1. Parentheses

    Programmer dapat mengubah urutan dan aturan asosiasi dengan menempaatkan tanda kurung pada expression. Bagian yang di tanda kurungkan lebih diutamakan di banding yang tidak menggunakan tanda kurung.  Dilihat dari penggunaan tanda kurung missal :

    (A+B)*C

    Proses pertambahan akan dilakukan pertama, secara matematis ini normal. Proses ini dilakukan karena A+B menggunakan tanda kurung, sehingga lebih diprioritas kan di banding dengan perkalian. Maka proses akan dilakukan adalah A+B setelah itu hasil nya akan  *C. proses dapat berlangsung dari kiri ke kanan atau kanan ke kiri bergantung pada prioritas dari tanda kurung.

    Programmer akan melakukan identifikasi urutan evaluasi menggunakan parentheses. Pendekatan ini lebih simple karena si pembuat atau pembaca program membutuhkan untuk mengingat precedence dan aturan associativity, kekurangan dari schema ini adalah membuat penulisan program lebih melelahkan, dan pengkompromian dari kode data.

     

    1. Ruby expression

    Ruby adalah bahasa murni dari bahasa object oriented, yang berarti setiap nilai data, termasuk literal adalah objek. Ruby mendukung fungsi arithmetic dan logical dari sebuah operasi yang di include pada bahasa C. yang membedakan antara ruby dan C adalah pada area expression dimana semua arithmetic, relational dan assignment operator, dan juga indexing, array shift, dan bitwise logic operator.

    Hasil dari implementasi operator ini bisa melakukan system overridden pada program aplikasi ini. Jadi operator ini bisa di jelaskan kembali

     

    1. Conditional expression

    If-then-else statement dapat digunakan untuk membuat expresi yg diproses berdasarkan kondisi. Sebagai contoh :

    if (count == 0)

    average = 0;

    else

    average = sum / count;

    kondisi diatas akan menyesuaikan dengan expression yang ada. Jika count bernilai 0 maka nilai dari average akan bernilai 0, dan jika count tidak 0 maka nilai dari average adalah hasil pembagian antara sum dan count.

    Conditional expression dapat digunakan dimana saja dalam sebuah program, dimana expression yang lain dapat digunakan. Dalam bahasa C , Conditional expression juga terdapat pada perl, javascript, dan ruby.

     

    1. Operand Evaluation Order

    Operand evaluation order = desain karakteristik adalah urutan evaluasi dari operand. Variable di expression di evaluasi dengan mengambil nilai-nilai dari memori. Jika operand bersifat parenthesized maka semua operator harus dievaluasi sebelum nilai dapat digunakan sebagai operand, Jika tidak dilakukan maka operand dari operator akan memiliki side effect, maka urutan evaluasi dari operand akan tidak relevan.

     

    1. Side effect

    Sebuah fungsi yang biasa nya disebut sebagai functional side effect, terjadi ketika perubahan fungsi dari salah satu parameter atau variable global.

    Contoh :

    int a = 5;

    int fun1()

    {

    a = 17;

    return 3;

    }

    void main()

    {

    a = a + fun1();

    }

    Pada kode diatas yang awal nya nilai a adalah 5 dengan fungsi fun1 nilai global dari a berubah menjadi 17, dan nilai a pada main program akan menjadi penjumlahan dari a dari variable global dan fungsi fun1().

    Untuk menghentikan efek samping dari parameter 2 arah ini dibutuhkan sub program.

     

    1. Referensi transparan dan efek samping

    Referensi transparan terjadi jika ada 2 expression dalam sebuah program memiliki nilai yang sama dapat diganti antara satu dan yang lainnya dimana saja dalam sebuah program, tanpa mempengaruhi aksi dari sebuah program.

    Contoh :

    result1 = (fun(a) + b) / (fun(a) – c);

    temp = fun(a);

    result2 = (temp + b) / (temp – c);

    dapat di lihat dari program di atas bahwa fungsi fun tidak akan memiliki efek samping pada program, nilai dari result1 dan result2 akan bernilai sama, karena expression yang digunakan adalah ekuivalen.

    Keuntungan dari referensi transparan program adalah semantic pada program lebih mudah untuk dipelajari dan dipahami dibandingkan dengan semantic pada program yang tidak menggunakan referensi transparan. Dengan menggunakan referensi transparan akan membuat fungsi menjadi ekuivalen seperti fungsi matematika, dalam hal pemahaman.

     

    1. Overloaded Operator

    Penggunaan sebuah operator untuk lebih dari satu tujuan disebut operator overloading. Contoh berbahaya dari overloading operator adalah ampersand (&) misal :

    x= &y;

    dapat menyebabkan alamat dari y ditempatkan pada x. ada masalah dengan penggunaan multiple ampersand. Pertama penggunaan symbol yang sama untuk 2 operasi yang berbeda dapat menyebabkan kerugian pada proses pembacaan. Kedua keying error sederhana dapat meninggalkan operand pertama untuk bitwise dan operasi dapat bepergian tanpa diketahui oleh compiler, karena diinterpretasikan sebagai address operator.

     

    1. Type Conversion

    Tipe conversion bertipe narrowing atau widening. Conversion narrowing mengubah nilai ke tipe yang tidak dapat disimpan bahkan semua pendekatan dari tipe original. Sebagai contoh mengubah tipe data double menjadi float dalam java adalah narrowing conversion, karena range dari double lebih besar dari float. Widening conversion mengubah nilai ke tipe yang dapat dimasukkan ke pendekatan dari semua nilai tipe original. Sebagai contoh mengubah tipe data int menjadi float pada java disebut widening conversion. Widening conversion sering disebut sebagai metode aman, maksudnya adalah besarnya nilai yang dikonversi akan di pertahankan. Narrowing conversion tidak selalu aman terkadang besar nya nilai yang dikonversi dapat berubah ketika dalam proses. Tipe konversi dapat implicit atau explicit 2 sub seksi dari konversi adalah :

     

    1. Coercion in Expression

    Salah satu bentuk decision desain tentang arithmetic expression apakah operator boleh memiliki operand dari tipe yang berbeda. Bahasa yang memperbolehkan expression seperti itu , biasa disebut mixed-mode expression, harus menentukan konvensi untuk konversi tipe operand implicit karena computer tidak memiliki binary operations yang mengambil operand dari tipe data yang berbeda. Coercion di definisikan sebagai tipe implicit konversi yang di inisialisasi oleh compiler.

    Ketika 2 operand dari sebuah operator tidak memiliki tipe yang sama dan legal dalam sebuah bahasa pemrogaman, compiler harus memilih diantara nya untuk dipaksa. Memiliki kelemahan dalam deteksi error dari sebuah program.

     

    1. Explicit type conversion

    Banyak bahasa memberikan fungsi untuk melakukan konversi explicit, narrowing dan widening. Dalam beberapa kasus pesan peringatan muncul ketika explicit narrowing conversion menghasilakn perubahan signifikan pada objek yang di konversikan.

     

    1. Error in expression

    Error dapat muncul ketika melakukan evaluasi dari expresi. Jika bahasa membutuhkan type checking, mau static atau dynamic, maka operand type error tidak akan muncul. Error akan muncul jika operand dipaksakan pada expression yang telah di jalankan.

    Error yang biasa muncul ketika hasil dari operasi tidak dapat di representasikan pada memory  yang harus di simpan. Ini biasa disebut overflow atau underflow, berdasarkan hasil nya terlalu besar atau terlalu kecil.

     

    1. Relational and Boolean Expression

    Relational expression adalah operator yang melakukan perbandingan nilai dengan 2 operand. Relational expression memiliki 2 operand dan 1 operator. Nilai dari relational expression adalah Boolean, kecuali ketika Boolean tidak dimasukkan kedalam fungsi bahasa. Relational. Relational expression biasanya overloaded untuk berbagai macam tipe. Operasi yang menentukan benar atau salah nya sebuah relational expression bergantung pada tipe operand.

    Boolean expression memiliki Boolean variable, Boolean constant, relational expression dan Boolean operator. Operator biasanya dimasukkan dengan fungsi pemanggil AND, OR, dan NOT operation, dan terkadang untuk exclusive OR dan equivalence. Boolean operator biasanya hanya memanggil Boolean operand dan menghasilkan Boolean values. Dalam matematika Boolean algebra, atau biasa lebih dikenal dengan OR dan AND harus didahulukan.

     

    1. Short-Circuited Evaluation

    Short-circuited evaluation adalah expression dimana hasil dari salah satu nya ditentukan tidak melalui hasil evaluasi dari semua operand dan operator. Sebagai contoh :

    (13 * a) * (b / 13 – 1)

    Nilai dari (b / 13 – 1) bersifat independen. Jika nilai dari a adalah 0, maka tidak perlu melakukan operasi perhitungan dari (b / 13 – 1). Tapi  dalam operasi arithmetic shortcut ini terkadang tidak mudah di deteksi ketika melakukan eksekusi.

     

     

    1. Assignment Statement

    Assignment statement adalah bagian tengah dari susunan bahasa imperative. Dia memberikan mekanisme yang user dapat secara dinamis dapat mengubah binding dari nilai variable. Assignment ada beberapa tipe yaitu :

     

    1. Simple assignment

    Hampir semua bahasa pemrograman menggunakan tanda equal untuk assignment operator. Semua ini harus menggunakan sesuatu yang berbeda dari tanda equal untuk equality relational operator untuk menghindari ketidakjelasan dengan assignment operator.

     

    1. Conditional Target

    Tipe assignment yang akan menyesuaikan dengan syarat yang dibutuhkan dari kode yang ada.

     

    1. Compound assignment operator

    Compound assignment operator adalah metode untuk menentukan apa saja yang di butuhkan dalam sebuah assignment. Bentuk dari assignment yang dapat disingkat dengan teknik ini memiliki tujuan variable dan muncul sebagai operand pertama dari expression pada sisi kanan.

     

    1. Unary assignment operator

    Menggabungkan increment dan decrement operasi pada assignment. Operator ++ sebagai increment dan operator – –  sebagai decrement, bisa digunakan sebagai expression atau bentuk berdiri sendiri single operator statement. Dapat muncul sebagai prefix operator maupun sebagai postfix operator.

     

    1. Assignment as an expression

    Dalam bahasa C, perl, dan javascript, assignment statement akan menghasilkan hasil yang sama dengan target yang di assign. Karena itu hal ini dapat digunakan sebagai expression dan sebagai operand pada expression lainnya. Sebagai contoh :

    while ((ch = getchar()) != EOF) { … }

    dapat dilihat pada kode diatas ch=getchar() dibawa, hasilnya akan digunakan sebagai nilai kondisi untuk while. Jika tidak menggunakan tanda kurung maka akan dilakukan proses perbandingan dengan !=EOF lebih dulu.

    Kelemahan dari memperbolehkan assignment sebagai operand pada sebuah expression adalah memberikan efek samping dari expression yang lain.

     

    1. Multiple assignment

    Beberapa bahasa pemrograman seperti perl, ruby, dan lua memberikan sebuah fungsi yaitu multiple target, multiple source assignment. Sebagai contoh :

    ($first, $second, $third) = (20, 40, 60);

    Semantic 20 ditempatkan pada first, semantic 40 pada second, semantic 60 pada third. Jika nilai dari 2 variabel ingin ditukar. Hal ini dapat dilakukan dengan cara

    ($first, $second) = ($second, $first);

    Ini ditukar dengan mengubah posisi tanpa menggunakan temporary variable.

     

    1. Assignment in functional programming language

    Semua identifier digunakan pada fungsi bahasa dan beberapa digunakan untuk fungsi bahasa yang lain sebagai nama dari suatu nilai.

     

    1. Mixed Mode Assigment

    Biasanya assignment statement merupakan mixed mode. Fortran , C, C++ menggunakan aturan coercion untuk mixed mode assignment untuk mixed mode expression jika mirip.

    Posted by lorenzodor @ 4:37 pm

  • Leave a Reply

    Your email address will not be published. Required fields are marked *

 
WP_Modern_Notepad

Recent Comments

 
WP_Modern_Notepad

Recent Comments

Rekomendasi situs toto 98 toto

buku mimpi 3d terlengkap Teruapdate Terlengkap Paling Rekomended