Apa asosiativitas (untuk operator) dan mengapa itu penting?
Diperbarui: asosiasi operator
associativity
nonopolaritas
sumber
sumber
Jawaban:
Bagi operator, asosiativitas berarti ketika operator yang sama muncul berturut-turut, maka kemunculan operator mana yang kita terapkan terlebih dahulu. Berikut ini, biarlah
Q
menjadi operatorJika
Q
dibiarkan asosiatif, maka dievaluasi sebagaiDan jika asosiatif benar, maka ia dievaluasi sebagai
Ini penting, karena mengubah arti ekspresi. Pertimbangkan operator pembagian dengan aritmatika bilangan bulat, yang merupakan asosiatif kiri
Jika asosiatifnya benar, itu akan mengevaluasi ke ekspresi yang tidak terdefinisi, karena Anda akan membaginya dengan nol
sumber
expr -> expr + term;
adalah asosiatif kiri danexpr -> term + expr
asosiatif kanan.a * b / c
mengevaluasi apakah*
akan menjadi asosiasi kiri tetapi/
akan menjadi asosiatif kanan? Lalu ada kontradiksi. Jadi menurut saya orang perlu mengatakan "ketika operator dengan prioritas dan asosiatif yang sama" jika Anda ingin mencakup beberapa operator.Ada tiga jenis asosiatif:
Properti asosiatif dalam matematika
Urutan Operasi dalam bahasa pemrograman
Asosiatif dalam cache CPU.
Properti Asosiatif dalam matematika adalah properti operator seperti penjumlahan (+). Properti ini memungkinkan Anda untuk mengatur ulang tanda kurung tanpa mengubah nilai pernyataan, yaitu:
Dalam bahasa pemrograman, asosiativitas (atau ketetapan) dari suatu operator adalah properti yang menentukan bagaimana operator dengan prioritas yang sama dikelompokkan tanpa adanya tanda kurung; yaitu dalam urutan apa setiap operator dievaluasi. Ini dapat berbeda di antara bahasa pemrograman.
Dalam cache CPU, asosiatif adalah metode untuk mengoptimalkan kinerja.
sumber
Sederhana!!
Kami tahu *, /, dan% memiliki prioritas yang sama, tetapi sesuai dengan keterkaitan, jawaban dapat berubah:
Misalnya: Kami memiliki ekspresi: 4 * 8/2% 5
sumber
2 % 5
mengevaluasi ke2
, bukan0
.ini adalah urutan evaluasi untuk operator dengan prioritas yang sama. Urutan KIRI KE KANAN atau KANAN KE KIRI penting. Untuk
jika KIRI ke KANAN, maka benar
dan 0. Jika KANAN ke KIRI, maka benar
dan hasilnya 2. Dalam kebanyakan bahasa, kita katakan bahwa operator minus memiliki asosiasi KIRI KE KANAN.
Perbarui 2020:
Keadaan tentang itu
3 - 2 - 1
mungkin tampak sepele, jika klaimnya, "tentu saja kami melakukannya dari kiri ke kanan". Namun dalam kasus lain, seperti jika dilakukan di Ruby atau di NodeJS:Ini
**
adalah operator "dengan kekuatan". Asosiatif dari kanan ke kiri. Dan itu benaryang
2 ** 9
, yaitu,512
, bukannyayang
8 ** 2
, yaitu,64
.sumber
Jika Anda mengacu pada "asosiasi operator" - begitulah cara bahasa menentukan bagaimana operator dengan prioritas yang sama dikelompokkan tanpa tanda kurung.
Misalnya, operator + dan - dalam bahasa berbasis C memiliki prioritas yang sama. Saat Anda menulis ekspresi yang menggunakan keduanya (tanpa tanda kurung), compiler harus menentukan urutan evaluasi mereka.
Jika Anda menulis 12 - 5 + 3, evaluasi yang memungkinkan meliputi:
Bergantung pada urutan ekspresi yang Anda evaluasi, Anda bisa mendapatkan hasil yang berbeda. Dalam bahasa berbasis C, + dan - telah meninggalkan asosiatif, yang berarti ekspresi di atas akan dievaluasi sebagai kasus pertama.
Semua bahasa memiliki aturan yang sangat jelas untuk prioritas dan asosiatif. Anda dapat mempelajari lebih lanjut tentang aturan untuk C # di sini. Konsep umum asosiatif dan prioritas operator tercakup dengan baik di wikipedia.
sumber
Saya berasumsi yang Anda maksud adalah asosiasi operator ...
Ini adalah urutan pengikatan operan ke operator. Pada dasarnya:
a - b + c
dapat dievaluasi sebagai (dengan asumsi - dan + memiliki prioritas yang sama):
((a - b) + c) atau,
(a - (b + c))
Jika operator dibiarkan asosiatif (mengikat langsung ke operan kiri), itu akan dievaluasi sebagai yang pertama. Jika mereka asosiatif yang benar, itu akan dievaluasi sebagai yang kedua.
sumber
Jika yang Anda maksud adalah asosiasi operator:
Ini mendefinisikan cara ekspresi diuraikan. Ini memberikan standar, jadi setiap ekspresi diuraikan dengan cara yang sama.
Ini sebagian besar penting untuk operasi yang memiliki presedensi yang sama, bila mungkin ada efek samping.
sumber
Sebagian besar contoh sebelumnya telah menggunakan konstanta. Jika argumen kebetulan adalah pemanggilan fungsi, urutan pemanggilan tersebut dapat ditentukan oleh aturan asosiasi, tentu saja tergantung pada kompiler Anda. Dan jika fungsi tersebut memiliki efek samping ..
sumber
Kita semua tahu bahwa diutamakan itu penting, tetapi begitu juga asosiatif dalam menafsirkan makna sebuah ekspresi. Untuk intro yang sangat sederhana, cobalah Power of Operator .
sumber
Asosiatif berada di bawah urutan komputasi dalam konsep bahasa pemrograman. Urutan komputasi menentukan arti ekspresi. Ini memiliki dua aturan utama,
aturan prioritas menentukan urutan di mana operator "berdekatan" dari berbagai jenis dievaluasi. Setiap bahasa pemrograman memiliki tabel prioritas operatornya sendiri terkait operatornya.
Kembali ke asosiatif,
Ini mendefinisikan urutan pelaksanaan operasi yang berdekatan dengan prioritas yang sama. Ini memiliki 3 rasa,
Jika sebuah operator adalah kiri-asosiatif ia mengevaluasi dari kiri ke kanan juga jika itu asosiatif kanan ia mengevaluasi dari kanan ke kiri.
sumber