Belajar Bahasa C sharp/Bab III: Perbedaan antara revisi

Konten dihapus Konten ditambahkan
Willysaef (bicara | kontrib)
Willysaef (bicara | kontrib)
Baris 113:
Operator modulus juga bisa sangat berguna untuk menentukan apakah sebuah angka bisa habis dibagi oleh angka lainnya. Sebagai contoh, kita tahu bahwa tahun kabisat adalah tahun yang habis dibagi dengan empat, dan akan muncul setiap empat tahun sekali. Dengan demikian, jika ekspresi <code>Tahun % 4</code> memiliki nilai 0, maka tahun tersebut merupakan tahun kabisat. Betul tidak?
===Beberapa masalah dalam pembagian===
Di atas, saya mungkin menyebutkan "''kerumitan dalam pembagian''". Maksudnya apa sih? Selain dua masalah di atas, pembagian memiliki beberapa kerumitan lagi, di antaranya adalah sebagai berikut:
<source lang="csharp">
int A, B, C;
Baris 123:
</source>
 
Bentuk kode di atas menunjukkan sebuah proses pembagian dengan angka nol, yang tentu saja tidak diizinkan untuk digunakan oleh sebuah bilangan bulat. Mungkin, Anda mengira mengapa saya bilang "tidak diizinkan", padahal memang di dalam matematika setiap angka yang dibagi dengan angka 0 akan menghasilkan bilangan ''infinity'' atau tak keberhinggaan (∞). Untuk lebih memahaminya, coba perhatikan kode yang lebih sempurna di bawah ini:
<source lang="csharp">
//Program02.cs
Baris 146:
}
</source>
Program di atas akan dikompilasi dengan benar, tanpa ada kesalahan apapun. Dan ketika dijalankan pun, kita akan melihat nilai dari variabel A dan B karena memang kita telah menyuruh komputer untuk menampilkan nilai dari variabel A dan B. Lalu, program yang kita buat tersebut akan berhenti sejenak, lalu muncul sebuah kotak dialog dengan judul ''Just-In-Time Debugging''. Tekan saja tombol "No" karena kita tidak mau melakukan debugging (lebih tepatnya, belum bisa melakukannya). Kotak dialog pun hilang, tapi di layar ''console'', kita akan melihat pesan:
 
Unhandled Exception: System.DivideByZeroException: Attempted to divide by zero.
Baris 152:
Kita mungkin akan memperoleh informasi mengenai pada baris ke berapa kesalahan tersebut terjadi di dalam berkas kode sumber <code>Program02.cs</code> yang menyebabkan program kita tidak berjalan dengan sempurna. Akhirnya, program pun terhenti dan kita tidak tahu berapa nilai C, karena memang tidak diberi kesempatan untuk memanggil statemen <code>Console.WriteLine</code> yang ketiga yang digunakan untuk memperlihatkan nilai variabel C.
 
Ketika kita salah dalam mengetikkan kode (sebaiknya sih jangan), mungkin kita akan “akrab”"akrab" dengan pesan kesalahan yang ditampilkan oleh kompiler (''compiler error''), yang pada umumnya berisi kesalahan sintaksis di dalam kode yang harus kita perhatikan pada saat melakukan kompilasi (''syntax error''). Akan tetapi, dalam program <code>Program02.cs</code> di atas, meski tidak ada kesalahan saat melakukan kompilasi, program tidak mau berjalan dengan sempurna, saat dijalankan. Karenanya jenis kesalahan tersebut dikenal juga dengan sebutan ''runtime error'' (kesalahan saat dijalankan), karena memang kesalahan tersebut muncul saat program dijalankan, bukan ketika kompilasi, atau bahkan pengetikan.
 
