Operator dan ekspresi C# (referensi C#)
C# menyediakan sejumlah operator. Banyak dari operator itu didukung oleh jenis bawaan dan memungkinkan Anda melakukan operasi dasar dengan nilai jenis tersebut. Operator tersebut mencakup grup berikut:
- Operator aritmatika yang melakukan operasi aritmatika dengan operand numerik
- Operator perbandingan yang membandingkan operand numerik
- Operator logis Boolean yang melakukan operasi logis dengan operand
bool
- Operator bitwise dan shift yang melakukan operasi bitwise atau shift dengan operand dari jenis integral
- Operator kesetaraan yang memeriksa apakah operand-nya setara atau tidak
Biasanya, Anda dapat menambahkan operator tersebut, yaitu, menentukan perilaku operator untuk operand dari jenis yang ditentukan-pengguna.
Ekspresi C# yang paling sederhana adalah literal (misalnya, bilangan bulat dan riil ) dan nama variabel. Anda dapat menggabungkannya ke dalam ekspresi kompleks dengan menggunakan operator. Operator Prioritas dan asosiasivitas menentukan urutan operasi dalam ekspresi dilaksanakan. Anda dapat menggunakan tanda kurung untuk mengubah urutan evaluasi yang diberlakukan oleh prioritas dan asosiasivitas operator.
Dalam kode berikut, contoh ekspresi berada di sisi kanan penugasan:
int a, b, c;
a = 7;
b = a;
c = b++;
b = a + b * c;
c = a >= 100 ? b : c / 10;
a = (int)Math.Sqrt(b * b + c * c);
string s = "String literal";
char l = s[s.Length - 1];
var numbers = new List<int>(new[] { 1, 2, 3 });
b = numbers.FindLast(n => n > 1);
Biasanya, ekspresi menghasilkan suatu hasil dan dapat disertakan dalam ekspresi lain. Panggilan metode void
adalah contoh ekspresi yang tidak memproduksi suatu hasil. Metode tersebut hanya dapat digunakan sebagai pernyataan, seperti yang ditunjukkan contoh berikut:
Console.WriteLine("Hello, world!");
Berikut adalah beberapa jenis ekspresi lain yang disediakan C#:
Ekspresi string terinterpolasi yang menyediakan sintaks yang mudah untuk membuat string yang terformat:
var r = 2.3; var message = $"The area of a circle with radius {r} is {Math.PI * r * r:F3}."; Console.WriteLine(message); // Output: // The area of a circle with radius 2.3 is 16.619.
Ekspresi Lambda yang memungkinkan Anda membuat fungsi anonim:
int[] numbers = { 2, 3, 4, 5 }; var maximumSquare = numbers.Max(x => x * x); Console.WriteLine(maximumSquare); // Output: // 25
Ekspresi kueri yang memungkinkan Anda menggunakan kapabilitas kueri secara langsung di C#:
var scores = new[] { 90, 97, 78, 68, 85 }; IEnumerable<int> highScoresQuery = from score in scores where score > 80 orderby score descending select score; Console.WriteLine(string.Join(" ", highScoresQuery)); // Output: // 97 90 85
Anda dapat menggunakan definisi isi ekspresi untuk memberikan definisi ringkas untuk metode, konstruktor, properti, pengindeks, atau finalizer.
Prioritas operator
Dalam ekspresi dengan beberapa operator, operator dengan prioritas lebih tinggi dievaluasi terlebih dahulu sebelum operator dengan prioritas yang lebih rendah. Dalam contoh berikut, perkalian dilakukan terlebih dahulu karena memiliki prioritas yang lebih tinggi daripada penjumlahan:
var a = 2 + 2 * 2;
Console.WriteLine(a); // output: 6
Gunakan tanda kurung untuk mengubah urutan evaluasi yang diberlakukan oleh prioritas operator:
var a = (2 + 2) * 2;
Console.WriteLine(a); // output: 8
Tabel berikut mencantumkan operator C# yang dimulai dengan prioritas tertinggi hingga terendah. Operator dalam setiap baris memiliki prioritas yang sama.
Operator | Kategori atau nama |
---|---|
x.y, f(x), a[i], x?.y , x?[y] , x++, x--, x!, baru, jenisdari, dicentang, tak-dicentang, default, namadari, delegasi, ukurandari, stackalloc, x->y |
Primer |
+x, -x, !x, ~x, ++x, --x, ^x, (T)x, menunggu, &x, *x, benar dan salah | Unary |
x..y | Rentang |
bertukar, dengan | ekspresi switch dan with |
x * y, x / y, x % y | Perkalian |
x + y, x – y | Penambahan |
x << y, x >> y | Shift |
x < y, x > y, x <= y, x >= y, adalah, sebagai | Pengujian relasional dan jenis |
x == y, x != y | Persamaan |
x & y |
Boolean logical AND atau bitwise logical AND |
x ^ y |
Boolean logical XOR atau bitwise logical XOR |
x | y |
Boolean logical OR atau bitwise logical OR |
x && y | AND Bersyarat |
x || y | Bersyarat OR |
x ?? y | operator penggabungan-null |
c ? t : f | Operator Kondisional |
x = y, x += y, x -= y, x *= y, x /= y, x %= y, x &= y, x |= y, x ^= y, x <<= y, x >>= y, x ??= y, => | Penugasan dan deklarasi lambda |
Asosiasivitas operator
Ketika operator memiliki prioritas yang sama, asosiasivitas operator menentukan urutan operasi yang dilakukan:
- Operator asosiatif kiri dievaluasi secara urut dari kiri ke kanan. Kecuali untuk operator penugasan dan operator penggabungan-nol, semua operator biner adalah asosiatif kiri. Misalnya,
a + b - c
dievaluasi sebagai(a + b) - c
. - Operatorasosiatif kanan dievaluasi dari kanan ke kiri. Operator penugasan, operator penggabungan-nol, lambda, dan operator bersyarat
?:
adalah asosiatif-kanan. Misalnya,x = y = z
dievaluasi sebagaix = (y = z)
.
Gunakan tanda kurung untuk mengubah urutan evaluasi yang diberlakukan oleh asosiasivitas operator:
int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}"); // output: a = 1, b = 6
Evaluasi operand
Tidak terkait dengan prioritas dan asosiasivitas operator, operans dalam ekspresi dievaluasi dari kiri ke kanan. Contoh berikut menunjukkan urutan operator dan operand dievaluasi:
Ekspresi | Urutan evaluasi |
---|---|
a + b |
a, b, + |
a + b * c |
a, b, c, *, + |
a / b + c * d |
a, b, /, c, d, *, + |
a / (b + c) * d |
a, b, c, +, /, d, * |
Biasanya, semua operand operator dievaluasi. Namun, beberapa operator mengevaluasi operand secara kondisional. Artinya, nilai operand paling kiri dari operator semacam ini menentukan apakah (atau yang mana) operand lain harus dievaluasi. Operator ini adalah operator logis kondisional AND (&&
) dan OR (||
),operator penggabungan-nol??
dan ??=
, operator kondisional-nol ?.
dan ?[]
, dan operator kondisional?:
. Untuk informasi selengkapnya, lihat deskripsi masing-masing operator.
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat bagian berikut dari spesifikasi bahasa C#: