Expression vs. Statement

‘Expression’ ve ‘statement’ kelimeleri pek çok kez karşımıza çıkan İngilizce kavramlar. Bu kavramlar, en son Kotlin öğrenmeye çalışırken ‘if as an expression’ (expression olarak if) ifadesinde karşıma çıktığında birçok Türk programcının yaptığı gibi Google çeviriye başvurdum ancak teknik bir kavram olduğundan ötürü pek de ipucu elde edemedim. Bu yazıda iki kavramı inceleyeceğiz ve farklarına değineceğiz. Bir medium makalesinde1 karşılaştığım tanımlar şu şekilde:

Statement, programlama dili tarafından işlenmesi gereken, programlama dilinin en küçük birimi olarak tanımlanıyor.

Expression ise bir ya da daha fazla değişkenden, operatörden (örn. +) veya fonksiyondan meydana gelen ve programlama dili tarafından yorumlandığında bir değer döndüren ifadelerdir.

Basit bir örnekle başlayalım:

“int a;” bir ‘statement’ iken “1 + 1” ifadesi bir ‘expression’dır. Çünkü ilk ifade bir değer dönmezken ikincisi 2 değerini dönmektedir.

Bir diğer örnek olarak if-statement bildiğimiz if-else bloklarına karşılık gelir.

if(a == 4) {
//Do something
}

Öte yandan ‘if-expression’ şu ifadenin adıdır.

a = b == 5 ? b:c;

Yukarıda verilen kod parçasında (C ve javascript dillerinde karşılaşılabilir) a’ya eşitlenme dışındaki kısım bir ‘expression’dır. ‘if-statement’ örneği herhangi bir değer döndürmezken, ‘if-expression’ örneği b, 5’e eşitse b’yi; değilse c’yi döndürecektir. Dönen değer ise a’ya eşitlenecektir.

Peki değişkene değer atama (yani ‘a = 5’ ifadesi) bir ‘expression’ mıdır yoksa bir ‘statement’ mıdır? Java ve C dillerinden örnek olarak görelim. ‘b = a = 5’ yazarsanız önce ‘a’ya 5 değeri atanır, daha sonra ‘a=5’ expression olduğundan 5 değerini döndürür ve bu değer de ‘b’ye atanır. Ya da C dilinde ‘printf(“%d”, (a=5)))’ yazarsanız 5 değeri output olarak ekrana yazılacaktır.

Son olarak şunu söylemek gerekir ki ‘expression’lar, tanımdan da anlaşılabileceği gibi birer 'statement’tır ya da bir ‘statement’ın parçalarıdır. Bu da demektir ki her 'expression' bir 'statement'tır fakat her 'statement' bir 'expression' değildir.