Saat berhadapan dengan penyebut yang memiliki nilai 0, maka operasi pembagian dikatakan sedang mencoba untuk membuat pengecualian, atau ''exception'', yang merupakan istilah yang digunakan untuk merujuk kepada keluhan yang dimiliki komputer akibat munculnya sebuah masalah. Sebuah program juga sebenarnya dapat diberi informasi mengenai sebuah ''exception'' telah terjadi dan disuruh untuk menanganinya, yang nanti akan kita pelajari pada bab selanjutnya. Hingga saat kita belajar hal tersebut, kita mungkin menjadi akrab dengan pesan “unhandled"unhandled exception”exception", yang berarti sebuah exception yang tidak bisa ditangani oleh program, malahan ditangani oleh ''.NET Framework''. Pesan tersebut juga mengandung kata <code>System.DivideByZeroException</code>, yang merupakan sebuah kelas di dalam ''namespace'' <code>System</code> yang digunakan oleh operator pembagian untuk membuat ''exception''.
 
Dalam program PembagianDenganNol<code>Program02.cs</code>, coba ubah nilai C dengan bentuk seperti di bawah ini:
<source lang="csharp">
C = A / 0;
Baris 169:
 
Saat kita menaruh angka 0 di sebelah kanan tanda pembagian di dalam program kita, kompiler cukup cerdas untuk menolak kode kita dengan mengeluarkan pesan semacam itu.
==Ekspresi, Operator, ''Operand'' dan Prioritasnya==
Oke, sejauh ini, kita hanya menggunakan statemen-statemen yang di dalamnya hanya terdapat satu buah ''operator'' aritmetika saja. Sebenarnya, kita juga bisa membuat statemen yang di dalamnya terdapat banyak ''operator'' aritmetika yang berbeda-beda. Adalah sangat berguna untuk membuatnya ke dalam sebuah baris dibandingkan dengan membuatnya ke dalam beberapa baris yang justru nanti membuat program kita menjadi lebih panjang. Hanya saja, memang kita harus memiliki pengetahuan terlebih dahulu bagaimana caranya membangun ekspresi yang terdiri atas lebih dari satu operator tersebut. Di dalam '''The C# Language Specification bagian 7.2''', Microsoft mengatakan kaidah "'''An expression is constructed from operands and operators'''" (sebuah ekspresi dibangun dari beberapa ''operand'' dan beberapa operator).
 
Berikut adalah contoh ekspresi sederhana yang memiliki dua buah ''operand'', dan sebuah ''operator binary'':
<source lang="csharp">
operand1 + operand2
</source>
Satu atau kedua ''operand'' tersebut dapat menjadi ekspresi aritmetika yang melibatkan ''operand'' lainnya. Hasil dari ekspresi di atas adalah hasil penjumlahan dari dua buah ''operand'' tersebut di atas.
 
Berikut ini adalah ekspresi lainnya yang mengandung dua buah ''operand'' dan satu buah operator:
<source lang="csharp">operand1 = operand2</source>
Operator sama dengan (<code>=</code>) akan menyebabkan ''operand'' yang berada di sebelah kiri (yang harus berupa ''variabel'') akan diatur nilainya agar sama dengan ''operand'' yang berada di sebelah kanan. Selain untuk mengubah <code>operand1</code>, ekspresi penugasan juga akan memiliki sebuah nilai tertentu. Nilai dari ekspresi penugasan adalah hasil akhir dari ''operand'' di sebelah kiri dari tanda sama dengan, dalam kasus ini adalah <code>operand1</code>.
 
Berikut ini adalah beberapa contoh statemen penugasan, dan yang terakhir ternyata menggunakan empat buah operator aritmetika yang berbeda-beda:
<source lang="csharp">
A = 2;
B = 3;
C = 4;
D = 5;
E = 6;
F = A + B * C / D - E;
</source>
Pada statemen terakhir yang berisi penugasan terhadap variabel <code>F</code>, operasi manakah yang akan pertama kali berjalan? Mungkin, kita akan beranggapan bahwa semuanya akan dijalankan secara berurutan, sesuai dengan urutannya, karena memang komputer hanya bisa melakukan eksekusi secara berurutan. Akan tetapi, sebenarnya kompiler C# tidaklah begitu! Bahasa C# memiliki tabel kaidah prioritas operator, yang dalam C# Language Specification disebut sebagai "'''''Operator Precedence and Associativity'''''," sehingga komputer pun akan diberi tahu oleh kompiler C# urutan evaluasi eksekusi dari operator-operator di dalam sebuah ekspresi dengan banyak operator.
 
