5 Eylül 2017 Salı

İşlem Sırası - Order of Evaluation

İşlem Sırası - Order of Evaluation
Order of Evaluation bazı işlemlerin hangi sırada yapılacağının tanımlar. Programlama diline göre sıra değişebilir hatta bir dilde tanımlı olan işlem, başka bir dilde tanımsız olabilir. Özellikle Java ve C++ arasındaki farklar çarpıcı olabiliyor.

Java'da Order of Evaluation
İşlem Sırası - Order of Evaluation yazısına taşıdım.

C#'da Order of Evaluation
Aynı parametrenin birden fazla değer değiştirerek kullanılması
C# bu konuda Java'ya benziyor.
a = 5
b = a + (a = a + 5); //Sonuç 15'tir
İşlem şöyle kabul edilir.
a = 5;

int lhs = a; // 5
int rhs = (a = a + 5); // Increments a by 5 (i.e. a=10), and rhs=10
b = lhs + rhs; // 15
Precedence olsa bile önce First çalışır.
int lhs = First();
int rhs = Second() * Third();
int x = lhs + rhs;

C++'ta Order Of Evaluation
Statement Sırası
Statement Order yazısına taşıdım.

1. Metod Çağrısı
Order of Evaluation yazısına taşıdım.

C++'ta Sequence Point Nedir?
Sequence Point yazısına taşıdım.

Precedence Nedir?
Türkçesi işlem önceliği'dir ama aslında bence parantezsiz işlemlerin gizli bir şekilde parantezlenerek gruplanması olarak düşünülebilir.
"When two operators share an operand the operator with the higher precedence goes first."
Aşağıdaki örnekte precedence net bir şekilde görülebilir. Tüm aritmetik sonuçlar hazır olduğu için precendence işletilir.
milliVolts * 32767 * 32 / 1000 * 1024 / ticks * 2
Programlama dillerinden dikkat edilmesi gereken şey Order or Evaluation ve Precedence'ın aynı şey olmaması! Eric Lippert'ın şu açıklaması güzel
The evaluation of an arithmetical expression is controlled by three sets of rules: precedence rules, associativity rules, and order rules.
Precedence rules describe how an underparenthesized expression should be parenthesized when the expression mixes different kinds of operators.
Associativity rules describe how an underparenthesized expression should be parenthesized when the expression has a bunch of the same kind of operator.
Order of evaluation rules describe the order in which each operand in an expression is evaluated.
Java gibi dillerde Precedence ile Order of Evaluation arasında şu ilişki var. Order of Evaluation her zaman soldan sağa işletilir. Her aritmetik işlem bittikten sonra parantezlenerek tüm sonuç alınır.
Higher precedence results in grouping of operands with an operator and doesn't mean the evaluation of operands. It is the order of evaluation which decides sequence of evaluation of sub-expressions in an expression.

Associativity Nedir?
Türkçesi birleşme özelliği'dir.
"When two operators with the same precedence the expression is evaluated according to its associativity."

= operatorü sağdan sola birleşir. x = y = z = 17 sağdan başlarsak x = (y = (z = 17)) halini alır

/,*,+,- gibi matematiksel operatörler soldan sağa birleşir.
72 / 2 / 3 soldan sağa başlarsak (72 / 2) / 3 halini alır.






Hiç yorum yok:

Yorum Gönder