{"id":153,"date":"2019-09-30T22:15:36","date_gmt":"2019-09-30T19:15:36","guid":{"rendered":"http:\/\/www.potansif.com\/?p=153"},"modified":"2019-09-30T22:15:36","modified_gmt":"2019-09-30T19:15:36","slug":"if-nedir-nasil-kullanilir","status":"publish","type":"post","link":"http:\/\/www.potansif.com\/?p=153","title":{"rendered":"IF Nedir, Nas\u0131l Kullan\u0131l\u0131r"},"content":{"rendered":"<p>Merhaba,<\/p>\n<p>Bu yaz\u0131m\u0131zda IF kullan\u0131m\u0131 ile ilgili baz\u0131 tekniklerden bahsedece\u011fim. Bununla birlikte bu yaz\u0131n\u0131n i\u00e7eri\u011fi PERFORMANS ODAKLI OLMAYACAK. Performans ile ilgili ele\u015ftiriler hakl\u0131 da olabilir, haks\u0131z da olabilir o konuda yorum yapm\u0131yorum. Yaz\u0131n\u0131n amac\u0131, IF kullan\u0131m tekniklerinin \u00e7e\u015fitlili\u011fini g\u00f6stererek dil ile kurdu\u011fumuz etkile\u015fimin, kodlamada ve okunabilirlikte elde edece\u011fimiz faydalar\u0131ndan ve kod ile kurdu\u011fumuz ba\u011fdan yararlanmaya \u00e7al\u0131\u015fmak olacak. Yaz\u0131n\u0131n devam\u0131nda g\u00f6sterilecek olan tekniklerin dikkatli kullan\u0131lmamas\u0131 durumunda spagetti koda d\u00f6n\u00fc\u015febilece\u011fi tehlikesinden de bahsetmeden edemeyiz. T\u00fcm bunlardan \u00f6nce mebzuya dalmadan, bir karar verme yap\u0131s\u0131n\u0131n nas\u0131l bir iskeleti oldu\u011funa de\u011finmemiz gerekecek. Sonras\u0131nda da gerek PHP&#8217;de, gerekse Transact SQL&#8217;de s\u0131k\u00e7a kar\u015f\u0131la\u015fmaya ba\u015flad\u0131\u011f\u0131m\u0131z inline IF tekni\u011fini Delphi&#8217;de nas\u0131l kullanabiliriz ve bu tekni\u011fi bir ad\u0131m \u00f6teye nas\u0131l ta\u015f\u0131yabiliriz onun \u00f6rneklerine bakaca\u011f\u0131z.<br \/>\n<!--more--><br \/>\nKarar Verme Yap\u0131lar\u0131 dendi\u011finde, kabaca programc\u0131n\u0131n, program taraf\u0131ndan s\u0131ras\u0131 geldi\u011finde&nbsp;de\u011ferlendirilecek veya test edilecek olan herhangi bir durumun sorgulad\u0131\u011f\u0131, ortaya konulan ko\u015fulun \/ \u015fart\u0131n do\u011fru olup olmad\u0131\u011f\u0131n\u0131n tespit edilmesi (veya edilmemesi) durumunda devreye girmesi i\u00e7in tasarlanan mekanizmalar\u0131n kastedi\u011fildi\u011fini anlamam\u0131z gerekir. Bu mekanizmalar\u0131 kullanarak yazd\u0131\u011f\u0131m\u0131z programlara (tabiri caizse bir \u00e7e\u015fit) ak\u0131l katm\u0131\u015f oluruz. \u0130nsanlar\u0131 hayvanlardan ay\u0131ran en temel \u00f6zelliklerden birisinin de karar almak oldu\u011funu varsayarsak ilgin\u00e7tir ki insanlarla makinalar aras\u0131ndaki en temel ayr\u0131m\u0131n da bu oldu\u011funa dikkat \u00e7ekmekte fayda var.<\/p>\n<p>Pascal Programlama Dili, Karar Verme Yap\u0131s\u0131 olarak &#8220;IF&#8221; ve &#8220;CASE&#8221; anahtar kelimelerini kullan\u0131r. Fakat kendi yazaca\u011f\u0131n\u0131z fonksiyonlarla da bu yap\u0131lar\u0131 geni\u015fletebilir, \u00e7e\u015fitlendirebilirsiniz.&nbsp;Standart karar verme yap\u0131lar\u0131n\u0131n&nbsp;kendi i\u00e7inde \u00e7e\u015fitli kombinasyonlar\u0131 vard\u0131r. K\u0131saca bu yap\u0131lara bir g\u00f6z atal\u0131m;<\/p>\n<p>IF i\u00e7in en bilinen yap\u0131 &#8220;IF &#8211; THEN&#8221; yap\u0131s\u0131d\u0131r. \u00d6rnek olarak a\u015fa\u011f\u0131daki kodu inceleyebiliriz;<\/p>\n<pre><code>var\n&nbsp; a: Integer;\n&nbsp; S: String;\nbegin\n&nbsp; if (a &gt; 100) then ShowMessage('100''den b\u00fcy\u00fck');\n&nbsp; \/\/ veya\n&nbsp; if (S.Trim &lt;&gt; '') then ShowMessage('S, bo\u015f de\u011fil');\nend;<\/code><\/pre>\n<p>Alternatif olarak &#8220;IF &#8211; THEN &#8211; ELSE&#8221; yap\u0131s\u0131da kullan\u0131labilir. A\u015fa\u011f\u0131daki \u00f6rne\u011fe bir g\u00f6z atal\u0131m;<\/p>\n<p>[img]https:\/\/i.hizliresim.com\/MajQza.png[\/img]<\/p>\n<pre><code>var\n&nbsp; a: Integer;\nbegin\n&nbsp; if (a &gt; 100) THEN ShowMessage('100''den b\u00fcy\u00fck') ELSE ShowMessage('100 veya daha alt\u0131');\nend;<\/code><\/pre>\n<p>Ayr\u0131 bir alternatif olarak ard\u0131\u015f\u0131k IF ELSE IF&nbsp;yap\u0131lar\u0131 da kullan\u0131labilir. Devam\u0131ndaki \u00f6rne\u011fi inceleyelim;<\/p>\n<pre><code>var\n&nbsp; a: Integer;\nbegin\n&nbsp; if (a &lt;= 0) then ShowMessage('Negatif')\n&nbsp; ELSE&nbsp;\n&nbsp; if (a &gt; 50) then ShowMessage('100 veya daha alt\u0131') ;\nend;<\/code><\/pre>\n<p>Veya ayn\u0131 \u00f6rne\u011fi begin \/ end bloklar\u0131 i\u00e7ine de alabiliriz. Yukar\u0131daki \u00f6rne\u011fin daha okunakl\u0131 alternatif bir s\u00fcr\u00fcm\u00fcn\u00fc a\u015fa\u011f\u0131daki kodu inceleyerek g\u00f6rebiliriz; Bu \u00f6rne\u011fi, yukar\u0131dakinden ay\u0131ran temel nitelik ise ilgili ko\u015fula birden \u00e7ok direktifte bulunabilmemize olanak sa\u011flamas\u0131d\u0131r.<\/p>\n<pre><code>var\n&nbsp; a: Integer;\nbegin\n&nbsp; if (a &lt;= 0) then begin\n&nbsp; &nbsp; &nbsp; ShowMessage('Negatif');\n&nbsp; &nbsp; &nbsp; \/\/... ilgili di\u011fer kodlar\n&nbsp; end else&nbsp;\n&nbsp; if (a &gt; 50) then begin\n&nbsp; &nbsp; &nbsp; ShowMessage('100 veya daha alt\u0131') ;\n&nbsp; &nbsp; &nbsp; \/\/... ilgili di\u011fer kodlar\n&nbsp; end;\nend;<\/code><\/pre>\n<p>Bir ka\u00e7 ko\u015fulun tek bir ko\u015ful gibi de\u011ferlendirilmesi gereken durumlar da olabilir;<\/p>\n<pre><code>var\n&nbsp; a: Integer;\n&nbsp; s: String;\nbegin\n&nbsp; a:= 32;\n&nbsp; if (&nbsp; (a &gt; 1) AND (a &lt; 33)&nbsp; ) then ShowMessage('a istenen aral\u0131kta');\n&nbsp; s := 'JEST';\n&nbsp; if ( (a &lt; 155) or (s = 'test') ) then ShowMessage('a 155''ten k\u00fc\u00e7\u00fck veya s''in i\u00e7eri\u011fi \"test\"');\nend;<\/code><\/pre>\n<p>Bir de\u011ferin bir k\u00fcmede olup olmad\u0131\u011f\u0131na da bak\u0131labilir;<\/p>\n<pre><code>var\n&nbsp; a: Integer;\n&nbsp; c: Char;\nbegin\n&nbsp; c := 'a';\n&nbsp; if c in [#0..#255] then ShowMessage('VAR') else ShowMessage('YOK');\n\n&nbsp; a := 4;\n&nbsp; if a in [1,4,5,3] then ShowMessage('a = ' + A.ToString) else ShowMessage('a, beklenen de\u011ferlerden herhangi birisine sahip de\u011fil');\nend;<\/code><\/pre>\n<p>Baz\u0131 durumlarda ELSE&#8217;nin dikkatsiz kullan\u0131lmas\u0131 beklenmeyen sonu\u00e7lara neden olabilir. &#8220;IF THEN ELSE IF&#8221; yap\u0131s\u0131 ard\u0131\u015f\u0131k kullan\u0131ld\u0131\u011f\u0131nda, yani bir CASE gibi kullan\u0131lmaya \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda derleyici, &#8220;kar\u015f\u0131la\u015f\u0131lan&#8221; ilk \u015fart\u0131n do\u011fru olmas\u0131 durumunda devam\u0131nda gelen di\u011fer \u015fartlar\u0131n do\u011fru olup olmad\u0131\u011f\u0131na bakmaz ve do\u011frudan IF blo\u011funun sonuna dallan\u0131r. Bu davran\u0131\u015f\u0131 anlamak i\u00e7in derleyicinin bir IF ifadesiyle kar\u015f\u0131la\u015ft\u0131\u011f\u0131nda &#8220;tam olarak&#8221; neye bakt\u0131\u011f\u0131na bir g\u00f6z atmak gerekir. Derleyici, IF ifadesinde ge\u00e7en ko\u015fulun sonucunun &#8220;boolean&#8221; a\u00e7\u0131s\u0131ndan &#8220;TRUE&#8221; olup olmad\u0131\u011f\u0131na bakar. Yani siz ko\u015ful olarak her ne yazarsan\u0131z yaz\u0131n, asl\u0131nda derleyici o ko\u015fulun ikili say\u0131 sistemindeki kar\u015f\u0131l\u0131\u011f\u0131n\u0131n 1 olup olmad\u0131\u011f\u0131na bakar. Sonu\u00e7 1 ise ko\u015fulun do\u011fru (TRUE) oldu\u011funa karar verir ve hemen devam\u0131ndaki kodlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r. E\u011fer sonu\u00e7 0 ise bu ko\u015fulun YANLI\u015e (FALSE) oldu\u011funa karar verir ve varsa &#8220;ELSE&#8221; ile ifade edilen k\u0131sma dallan\u0131r. Bundan sonras\u0131nda, IF ifadesi bir silsile izliyorsa, yani &#8220;IF THEN ELSE IF&#8230;&#8221; gibi birbirine ba\u011fl\u0131 bir kullan\u0131m s\u00f6z konusu ise silsilenin devam\u0131na bakmaz ve do\u011frudan silsilenin en sonundaki END&#8217;e dallan\u0131r.&nbsp;<\/p>\n<p>\u00d6rneklendirmek gerekirse \u015f\u00f6yle bir senaryo kurabiliriz;<\/p>\n<pre><code>begin\n&nbsp; if FALSE then begin\n&nbsp; &nbsp; &nbsp; ShowMessage('1');\n&nbsp; end else\n&nbsp; if TRUE then begin\n&nbsp; &nbsp; &nbsp; ShowMessage('2');\n&nbsp; end else\n&nbsp; if TRUE then begin\n&nbsp; &nbsp; &nbsp; ShowMessage('3');\n&nbsp; end else\n&nbsp; begin\n&nbsp; &nbsp; &nbsp; ShowMessage('4');\n&nbsp; end;\n&nbsp; \/\/ Bu \u00f6rnekte sadece ShowMessage('2'); olan k\u0131s\u0131m \u00e7al\u0131\u015f\u0131r. Devam\u0131nda gelen ko\u015fullar do\u011fru bile olsa IF komutu ifadenin en sonuna dallan\u0131r.\nend;<\/code><\/pre>\n<p>Konuyu anlamak ad\u0131na \u00f6rnekleri biraz daha derinle\u015ftirmek gerekirse, derleyicinin bir IF komutuyla kar\u015f\u0131la\u015ft\u0131\u011f\u0131nda \u00f6z\u00fcnde neye bakt\u0131\u011f\u0131n\u0131 daha iyi anlam\u0131\u015f oluruz.<\/p>\n<pre><code>var\n&nbsp; a: Integer;\nbegin\n&nbsp; if TRUE then ShowMessage('1) DO\u011eRU');\n\n&nbsp; \/\/ veya\n\n&nbsp; if False\n&nbsp; &nbsp; &nbsp;then ShowMessage('2) TRUE')\n&nbsp; &nbsp; &nbsp;else ShowMessage('2) FALSE');\n\n&nbsp; \/\/ veya\n\n&nbsp; if TRUE&nbsp; then ShowMessage('3) TRUE')&nbsp; else ShowMessage('3) NOT TRUE');\n&nbsp; if FALSE then ShowMessage('3) FALSE') else ShowMessage('3) NOT FALSE');\n\n&nbsp; \/\/ veya\n\n&nbsp; if 0 = 0 then begin\n&nbsp; &nbsp; ShowMessage('4) S\u0131f\u0131r e\u015fittir s\u0131f\u0131r');\n&nbsp; end else\n&nbsp; if 1 = 1 then begin\n&nbsp; &nbsp; \/\/ 1=1 ko\u015fulu do\u011fru oldu\u011fu halde, yukar\u0131daki (0 = 0) ko\u015fulu derleyici a\u00e7\u0131s\u0131ndan do\u011fru olarak ilk kar\u015f\u0131la\u015f\u0131lan ko\u015ful oldu\u011fu i\u00e7in, derleyici bu k\u0131sm\u0131 g\u00f6rmezden gelir.\n&nbsp; &nbsp; ShowMessage('4) Bir e\u015fittir bir (ama bu k\u0131s\u0131m hi\u00e7 \u00e7al\u0131\u015fmayacak...)');\n&nbsp; end;\nend;<\/code><\/pre>\n<p>Yukar\u0131da de\u011findi\u011fimiz \u00f6zel durum, i\u00e7 i\u00e7e ge\u00e7mi\u015f (nested if) ifadeleri a\u00e7\u0131s\u0131ndan soyutlanm\u0131\u015ft\u0131r ve kendi skoplar\u0131 i\u00e7inde de\u011ferlendirilir. Bunu biraz a\u00e7mak gerekirse \u015f\u00f6yle bir \u00f6rnek konuyu anlamam\u0131z a\u00e7\u0131s\u0131ndan yeterli olacakt\u0131r;<\/p>\n<pre><code>var\n&nbsp; a, b: Integer;\nbegin\n&nbsp; a := 50;\n&nbsp; b := a * 2;\n&nbsp; if (a = 50) then begin\n&nbsp; &nbsp; &nbsp; if ( b = (a * 2) ) then begin\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ShowMessage('B = 100 (Sadece bu k\u0131s\u0131m \u00e7al\u0131\u015f\u0131r. di\u011ferleri at\u0131l kalacakt\u0131r.)');\n&nbsp; &nbsp; &nbsp; end else\n&nbsp; &nbsp; &nbsp; if ( a = (b div 2) ) then begin\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ShowMessage('At\u0131l k\u0131s\u0131m');\n&nbsp; &nbsp; &nbsp; end;\n&nbsp; END ELSE {&lt; buraya dikkat edelim...}\n&nbsp; if (50 = a) then begin\n&nbsp; &nbsp; &nbsp; \/\/ dikkat ederseniz \"a = 50\" ile \"50 = a\" asl\u0131nda ayn\u0131 \u015fey...\n&nbsp; &nbsp; &nbsp; \/\/ dolay\u0131s\u0131yla bir \u00f6nceki if ko\u015fulu do\u011fru oldu\u011fu zaman asla bu k\u0131sma dallanmayacak.\n&nbsp; &nbsp; &nbsp; \/\/ o nedenle \"END ELSE\" ifadesini dikkatli kullanmak gerekir.\n&nbsp; &nbsp; &nbsp; ShowMessage('At\u0131l k\u0131s\u0131m');\n&nbsp; end;\nend;<\/code><\/pre>\n<p>Bunun d\u0131\u015f\u0131nda NOT operat\u00f6r\u00fc, \u00f6ne s\u00fcrd\u00fc\u011f\u00fcn\u00fcz ko\u015fulun tersini kullanman\u0131za olanak sa\u011flar, mesela;<\/p>\n<pre><code>var\n&nbsp; a, b: Integer;\nbegin\n&nbsp; if (a &lt;&gt; 50) then ShowMessage('a, 50''ye e\u015fit de\u011fildir...');\n&nbsp; \/\/ ile\n&nbsp; if NOT (a = 50) then ShowMessage('a, 50''ye e\u015fit de\u011fildir...');\n&nbsp; \/\/ ayn\u0131 \u015feyi ifade eder...\n\n&nbsp; \/\/ veya ba\u015fka bir \u00f6rnek daha verelim;\n&nbsp; if not false then ShowMessage('NOT FALSE = TRUE'); \/\/ gibi...\nend;<\/code><\/pre>\n<p>Buraya kadar IF&#8217;in nas\u0131l kullan\u0131ld\u0131\u011f\u0131na bir g\u00f6z att\u0131k. IF ifadesinin temel mekani\u011fini inceledik ve nelere dikkat etmemiz gerekti\u011fini \u00f6\u011frendik. De\u011finecek, dokunacak ba\u015fkaca ayr\u0131nt\u0131lar mutlaka vard\u0131r. Hat\u0131rlad\u0131k\u00e7a bu makalenin devam\u0131na eklemeye devam edece\u011fim.<\/p>\n<p>Yaz\u0131n\u0131n bundan sonraki k\u0131sm\u0131nda ise t\u0131pk\u0131 PHP ve T-SQL&#8217;deki gibi inline bir IIF fonksiyonunu Delphi&#8217;de nas\u0131l tan\u0131mlanabilece\u011fine ve bunu nas\u0131l kullanabilece\u011fimize bakaca\u011f\u0131z.<\/p>\n<h1>\u00d6zel bir IF fonksiyonu, Sat\u0131ri\u00e7i IF kullan\u0131m\u0131.<\/h1>\n<p>\u0130ki stringi bir ko\u015fula g\u00f6re birle\u015ftirmek istedi\u011fimizde genelde a\u015fa\u011f\u0131dakine benzer bir yap\u0131 kullan\u0131r\u0131z;<\/p>\n<pre><code>function TeslimatMesaji(Ad: String; aCinsiyet: Boolean): String;\nbegin\n&nbsp; Result := 'Say\u0131n ' + Ad + ' ';\n&nbsp; if aCinsiyet = TRUE then begin\n&nbsp; &nbsp; &nbsp; Result := Result + 'Bey,';\n&nbsp; end else begin\n&nbsp; &nbsp; &nbsp; Result := 'Han\u0131m,';\n&nbsp; end;\n&nbsp; Result := Result + #13#10 + 'Talep etti\u011finiz sipari\u015f adresinize teslim edilmi\u015ftir.';\nend;<\/code><\/pre>\n<p>Peki bu fonksiyonu \u015f\u00f6yle yazsayd\u0131k daha anla\u015f\u0131l\u0131r ve sade olmaz m\u0131yd\u0131?<\/p>\n<pre><code>function TeslimatMesaji(Ad: String; aCinsiyet: Boolean): String;\nbegin\n&nbsp; Result := 'Say\u0131n ' + Ad + ' ' + IFF( aCinsiyet, 'Bey,', 'Han\u0131m,') + #13#10 + 'Talep etti\u011finiz sipari\u015f adresinize teslim edilmi\u015ftir.' ;\nend;<\/code><\/pre>\n<p>Her iki fonksiyon da temelde ve y\u00f6ntemde asl\u0131nda ayn\u0131 \u015feyi yap\u0131yor. Her ikisi de bir parametrenin de\u011ferini kar\u015f\u0131la\u015ft\u0131r\u0131yor, de\u011ferin do\u011fru olup olmamas\u0131na g\u00f6re belli bir i\u00e7eri\u011fi sonu\u00e7 k\u00fcmesine i\u015fliyor. Burada, yaz\u0131n\u0131n performans odakl\u0131 olmad\u0131\u011f\u0131ndan bahsetmi\u015ftik, yine bu konuya girmeyece\u011fiz. Bizim buradaki odak noktam\u0131z okunabilirik ve kod ile kurdu\u011fumuz anlam ili\u015fkisinin basitli\u011fi ve anla\u015f\u0131labilirli\u011fi oldu\u011fu i\u00e7in ben her zaman ikinci y\u00f6ntemi tercih edenlerdenimdir.&nbsp;<\/p>\n<p>\u00d6rnek kodumuzda \u00f6nizlemesini yapt\u0131\u011f\u0131m\u0131z IFF fonksiyonunun yap\u0131s\u0131n\u0131 incelemeye ba\u015flayal\u0131m isterseniz. Bu bir fonksiyon olmas\u0131 sebebiyle do\u011fal olarak veri tiplerine ba\u011f\u0131ml\u0131 bir yap\u0131ya sahip olacakt\u0131r, o nedenle ayn\u0131 mekanizmay\u0131 kurabilmek i\u00e7in baz\u0131 temel veri tipleriyle harmanlay\u0131p overload etmemiz gerekecek. Ben, burada en s\u0131k kulland\u0131\u011f\u0131m veri tipleri ve nesnelerden olu\u015fam bir kolaj haz\u0131rlad\u0131m ve a\u015fa\u011f\u0131da kullan\u0131m\u0131n\u0131za sunuyorum; Bu arada, INDY bile\u015fen paketinde yer alan ve IDGLOBAL.PAS dosyas\u0131nda iif ad\u0131 alt\u0131nda benzer fakat say\u0131ca az olan fonksiyonlar da bulunmaktad\u0131r.<\/p>\n<pre><code>interface\n\nuses\n&nbsp; System;\n\nfunction IFF(aKosul: Boolean; aDogruysa, aYanlissa: String)&nbsp; &nbsp;: String;&nbsp; &nbsp; overload;\nfunction IFF(aKosul: Boolean; aDogruysa, aYanlissa: Integer)&nbsp; : Integer;&nbsp; &nbsp;overload;\nfunction IFF(aKosul: Boolean; aDogruysa, aYanlissa: TDateTime): TDateTime; overload;\nfunction IFF(aKosul: Boolean; aDogruysa, aYanlissa: Boolean)&nbsp; : Boolean;&nbsp; &nbsp;overload;\nfunction IFF(aKosul: Boolean; aDogruysa, aYanlissa: Currency) : Currency;&nbsp; overload;\nfunction IFF(aKosul: Boolean; aDogruysa, aYanlissa: TObject)&nbsp; : TObject;&nbsp; &nbsp;overload;\nfunction IFF(aKosul: Boolean; aDogruysa, aYanlissa: Variant)&nbsp; : Variant;&nbsp; &nbsp;overload;\n\nimplementation\n\nfunction IFF(aKosul: Boolean; aDogruysa, aYanlissa: String): String;\nbegin\n&nbsp; if aKosul then Result := aDogruysa else Result := aYanlissa;\nend;\n\nfunction IFF(aKosul: Boolean; aDogruysa, aYanlissa: Integer): Integer;\nbegin\n&nbsp; if aKosul then Result := aDogruysa else Result := aYanlissa;\nend;\n\nfunction IFF(aKosul: Boolean; aDogruysa, aYanlissa: TDateTime): TDateTime; overload;\nbegin\n&nbsp; if aKosul then Result := aDogruysa else Result := aYanlissa;\nend;\n\nfunction IFF(aKosul: Boolean; aDogruysa, aYanlissa: Boolean): Boolean; overload;\nbegin\n&nbsp; if aKosul then Result := aDogruysa else Result := aYanlissa;\nend;\n\nfunction IFF(aKosul: Boolean; aDogruysa, aYanlissa: Currency): Currency; overload;\nbegin\n&nbsp; if aKosul then Result := aDogruysa else Result := aYanlissa;\nend;\n\nfunction IFF(aKosul: Boolean; aDogruysa, aYanlissa: TObject): TObject; overload;\nbegin\n&nbsp; if aKosul then Result := aDogruysa else Result := aYanlissa;\nend;\n\nfunction IFF(aKosul: Boolean; aDogruysa, aYanlissa: Variant): Variant; overload;\nbegin\n&nbsp; if aKosul then Result := aDogruysa else Result := aYanlissa;\nend;<\/code><\/pre>\n<p>Yukar\u0131daki t\u00fcm IIF fonksiyonlar\u0131n\u0131n kullan\u0131m\u0131 tamamen ayn\u0131d\u0131r. Hepsi i\u00e7in \u00f6rnek kullan\u0131m\u0131&nbsp;<b>\u00d6zel bir if fonksiyonu, Sat\u0131ri\u00e7i IF kullan\u0131m\u0131.<\/b> b\u00f6l\u00fcm\u00fcn\u00fcn 2. \u00f6rne\u011finde g\u00f6rebilirsiniz. Bununla birlikte IFF fonksiyonunu i\u00e7 i\u00e7e veya ard arda da kullanabilirsiniz. Bu noktada size engel olu\u015fturacak herhangi bir kullan\u0131m s\u00f6z konusu de\u011fil. T\u0131pk\u0131 PHP&#8217;deki ve T-SQL&#8221;deki&nbsp;IIF gibi&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bu yaz\u0131m\u0131zda IF kullan\u0131m\u0131 ile ilgili baz\u0131 tekniklerden bahsedece\u011fim. Bununla birlikte bu yaz\u0131n\u0131n i\u00e7eri\u011fi PERFORMANS ODAKLI OLMAYACAK. Performans ile ilgili ele\u015ftiriler hakl\u0131 da olabilir, haks\u0131z da olabilir o konuda yorum yapm\u0131yorum. Yaz\u0131n\u0131n amac\u0131, IF kullan\u0131m tekniklerinin \u00e7e\u015fitlili\u011fini g\u00f6stererek dil ile kurdu\u011fumuz etkile\u015fimin, kodlamada ve okunabilirlikte elde edece\u011fimiz faydalar\u0131ndan ve kod ile kurdu\u011fumuz ba\u011fdan yararlanmaya \u00e7al\u0131\u015fmak olacak. Yaz\u0131n\u0131n devam\u0131nda g\u00f6sterilecek olan tekniklerin dikkatli kullan\u0131lmamas\u0131 durumunda spagetti koda d\u00f6n\u00fc\u015febilece\u011fi tehlikesinden de bahsetmeden edemeyiz. T\u00fcm bunlardan \u00f6nce mebzuya dalmadan, bir karar verme yap\u0131s\u0131n\u0131n nas\u0131l bir iskeleti oldu\u011funa de\u011finmemiz gerekecek. Sonras\u0131nda da gerek PHP&#8217;de, gerekse Transact SQL&#8217;de s\u0131k\u00e7a kar\u015f\u0131la\u015fmaya ba\u015flad\u0131\u011f\u0131m\u0131z inline IF tekni\u011fini Delphi&#8217;de nas\u0131l kullanabiliriz ve bu tekni\u011fi bir ad\u0131m \u00f6teye nas\u0131l ta\u015f\u0131yabiliriz onun \u00f6rneklerine bakaca\u011f\u0131z.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[4,11],"class_list":["post-153","post","type-post","status-publish","format-standard","hentry","category-blog","tag-delphi","tag-programlama"],"_links":{"self":[{"href":"http:\/\/www.potansif.com\/index.php?rest_route=\/wp\/v2\/posts\/153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.potansif.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.potansif.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.potansif.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.potansif.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=153"}],"version-history":[{"count":1,"href":"http:\/\/www.potansif.com\/index.php?rest_route=\/wp\/v2\/posts\/153\/revisions"}],"predecessor-version":[{"id":154,"href":"http:\/\/www.potansif.com\/index.php?rest_route=\/wp\/v2\/posts\/153\/revisions\/154"}],"wp:attachment":[{"href":"http:\/\/www.potansif.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.potansif.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=153"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.potansif.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}