Tabel di bawah ini (terkesan mengerikan lho) disusun dengan skala prioritas yang disusun berdasarkan kategorinya, di mana kategori operator yang diletakkan paling atas memiliki prioritas yang paling tinggi, sementara kategori operator yang diletakkan paling bawah memiliki prioritas paling rendah. Akan tetapi, operand-operand yang berada di dalam kategori prioritas yang sama memiliki prioritas yang sama. Untuk operand-operand yang memiliki prioritas yang sama, C# akan melakukan evaluasi terhadap ekspresi tersebut secara berurutan, yakni dari kiri ke kanan.
<center>
<table border=1 cellspacing=0 cellpadding=0 style='border-collapse:collapse;
border:none'>
<thead>
<tr style='page-break-inside:avoid'>
<td width=66 valign=top style='width:49.85pt;border-top:2.25pt;border-left:
2.25pt;border-bottom:1.0pt;border-right:1.0pt;border-color:windowtext;
border-style:solid;background:#B3B3B3;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Prioritas</span></p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:solid windowtext 2.25pt;
border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
background:#B3B3B3;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Kategori</span></p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:solid windowtext 2.25pt;
border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 2.25pt;
background:#B3B3B3;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Jenis-jenis operator</span></p>
</td>
</tr>
</thead>
<tr style='page-break-inside:avoid'>
<td width=66 valign=top style='width:49.85pt;border-top:none;border-left:
solid windowtext 2.25pt;border-bottom:solid windowtext 1.0pt;border-right:
solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>tertinggi</span></p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Operator utama (</span><span
class=IsiteksasingInggrisChar>primary operator</span><span lang=IN>)</span></p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 2.25pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=CodeOutsideBox>(x)<br>
x.y<br>
f(x)<br>
a[x]<br>
x++<br>
x--<br>
new<br>
typeof<br>
sizeof<br>
checked<br>
unchecked</p>
</td>
</tr>
<tr style='page-break-inside:avoid'>
<td width=66 valign=top style='width:49.85pt;border-top:none;border-left:
solid windowtext 2.25pt;border-bottom:solid windowtext 1.0pt;border-right:
solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>&nbsp;</span></p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Operator </span><span
class=IsiteksasingInggrisChar>unary</span><span lang=IN> (</span><span
class=IsiteksasingInggrisChar>unary operator</span><span lang=IN>), yang
hanya memiliki satu buah </span><span class=IsiteksasingInggrisChar>operand</span></p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 2.25pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=CodeOutsideBox>+<br>
-<br>
!<br>
~<br>
++x<br>
--x<br>
(type)x</p>
</td>
</tr>
<tr style='page-break-inside:avoid'>
<td width=66 valign=top style='width:49.85pt;border-top:none;border-left:
solid windowtext 2.25pt;border-bottom:solid windowtext 1.0pt;border-right:
solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>&nbsp;</span></p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Operator pengalian (</span><span
class=IsiteksasingInggrisChar>multiplicative operator</span><span lang=IN>),
yang merupakan operator </span><span class=IsiteksasingInggrisChar>binary</span><span
lang=IN>, karena memiliki dua </span><span class=IsiteksasingInggrisChar>operand</span><span
lang=IN>.</span></p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 2.25pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=CodeOutsideBox>*<br>
/<br>
%</p>
</td>
</tr>
<tr style='page-break-inside:avoid'>
<td width=66 valign=top style='width:49.85pt;border-top:none;border-left:
solid windowtext 2.25pt;border-bottom:solid windowtext 1.0pt;border-right:
solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>&nbsp;</span></p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Operator penambahan (</span><span
class=IsiteksasingInggrisChar>additive operator</span><span lang=IN>), yang
merupakan operator </span><span class=IsiteksasingInggrisChar>binary</span><span
lang=IN>.</span></p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 2.25pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=CodeOutsideBox>+<br>
-</p>
</td>
</tr>
<tr style='page-break-inside:avoid'>
<td width=66 valign=top style='width:49.85pt;border-top:none;border-left:
solid windowtext 2.25pt;border-bottom:solid windowtext 1.0pt;border-right:
solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>&nbsp;</span></p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Operator pergeseran (</span><span
class=IsiteksasingInggrisChar>Shift operator</span><span lang=IN>)</span></p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 2.25pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=CodeOutsideBox>&lt;&lt;<br>
&gt;&gt;</p>
</td>
</tr>
<tr style='page-break-inside:avoid'>
<td width=66 valign=top style='width:49.85pt;border-top:none;border-left:
solid windowtext 2.25pt;border-bottom:solid windowtext 1.0pt;border-right:
solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>&nbsp;</span></p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Operator relasional (</span><span
class=IsiteksasingInggrisChar>Relational operator</span><span lang=IN>)</span></p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 2.25pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=CodeOutsideBox>&lt;<br>
&gt;<br>
&lt;=<br>
&gt;=<br>
is</p>
</td>
</tr>
<tr style='page-break-inside:avoid'>
<td width=66 valign=top style='width:49.85pt;border-top:none;border-left:
solid windowtext 2.25pt;border-bottom:solid windowtext 1.0pt;border-right:
solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>&nbsp;</span></p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Operator persamaan dan pertidaksamaan (</span><span
class=IsiteksasingInggrisChar>equality/inequality operator</span><span
lang=IN>)</span></p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 2.25pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=CodeOutsideBox>==<br>
!=</p>
</td>
</tr>
<tr style='page-break-inside:avoid'>
<td width=66 valign=top style='width:49.85pt;border-top:none;border-left:
solid windowtext 2.25pt;border-bottom:solid windowtext 1.0pt;border-right:
solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>&nbsp;</span></p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Operator logika AND (</span><span
class=IsiteksasingInggrisChar>Logical AND operator</span><span lang=IN>)</span></p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 2.25pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=CodeOutsideBox>&amp;</p>
</td>
</tr>
<tr style='page-break-inside:avoid'>
<td width=66 valign=top style='width:49.85pt;border-top:none;border-left:
solid windowtext 2.25pt;border-bottom:solid windowtext 1.0pt;border-right:
solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>&nbsp;</span></p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Operator logika XOR (</span><span
class=IsiteksasingInggrisChar>Logical XOR operator</span><span lang=IN>)</span></p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 2.25pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=CodeOutsideBox>^</p>
</td>
</tr>
<tr style='page-break-inside:avoid'>
<td width=66 valign=top style='width:49.85pt;border-top:none;border-left:
solid windowtext 2.25pt;border-bottom:solid windowtext 1.0pt;border-right:
solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>&nbsp;</span></p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Operator logika OR (</span><span
class=IsiteksasingInggrisChar>Logical OR operator</span><span lang=IN>)</span></p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 2.25pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=CodeOutsideBox>|</p>
</td>
</tr>
<tr style='page-break-inside:avoid'>
<td width=66 valign=top style='width:49.85pt;border-top:none;border-left:
solid windowtext 2.25pt;border-bottom:solid windowtext 1.0pt;border-right:
solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>&nbsp;</span></p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Operator kondisional AND (</span><span
class=IsiteksasingInggrisChar>Conditional AND operator</span><span lang=IN>)</span></p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 2.25pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=CodeOutsideBox>&amp;&amp;</p>
</td>
</tr>
<tr style='page-break-inside:avoid'>
<td width=66 valign=top style='width:49.85pt;border-top:none;border-left:
solid windowtext 2.25pt;border-bottom:solid windowtext 1.0pt;border-right:
solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>&nbsp;</span></p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>Operator kondisional OR (</span><span
class=IsiteksasingInggrisChar>Conditional OR</span><span lang=IN>)</span></p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 2.25pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=CodeOutsideBox>||</p>
</td>
</tr>
<tr style='page-break-inside:avoid'>
<td width=66 valign=top style='width:49.85pt;border-top:none;border-left:
solid windowtext 2.25pt;border-bottom:solid windowtext 1.0pt;border-right:
solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
<p class=IsiTeks><span lang=IN>&nbsp;</span></p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0in 5.4pt 0in 5.4pt'>
<p>Operator kondisional (''Conditional operator'')</p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 2.25pt;
padding:0in 5.4pt 0in 5.4pt'>
<p>?:</p>
</td>
</tr>
<tr>
<td width=66 valign=top style='width:49.85pt;border-top:none;border-left:
solid windowtext 2.25pt;border-bottom:solid windowtext 2.25pt;border-right:
solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
<p>terendah</p>
</td>
<td width=253 valign=top style='width:189.55pt;border-top:none;border-left:
none;border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 1.0pt;
padding:0in 5.4pt 0in 5.4pt'>
<p>Operator penugasan (''Assignment operator'')</p>
</td>
<td width=132 valign=top style='width:99.0pt;border-top:none;border-left:
none;border-bottom:solid windowtext 2.25pt;border-right:solid windowtext 2.25pt;
padding:0in 5.4pt 0in 5.4pt'>
<p class=CodeOutsideBox>=<br>
*=<br>
/=<br>
%=<br>
+=<br>
-=<br>
&lt;&lt;=<br>
&gt;&gt;=<br>
&amp;=<br>
^=<br>
|=</p>
</td>
</tr>
</table>
</center>
Oke, kita kembali lagi ke ekspresi berikut:
<source lang="csharp">F = A + B * C / D – E;</source>Dilihat dari tabel di atas, terlihat bahwa operator perkalian dan pembagian, termasuk ke dalam kategori multiplicative operator (operator pengalian), dan kategori tersebut lebih tinggi prioritasnya dibandingkan dengan ''additive operator'' (operator penambahan). Karena itulah, perkalian dan pembagian akan dilakukan pada urutan pertama kali, dari kiri ke kanan. Operasi yang akan dievaluasi pertama kali dalam ekspresi di atas adalah perkalian, sehingga ekspresi di atas akan menjadi seperti di bawah ini:
<source lang="csharp">F = A + 12 / D - E</source>
Selanjutnya, yang akan dijalankan adalah pembagian:
<source lang="csharp">F = A + 2 - E</source>
Penjumlahan dan pengurangan termasuk ke dalam kategori yang sama, sehingga kedua operasi tersebut akan dilakukan dari kiri ke kanan, sehingga menjadi seperti di bawah ini:
<source lang="csharp">F = 4 - E</source>
Dan kemudian C# akan menjalankan pengurangan, sehingga menjadi:
<source lang="csharp">F = -2</source>
 
Ternyata, nilai akhir dari variabel F adalah -2.
 
Akan tetapi, jika kita menghendaki hasil yang berbeda dengan yang di atas, maka gunakanlah tanda kurung buka dan kurung tutup, yang merupakan operator utama tertinggi:
<source lang="csharp">F = (A + B) * C / (D - E);</source>
Jika perlu, gunakan tanda kurung bertumpuk:
<source lang="csharp">F = (A + B) * (C / (D - E));</source>
Perhatikan tabel di atas! Pada kategori ''operator unary'', operator plus (+) dan minus (-) berbeda dengan operator plus (+) dan minus (-) dalam kategori ''operator penambahan''. Prioritas kategori operator unary pun lebih tinggi dibandingkan dengan operator penambahan, bahkan jika dibandingkan dengan operator pengalian sekalipun.
 
Akan tetapi, tanda sama dengan, yang kita kenal sebelumnya sebagai operator penugasan, terletak pada kategori paling bawah di dalam tabel. Operator penugasan merupakan satu-satunya operator yang memiliki hubungan dari kanan ke kiri, yang berarti beberapa operator penugasan di dalam sebuah baris ekspresi akan diproses dari paling kanan. Perhatikan contoh di bawah ini (contoh ini benar lho!):
<source lang="csharp">A = B = C = 27;</source>
 
Karena operasi penugasan memiliki asosiasi dari kanan ke kiri, maka variabel C merupakan variabel yang pertama kali diberi nilai <code>27</code>, lalu variabel B diberi nilai variabel B, dan variabel A sebagai variabel terakhir yang diberi nilai variabel B.
 
Perhatikan juga contoh di bawah ini:
<source lang="csharp">C = (A = 5) + (B = 6);</source>
Tanda kurung pertama akan memaksa nilai A agar memiliki nilai 5, dan juga nilai ekspresi penugasannya pun juga <code>5</code>. Tanda kurung kedua akan memaksa agar nilai B memiliki nilai 6, dan ekspresi penugasannya pun juga <code>6</code>. Variabel C merupakan jumlah antara kedua ekspresi tersebut, sehingga hasilnya adalah 11. Statemen di atas merupakan contoh statemen C# yang valid, karena memang di sana terdapat tanda kurung, sementara jika tidak ada tanda kurung, maka statemen seperti di bawah ini tidaklah valid:
<source lang="csharp">C = A = 5 + B = 6;</source>
Mengapa bisa begitu? Masalahnya adalah bahwa operator penambahan memiliki prioritas yang lebih tinggi dibandingkan dengan operator penugasan, akan tetapi setelah proses penambahan telah dieksekusi, maka bagian sebelah kiri dari tanda sama dengan ketiga bukanlah sebuah variabel lagi.
Contoh statemen ilegal lainnya adalah seperti di bawah ini:
<source lang="csharp">A + 12;</source>
Karena memang ekspresi tersebut tidak melakukan apapun atau tidak menyimpan nilai operasi tersebut ke dalam variabel lainnya. Memang, di dalam bahasa C dan C++ statemen seperti di atas adalah legal, tapi karena banyak programmer yang melakukan kesalahan dalam melakukan pemrograman dengan kedua bahasa tersebut, C# sebagai bahasa modern membuang cara penulisan seperti itu.
===Increment Operator dan Decrement Operator===
Para ''programmer'' yang menemukan bahasa C pada tahun 1969 mungkin tampaknya tidak menyukai proses pengetikan yang banyak. Atau mungkin mereka sadar akan harga memori dan media penyimpanan waktu itu sangatlah mahal. Apapun alasannya, para desainer bahasa C telah menemukan beberapa “jalan pintas” yang kemudian menjadi fitur unggulan bahasa C, bahkan bisa dianggap sebagai fitur paling populer. Bahasa C# tentu saja mengikuti popularitas tersebut untuk mendapatkan popularitas yang lebih dari para programmer dalam bahasa C. Kita tidak harus menggunakan jalan pintas tersebut, tapi memang hal tersebut seringnya dapat mengurangi pengetikan yang kita lakukan, dan juga untuk membuat program kita terlihat lebih pendek, lebih jelas, atau lebih mudah untuk dipahami.
 
Fitur yang dimaksud adalah untuk menambahkan sebuah nilai ke dalam sebuah variabel yang telah ada. Sebagai contoh:
<source lang="csharp">BukuYangHilang = BukuYangHilang + BukuYangHilangHariIni;</source>
Kita tidak perlu mengetik variabel yang sama dua kali, jika memang kita hanya menambahkan sesuatu kepada variabel tersebut. Bahasa C# mengizinkan kita untuk menyingkat penulisan statemen di atas menjadi seperti di bawah ini:
<source lang="csharp">BukuYangHilang += BukuYangHilangHariIni;</source>
Perhatikan tanda plus di samping tanda sama dengan. Jika kita menyebutnya “plus sama dengan” atau "plus equal", maka para programmer bahasa pemrograman keluarga C (C, C++, Java, atau C#) akan mengetahui apa yang kita maksudkan. Tanda plus sama dengan secara formal di dalam C# Language Specification disebut sebagai "compound assignment operator." Selain penjumlahan, kita juga bisa menggunakan perkalian, pengurangan, pembagian, atau pembagian sisa. Kita bisa menulis:
<source lang="csharp">BukuYangHilang -= BukuYangDitemukanHariIni;</source>
Berarti nilai yang berada di sebelah kanan akan dikurangkan dari variabel yang berada di sebelah kiri.
 
Kita juga bisa menggunakan operator perkalian dengan menggunakan metode yang sama:
<source lang="csharp">Budget /= 2;</source>
 
Berarti variabel Budget akan bernilai setengah nilai variabel Budget sebelumnya, sementara:
<source lang="csharp">Gaji *= 2;</source>
 
Berarti nilai variabel Gaji akan bernilai 2 kali lebih besar dibandingkan dengan nilai variabel Gaji sebelumnya.
 
Operator pembagian sisa juga valid di dalam statemen penugasan gabungan:
<source lang="csharp">JumlahSisaKue %= OrangKelaparan;</source>
 
Sebagai contoh, jika JumlahSisaKue adalah 11 dan OrangKelaparan sama dengan 3, dan masing-masing dari mereka memiliki jumlah kue yang sama, maka nilai JumlahSisaKue akan memiliki nilai 2.
 
Kita juga bisa menggunakan beberapa penugasan gabungan di dalam ekspresi yang besar, seperti di bawah ini
<source lang="csharp">C = (A += 4) / (B *= 7);</source>
Kalau kita perhatikan contoh-contoh di atas, mungkin kita akan beranggapan bahwa hanya variabel sajalah yang bisa digunakan di dalam beberapa penugasan gabungan. Tapi, sebenarnya, kita bisa lho menggunakannya langsung dengan angka 1, sehingga nilai sebuah variabel bertambah 1 atau berkurang 1. Sebagai contoh, saat melakukan pemilihan umum, perangkat lunak yang digunakan sebagai penghitung suaranya akan merespons dengan instruksi seperti ini:
<source lang="csharp">PemilihSBYJK=PemilihSBYJK+1;</source>
Apa yang terjadi saat ekspresi di atas dieksekusi? Variabel PemilihSBYJK akan bertambah 1, bukan? Seperti halnya kita ketahui kita dapat meringkas bentuk ekspresi di atas menjadi bentuk seperti:
<source lang="csharp">PemilihSBYJK+=1;</source>
Atau kita juga bisa menggunakan satu buah plus tambahan, sehingga menjadi seperti di bawah ini:
<source lang="csharp">PemilihSBYJK++;</source>
Nah, operator ++ disebut sebagai operator penaikan (increment operator). Operator tersebut merupakan operator unary yang memiliki prioritas yang sangatlah tinggi. Tanda plus-plus tersebut juga bisa diletakkan sebelum sebuah variabel, atau bahkan setelah variabel.
<source lang="csharp">++PemilihSBYJK;</source>
Kita juga menggunakan operator -- sebagai operator penurunan (decrement operator) yang dapat digunakan untuk mengurangi nilai dari sebuah variabel:
<source lang="csharp">PemilihSBYJK--;</source>atau operator itu bisa kita letakkan sebelum variabel:
<source lang="csharp">--PemilihSBYJK;</source>
Dalam beberapa statemen yang ditulis di atas sejauh ini, kita lihat tidak ada
perbedaan antara operator penaikan dan operator penurunan yang diletakkan sebelum variabel atau sesudahnya. Akan tetapi, sebenarnya di sana ada sebuah perbedaan yang signifikan, apalagi kalau kita menggunakannya di dalam ekspresi yang lebih besar. Sebagai contoh, anggap saya memiliki sebuah variabel A yang memiliki nilai A, dan kita menulis program dengan di dalamnya terdapat statemen berikut:
<source lang="csharp">B = A++;</source>
Apa yang akan terjadi? Statemen di atas akan menjadikan nilai B sama dengan nilai A, yakni 0, lalu menaikkan nilainya. Setelah statemen di atas dieksekusi, maka nilai B adalah 0, sementara nilai A adalah 1. Akan tetapi bandingkan dengan bentuk seperti ini:
<source lang="csharp">B = ++A;</source>
Apa yang akan terjadi? Statemen di atas akan menaikkan nilai variabel A lalu memberikan nilainya kepada variabel B. Setelah statemen tersebut dieksekusi, kedua variabel A dan B bernilai sama, yakni 1. Perhatikan perbedaannya: saat kita menggunakan A++ berarti, nilai A akan dinaikkan setelah nilainya digunakan di dalam ekspresi, sementara ++A berarti nilai A dinaikkan sebelum nilainya digunakan di dalam ekspresi.
 
 
{{stub}}