Koşullu (bilgisayar programlama) - Conditional (computer programming)

If-Then-Else akış diyagramı
Yuvalanmış bir "Olursa-Öyleyse-Yoksa" akış diyagramı

İçinde bilgisayar Bilimi, koşullu ifadeler, koşullu ifadeler ve koşullu yapılar bir Programlama dili, bir programcı tarafından belirlenmiş olup olmamasına bağlı olarak farklı hesaplamalar veya eylemler gerçekleştiren Boole şart doğru veya yanlış olarak değerlendirilir. Durumunun dışında şube tahmini, bu her zaman seçilerek değiştirilerek elde edilir. kontrol akışı bazı koşullara göre.

İçinde zorunlu programlama diller, "koşullu Beyan "genellikle kullanılırken fonksiyonel programlama, "koşullu ifade "veya" koşullu yapı "tercih edilir, çünkü bu terimlerin hepsi farklı anlamlara sahiptir.

olmasına rağmen dinamik gönderim genellikle koşullu bir yapı olarak sınıflandırılmaz, alternatifler arasında seçim yapmanın başka bir yoludur. Çalışma süresi.

Eğer – öyleyse (–else)

eğer-öyleyse yapı (bazen denir eğer-öyleyse-değilse) birçok programlama dilinde yaygındır. Sözdizimi dilden dile değişse de, temel yapı ( sözde kod form) şuna benzer:

Eğer(Booleşart)Sonra(sonuç)Başka(alternatif)SonEğer

Örneğin:

EğerStok=0Sonraİleti=siparişyeniStokBaşkaİleti=Oradadır-dirStokSonEğer

Yukarıdaki örnek kodda, temsil edilen kısım (boole koşulu) bir koşullu oluşturur ifade, içsel değere sahip (örneğin, değerlerden herhangi biri ile ikame edilebilir) Doğru veya Yanlış) ama içsel bir anlamı yoktur. Buna karşılık, bu ifadenin kombinasyonu, Eğer ve Sonra onu çevreleyen ve ardından gelen sonuç bir koşullu oluşturur Beyan, içsel anlamı olan (örneğin, tutarlı bir mantıksal kuralı ifade eden) ancak içsel değeri olmayan.

Ne zaman çevirmen bulur Eğer, bir Boole durum - örneğin, x> 0"x değişkeni sıfırdan büyük bir sayı içeriyor" anlamına gelir ve bu koşulu değerlendirir. Durum ise doğruaşağıdaki ifadeler sonra idam edilir. Aksi takdirde, yürütme aşağıdaki şubede devam eder - Başka blok (bu genellikle isteğe bağlıdır) veya yoksa Başka şube, sonra eğer biterse.

Her iki dal da yürütüldükten sonra, kontrol sonraki noktaya döner eğer biterse.

Erken programlama dillerinde, özellikle bazı lehçelerde TEMEL 1980'lerde ev bilgisayarları, bir eğer-öyleyse ifade sadece içerebilir GİT ifadeler (bir şube talimat). Bu, okunması zor bir programlama tarzına yol açtı. spagetti programlama, adı verilen bu tarzdaki programlarla spagetti kodu. Sonuç olarak, yapısal programlama, keyfi ifadelerin (sanal olarak) bir Eğer BASIC programlama çevrelerinin çoğunda bile norm haline gelene kadar popülerlik kazandı. Bu tür mekanizmalar ve ilkeler daha eski ancak daha gelişmiş olana dayanıyordu Algol dil ailesi ve ALGOL benzeri diller gibi Pascal ve Modula-2 uzun yıllar modern BASIC varyantlarını etkiledi. Sadece kullanırken mümkün olsa da GİT ifadeler eğer-öyleyse Spagetti kodu olmayan ve yapılandırılmış bir programlama dilinde yazılmış programlar kadar iyi yapılandırılmış ve okunabilir olan programları yazmak için ifadeler, yapısal programlama bunu kolaylaştırır ve uygular. Yapılandırılmış eğer-öyleyse-değilse Yukarıdaki örnekteki gibi ifadeler, yapılandırılmış programlamanın temel unsurlarından biridir ve bunlar gibi en popüler üst düzey programlama dillerinde mevcutturlar. C, Java, JavaScript ve Visual Basic .

Bir incelik, birçok dilde bulunan isteğe bağlı else cümlesinin, bağlamdan bağımsız gramer dır-dir belirsiz, dan beri yuvalanmış koşul ifadeleri birden çok yolla çözümlenebilir. Özellikle,

Eğer a sonra Eğer b sonra s Başka s2

olarak ayrıştırılabilir

Eğer a sonra (Eğer b sonra s) Başka s2

veya

Eğer a sonra (Eğer b sonra s Başka s2)

olup olmadığına bağlı olarak Başka ilk ile ilişkilidir Eğer veya ikinci Eğer. Bu, sarkan başka sorun ve dile bağlı olarak çeşitli şekillerde çözülür.

Aksi takdirde

Kullanarak Aksi takdirde, birkaç koşulu birleştirmek mümkündür. Yalnızca doğru olduğu bulunan ilk koşulu takip eden ifadeler çalıştırılacaktır. Diğer tüm ifadeler atlanacaktır.

Eğer şart sonra   - ifadelerAksi takdirde şart sonra    - daha fazla ifadeAksi takdirde şart sonra    - daha fazla ifade;...Başka    - diğer ifadeler;son Eğer;

Örneğin, bir ürün için% 30'a varan indirim sunan bir mağaza için:

Eğer indirim < 11% sonra    Yazdır (sen Sahip olmak -e ödemek $30)Aksi takdirde indirim<21% sonra    Yazdır (sen Sahip olmak -e ödemek $20)Aksi takdirde indirim<31% sonra    Yazdır (sen Sahip olmak -e ödemek $10)son Eğer;

İfadeleri Aksi takdirde, içinde Ada, basitçe Sözdizimsel şeker için Başka bunu takiben Eğer. Ada'da fark, yalnızca bir eğer biterse kullanılıyorsa gereklidir Aksi takdirde onun yerine Başka bunu takiben Eğer. PHP kullanır Aksi takdirde anahtar kelime[1] hem küme parantezleri hem de iki nokta üst üste sözdizimleri için. Perl anahtar kelimeyi sağlar elsif birden fazla kişinin ihtiyaç duyacağı çok sayıda diş telini önlemek için Eğer ve Başka ifadeler. Python özel anahtar kelimeyi kullanır elif yapı parantez yerine girinti ile belirtildiğinden, Başka ve Eğer her koşuldan sonra daha fazla girinti gerektirir. Bazı uygulamaları TEMEL, gibi Visual Basic,[2] kullanım ElseIf çok. Benzer şekilde, önceki UNIX kabukları (daha sonra POSIX kabuk sözdizimine göre toplandı)[3]) elif'i de kullanın, ancak boşluklarla, satır sonlarıyla veya her ikisiyle sınırlandırma seçeneği verin.

Bununla birlikte, birçok dilde daha doğrudan Algol'dan geldi, örneğin Algol68, Simula, Pascal, BCPL ve C için bu özel sözdizimi Aksi takdirde yapı mevcut değildir ve C'nin birçok sözdizimsel türevinde mevcut değildir, örneğin Java, ECMAScript, ve benzeri. Bu işe yarar çünkü bu dillerde herhangi bir tek ifade (bu durumda Eğer koşul...) bir bloğun içine alınmadan bir koşulu takip edebilir.

Bu tasarım seçiminin o kodda küçük bir "maliyeti" vardır Aksi takdirde şube, etkin bir şekilde, ekstra bir yuvalama düzeyi ekleyerek, keyfi olarak uzun süre analiz etmek ve uygulamak zorunda olan bazı derleyiciler (veya uygulayıcıları) için işi karmaşıklaştırır. Aksi takdirde yinelemeli zincirler.

Koşul dizisindeki tüm terimler tek bir ifadenin değerini test ediyorsa (örneğin, x = 0 ise ... aksi takdirde x = 1 ... aksi takdirde x = 2...), o zaman bir alternatif, anahtar deyimi, ayrıca case-statement veya select-statement olarak da adlandırılır. Tersine, switch deyimine sahip olmayan dillerde, bunlar bir dizi ile üretilebilir Aksi takdirde ifadeler.

If – then – else ifadeleri

Birçok dil desteği if ifadeler, if ifadelerine benzer, ancak sonuç olarak bir değer döndürür. Bu nedenle, bunlar (bir değer bağlamında izin verilmeyebilen) ifadeler değil (bir değer olarak değerlendirilen) doğru ifadelerdir.

Algol ailesi

ALGOL 60 ve diğer bazı üyeler Algol aile izni eğer-öyleyse-değilse bir ifade olarak:

  myvariable: = eğer x> 20 ise 1 else 2

Lisp lehçeleri

Lehçelerinde Lisp Şema, Raket ve Ortak Lisp - İlki büyük ölçüde ALGOL'den esinlenmiştir:

;; Şema(tanımlamak değişkenim (Eğer (> x 12) 1 2))   ; 'X'in değerine bağlı olarak' değişkenim'i 1 veya 2'ye atar
;; Ortak Lisp(İzin Vermek ((x 10))  (setq değişkenim (Eğer (> x 12) 2 4)))  ; 'Değişkenim'i 2'ye atar

Haskell

İçinde Haskell 98, sadece bir eğer ifade, Hayır eğer ifadesi, ve Başka her ifadenin bir değeri olması gerektiğinden, bölüm zorunludur.[4] Diğer dillerde koşullarla ifade edilecek mantık genellikle şu şekilde ifade edilir: desen eşleştirme özyinelemeli fonksiyonlarda.

Çünkü Haskell tembel gibi kontrol yapıları yazmak mümkündür. Eğersıradan ifadeler olarak; tembel değerlendirme, bir eğer işlev sadece durumu ve uygun dalı değerlendirebilir (burada katı bir dil üçünü de değerlendirir). Şöyle yazılabilir:[5]

Eğer' :: Bool -> a -> a -> aEğer' Doğru x _ = xEğer' Yanlış _ y = y

C benzeri diller

C ve C benzeri dillerin özel bir üçlü operatör (?: ) aşağıdaki gibi bir şablonla tanımlanabilen bir işleve sahip koşullu ifadeler için:

şart ? doğru olduğunda değerlendirildi: yanlış olduğunda değerlendirildi

Bu, C benzeri dillerde if ifadelerinden farklı olarak ifadelerin satır içine alınabileceği anlamına gelir:

değişkenim = x > 10 ? "foo" : "bar";  // C benzeri dillerde

Algol ailesiyle karşılaştırılabilir eğer-öyleyse-değilse ifade (bir Beyan) (ve diğerleri arasında Ruby ve Scala'da benzer).

Aynı şeyi bir if-ifadesi kullanarak gerçekleştirmek için, bu birden fazla kod satırı (tipik düzen kurallarına göre) ve "my_variable" dan iki kez bahsetmeyi gerektirir:

Eğer (x > 10)    değişkenim = "foo";Başka    değişkenim = "bar";

Bazıları, açık if / then ifadesinin okunmasının daha kolay olduğunu ve üçlü operatörden daha verimli kodda derlenebileceğini iddia eder.[6] diğerleri ise özlü ifadelerin, tekrar içeren birkaç satıra yayılmış ifadelere göre daha kolay okunabileceğini savunur.

Küçük Temel

x = TextWindow.Okuma Numarası()Eğer (x > 10) Sonra    TextWindow.Yazı çizgisi("Değişkenimin adı 'foo'.")Başka    TextWindow.Yazı çizgisi("Değişkenimin adı 'bar'.")EndIf

İlk olarak, kullanıcı programı çalıştırdığında, okuyucunun bir sayı yazmasını bekleyen bir imleç belirir. Bu sayı 10'dan büyükse, "Değişkenim 'foo' olarak adlandırılır." Metni. ekranda görüntülenir. Sayı 10'dan küçükse, "Değişkenim 'çubuk' olarak adlandırılır." ekranda yazdırılır.

Visual Basic

İçinde Visual Basic ve diğer bazı diller, adı verilen bir işlev IIf Koşullu bir ifade olarak kullanılabilen sağlanmıştır. Ancak, gerçek bir koşullu ifade gibi davranmaz çünkü hem doğru hem de yanlış dallar her zaman değerlendirilir; sadece birinin sonucu atılırken diğerinin sonucu IIf işlevi tarafından döndürülür.

Tcl

İçinde Tcl Eğer bir anahtar kelime değil, bir işlevdir (Tcl'de komut olarak bilinir veya proc). Örneğin

Eğer {$ x > 10} {   koyar "Foo!"}

adlı bir işlevi çağırır Eğer 2 argüman iletmek: Birincisi koşul ve ikincisi gerçek daldır. Her iki argüman da dizeler olarak iletilir (Tcl'de küme parantezleri içindeki her şey bir dizedir).

Yukarıdaki örnekte, işlev çağrılmadan önce koşul değerlendirilmez. Bunun yerine, Eğer işlev, koşulu bir dize değeri olarak alır ve bu dizeyi çağıranlar kapsamında bir ifade olarak değerlendirmekten sorumludur.[7]

Böyle bir davranış kullanılarak mümkündür üst düzey ve ifade komutlar:

Uplevel, yeni kontrol yapılarının Tcl prosedürleri olarak uygulanmasını mümkün kılar (örneğin, bir Tcl prosedürü olarak while yapısını uygulamak için yukarı seviye kullanılabilir).[8]

Çünkü Eğer aslında bir işlevdir, aynı zamanda bir değer döndürür:

Komutun dönüş değeri, çalıştırılan gövde komut dosyasının sonucudur veya ifadelerden hiçbiri sıfır değilse ve bodyN yoksa boş bir dizedir.[9]

Pas, paslanma

İçinde Pas, paslanma, Eğer her zaman bir ifadedir. Hangi dalın çalıştırıldığına veya birim türüne göre değerlendirilir. () hiçbir dal yürütülmezse. Bir şube bir dönüş değeri sağlamazsa, şu şekilde değerlendirilir: () varsayılan olarak. Sağlamak için Eğer ifadenin türü derleme sırasında bilinir, her dalın aynı türden bir değeri değerlendirmesi gerekir. Bu nedenle bir Başka diğer şubeler değerlendirme yapmadıkça şube fiilen zorunludur ()çünkü bir Eğer olmadan Başka her zaman değerlendirebilir () varsayılan olarak.[10]

// x'in değerine bağlı olarak my_variable'a bir değer atayınİzin Vermekdeğişkenim=Eğerx>20{1}Başka{2};// Bu varyant derlenmeyecek çünkü 1 ve () farklı türlere sahipİzin Vermekdeğişkenim=Eğerx>20{1};// İhtiyaç duyulmadığında değerler ihmal edilebilirEğerx>20{println!("x, 20'den büyük");}

Aritmetik eğer

Kadar Fortran 77, Fortran dilinde "aritmetik eğer" ifadesi vardır ve bu, hesaplanmış bir EĞER ile bir durum ifadesinin ortasında yer alır. trichotomi x < 0, x = 0, x > 0. Bu, Fortran'daki en eski şartlı ifadeydi:[11]

EĞER (e) etiket1, etiket2, etiket3

E herhangi bir sayısal ifade olduğunda (bir tam sayı olması gerekmez); bu eşdeğerdir

EĞER (e .LT. 0) GİT etiket1EĞER (e .EQ. 0) GİT etiket2GİT etiket3

Çünkü bu aritmetik EĞER çoklu eşdeğerdir GİT herhangi bir yere atlayabilecek ifadeler, yapılandırılmamış bir kontrol ifadesi olarak kabul edilir ve daha yapılandırılmış ifadeler kullanılabiliyorsa kullanılmamalıdır. Uygulamada çoğu aritmetiğin EĞER ifadeler bir veya iki etiketlerle aşağıdaki ifadeye referans verdi.

Bu, Fortran'ın orijinal uygulamasındaki tek koşullu kontrol ifadesiydi. IBM 704 bilgisayar. Bu bilgisayarda test ve dal işlem kodunun bu üç durum için üç adresi vardı. Diğer bilgisayarlar, son aritmetik işlemlerle ilişkili pozitif, sıfır, negatif, çift, taşma, taşıma gibi "bayrak" kayıtlarına sahip olacak ve "Akümülatör negatifse dallanma" ve ardından "Akümülatör sıfırsa dal" veya benzeri komutlar kullanacaktır. İfadenin değerlendirildiğine dikkat edin Sadece bir kezve tamsayı aritmetiği gibi taşmanın meydana gelebileceği durumlarda, taşma veya taşıma bayrakları da dikkate alınacaktır.

Smalltalk'ta nesneye yönelik uygulama

Diğer dillerin aksine, Smalltalk koşullu ifade bir dil yapısı ama sınıfta tanımlanmış Boole iki parametre alan soyut bir yöntem olarak kapanışlar. Boole iki alt sınıfı vardır, Doğru ve Yanlış, her ikisi de yöntemi tanımlar, Doğru sadece ilk kapatmanın yürütülmesi, Yanlış sadece ikinci kapatmanın yürütülmesi.[12]

var = şart     Eğer doğruysa: [ 'foo' ]    ifFalse: [ 'bar' ]

JavaScript

İki örnek JavaScript:

Eğer (Matematik.rastgele() < 0.5) {  konsol.günlük("Kafaların var!");} Başka {  konsol.günlük("Yazıların var!");}

[açıklama gerekli ]

var x = Matematik.rastgele();Eğer (x < 1/3) {  konsol.günlük("Bir kişi kazandı!");} Başka Eğer (x < 2/3) {  konsol.günlük("İki kişi kazandı!");} Başka {  konsol.günlük("Üç yönlü bir kravat!");}

[açıklama gerekli ]

Lambda hesabı

İçinde Lambda hesabı, eğer-ise-değilse koşullu kavramı şu ifadeler kullanılarak ifade edilebilir:

true = λx. λy. x yanlış = λx. λy. yifThenElse = (λc. λx. λy. (c x y))
  1. true en fazla iki argüman alır ve her ikisi de sağlandığında (bkz. köri ), verilen ilk argümanı döndürür.
  2. false, en fazla iki argüman alır ve her ikisi de sağlandığında (bkz. köri ), verilen ikinci argümanı döndürür.
  3. ifThenElse en fazla üç argüman alır ve tümü sağlandığında, hem ikinci hem de üçüncü argümanı birinci argümana geçirir (bu, iki argüman veren ve bir sonuç üreten bir işlevdir). İfThenElse'in argüman olarak yalnızca true veya false almasını bekliyoruz, her ikisi de verilen iki argümanı tercih ettikleri tek argümana yansıtıyor ve bu argüman daha sonra döndürülüyor.

Not: ifThenElse, sol ve sağ koşul ifadeleri olarak iki işlev geçirilir; bu gerekli seçilen işlevi gerçekten çağırmak için ifThenElse sonucuna boş bir tuple () da iletmek için, aksi takdirde ifThenElse işlev nesnesini çağrılmadan döndürür.

Sayıların tanımsız kullanılabildiği bir sistemde (Lisp, Geleneksel kağıt matematiği gibi), yukarıdakiler aşağıda tek bir kapanış olarak ifade edilebilir:

 ((λ doğru. λ yanlış. λifThenElse.     (ifThenElse doğru 2 3) )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))

Burada true, false ve ifThenElse, bloklarının sonunda kapsamlarına aktarılan ilgili tanımlarına bağlıdır.

Buna çalışan bir JavaScript benzetmesi (kesinlik için yalnızca tek değişkenli işlevleri kullanan) şudur:

 var computationResult = ((_doğru => _yanlış => _ifThenElse =>      _ifThenElse(_doğru)(2)(3)  )(x => y => x)(x => y => y)(c => x => y => c(x)(y)));

Yukarıdaki çok değişkenli fonksiyonlara sahip kod şuna benzer:

 var computationResult = ((_doğru, _yanlış, _ifThenElse) =>     _ifThenElse(_doğru, 2, 3) )((x, y) => x, (x, y) => y, (c, x, y) => c(x, y));

sayıların varsayıldığı bir sistem içermeyen önceki örneğin başka bir versiyonu aşağıdadır.

İlk örnek ilk dalın alındığını gösterirken, ikinci örnek alınan ikinci dalı göstermektedir.

 ((λ doğru. λ yanlış. λifThenElse.     (ifThenElse doğru (λFirstBranch. FirstBranch) (λSecondBranch. İkinci Şube)) )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r)) ((λ doğru. λ yanlış. λifThenElse.     (ifThenElse yanlış (λFirstBranch. FirstBranch) (λSecondBranch. İkinci Şube)) )(λx. λy. x)(λx. λy. y)(λc. λl. λr. c l r))

Smalltalk, doğru ve yanlış temsilleri için benzer bir fikir kullanır; True ve False, ifTrue / ifFalse mesajlarına farklı şekilde yanıt veren tek nesnelerdir.

Haskell, Boole türü için bu tam modeli kullanırdı, ancak yazarken, çoğu Haskell programı sözdizimsel şeker kullanır "if a then b else c" yapısı, ifThenElse'den farklı olarak başka bir işleve sarılmadıkça veya yeniden uygulanmadıkça Bu sayfanın Haskell bölümünde gösterilmektedir.

Durum ve anahtar ifadeleri

İfadeleri değiştir (bazı dillerde vaka ifadeleri veya çok yollu dallar) belirli bir değeri belirtilen sabitlerle karşılaştırır ve eşleşen ilk sabite göre işlem yapar. Hiçbir eşleşme başarılı olmazsa, genellikle bir varsayılan işlemin ('başka', 'aksi') yapılması için bir hüküm vardır. Anahtar ifadeleri izin verebilir derleyici optimizasyonları, gibi arama tabloları. Dinamik dillerde, durumlar sabit ifadelerle sınırlı olmayabilir ve desen eşleştirme olduğu gibi kabuk komut dosyası sağdaki örnek, burada '*)' varsayılan durumu bir Düzenli ifade herhangi bir dizeyle eşleşen.

Pascal:C:Kabuk betiği:
durum someChar nın-nin  'a': actionOnA;  'x': actionOnX;  "y",'z':actionOnYandZ;  Başka actionOnNoMatch;son;
değiştirmek (someChar) {  durum 'a': actionOnA; kırmak;  durum 'x': actionOnX; kırmak;  durum "y":  durum 'z': actionOnYandZ; kırmak;  varsayılan: actionOnNoMatch;}
durum $ someChar içinde)    actionOnA; ;;   x)    actionOnX; ;;   [yz]) actionOnYandZ; ;;  *)     actionOnNoMatch ;;esac

Desen eşleştirme

Desen eşleştirme her ikisine de alternatif olarak görülebilir eğer-öyleyse-değilse, ve durum ifadeler. İşlevsel programlama özelliklerine sahip birçok programlama dilinde mevcuttur. Wolfram Dili, ML Ve bircok digerleri. İşte basit bir örnek OCaml dil:

eşleşme meyve ile| "elma" -> pişirmek turta| "Hindistan cevizi" -> pişirmek dango_mochi| "muz" -> karıştırmak;;

Desen eşleştirmenin gücü, Kısaca sadece eylemleri değil aynı zamanda değerler veri kalıplarına. İşte yazılmış bir örnek Haskell Bu, bu özelliklerin her ikisini de göstermektedir:

harita _ []      = []harita f (h : t) = f h : harita f t

Bu kod bir işlevi tanımlar harita, ilk bağımsız değişkeni (bir işlev) ikinci bağımsız değişkenin (bir liste) öğelerinin her birine uygulayan ve elde edilen listeyi döndüren. İki satır, bu durumda mümkün olan iki tür argüman için işlevin iki tanımıdır - biri listenin boş olduğu (sadece boş bir liste döndür) ve diğeri listenin boş olmadığı durumda.

Desen eşleştirme kesinlikle konuşmuyor her zaman bir seçim yapısı, çünkü Haskell'de her zaman eşleşmesi garantilenen tek bir alternatif yazmak mümkündür - bu durumda, bir seçim yapısı olarak değil, sadece isimleri değerlere bağlamanın bir yolu olarak kullanılır. Bununla birlikte, mevcut olduğu dillerde sıklıkla bir seçim yapısı olarak kullanılır.

Karma tabanlı koşul ifadeleri

Olan programlama dillerinde ilişkilendirilebilir diziler veya karşılaştırılabilir veri yapıları, örneğin Python, Perl, PHP veya Amaç-C koşullu atamayı uygulamak için bunları kullanmak deyimseldir.[13]

Evcil Hayvan = Ham girdi("Ad vermek istediğiniz evcil hayvanın türünü girin:")bilinen_ kümeler = {    "Köpek": "Fido",    "Kedi": "Miyavlar",    "Kuş": "Tweety",}benim adım = bilinen_ kümeler[Evcil Hayvan]

Olan dillerde anonim işlevler veya bir programcının adlandırılmış bir işlevi değişken bir referansa atamasına izin veren koşullu akış, bir karma olarak bir karma gönderim tablosu.

Tahmin

Koşullu şube talimatlarına bir alternatif şudur: tahmin. Tahmin bir mimari değiştirmek yerine talimatların koşullu olarak yürütülmesini sağlayan özellik kontrol akışı.

Seçim sistemi çapraz referansı

Bu tablo, her dilin en son dil spesifikasyonuna atıfta bulunmaktadır. Spesifikasyonu olmayan diller için, resmi olarak yayımlanan en son uygulamaya atıfta bulunulur.

Programlama diliYapılandırılmışsadeğiştirmek –Seç – büyük / küçük harfAritmetik eğerDesen eşleştirme[A]
sonraBaşkaelse – if
AdaEvetEvetEvetEvetHayırHayır
APLEvetEvetEvetEvetHayırHayır
Bash kabuğuEvetEvetEvetEvetHayırEvet
C, C ++EvetEvetEvetSuya düşmekHayırHayır
C #EvetEvetGereksiz[B]EvetHayırHayır
COBOLEvetEvetGereksiz[B]EvetHayırHayır
EyfelEvetEvetEvetEvetHayırHayır
F #EvetEvetEvetGereksiz[C]HayırEvet
Fortran 90EvetEvetEvetEvetEvet[F]Hayır
GitEvetEvetGereksiz[B]EvetHayırHayır
HaskellEvetGerekliGereksiz[B]Evet ama gereksiz[C]HayırEvet
JavaEvetEvetGereksiz[B]Suya düşmek[14]HayırHayır
ECMAScript (JavaScript )EvetEvetGereksiz[B]Suya düşmek[15]HayırHayır
MathematicaEvetEvetEvetEvetHayırEvet
OberonEvetEvetEvetEvetHayırHayır
PerlEvetEvetEvetEvetHayırHayır
PHPEvetEvetEvetSuya düşmekHayırHayır
Pascal, Nesne Pascal (Delphi )EvetEvetGereksizEvetHayırHayır
PythonEvetEvetEvetHayırHayırHayır
QuickBASICEvetEvetEvetEvetHayırHayır
YakutEvetEvetEvetEvetHayırHayır
Pas, paslanmaEvetEvetEvetGereksizHayırEvet
ScalaEvetEvetGereksiz[B]Suya düşmek[kaynak belirtilmeli ]HayırEvet
SQLEvet[S]EvetEvetEvet[S]HayırHayır
SwiftEvetEvetEvetEvetHayırEvet
TclEvetEvetEvetEvetHayırEvet
Visual Basic, klasikEvetEvetEvetEvetHayırHayır
Visual Basic .NETEvetEvetEvetEvetHayırHayır
Windows PowerShellEvetEvetEvetSuya düşmekHayırHayır
  1. ^ Bu, örüntü eşleştirmeyi programlama dilinde ayrı bir koşullu yapı olarak ifade eder - yalnızca dizge örüntü eşleştirme desteğinin aksine, Düzenli ifade destek.
  2. 1 2 3 4 5 Sık karşılaşılan Aksi takdirde C dil ailesinde ve COBOL ve Haskell'de bir dil özelliği değil, iç içe ve bağımsız bir dizi eğer öyleyse belirli bir kaynak kodu düzeniyle birleştirilmiş ifadeler. Bununla birlikte, bu aynı zamanda farklı bir başka anlamına da gelir - eğer bu dillerde gerçekten gerekli değilse.
  3. 1 2 Haskell ve F # 'da ayrı bir sabit seçim yapısına gerek yoktur, çünkü aynı görev desen eşleştirmeyle de yapılabilir.
  4. ^ Ruby'de durum inşa etmek Düzenli ifade eşleştirme, mevcut koşullu akış kontrol alternatifleri arasındadır. Bir örnek için bkz. bu Yığın Taşması sorusu.
  5. 1 2 SQL, her iki rolü de yerine getiren iki benzer yapıya sahiptir. SQL-92. A "arandı DURUM"ifade DURUM ZAMAN koşul1 SONRA ifade1 ZAMAN koşul2 SONRA ifade2 [...] BAŞKA ifade SONU gibi çalışır if ... else if ... elseoysa "basit DURUM"ifade: VAKA ifade NE ZAMAN val1 SONRA ifade1 [...] ELSE ifadeDflt SON switch deyimi gibi çalışır. Ayrıntılar ve örnekler için bkz. Durum (SQL).
  6. ^ Aritmetik Eğer Fortran 90'da modası geçmiş.

Ayrıca bakınız

Referanslar

  1. ^ PHP elseif sözdizimi
  2. ^ Visual Basic ElseIf sözdizimi
  3. ^ POSIX standart kabuk sözdizimi
  4. ^ Haskell 98 Dili ve Kitaplıkları: Gözden Geçirilmiş Rapor
  5. ^ "HaskellWiki'de If-then-else Önerisi "
  6. ^ "Etkili C İpuçları # 6 - Üçlü operatör" Stack Overflow "kullanmayın. Embeddedgurus.com. 2009-02-18. Alındı 2012-09-07.
  7. ^ "Yeni Kontrol Yapıları". Tcler'in wiki'si. Alındı 21 Ağustos, 2020.
  8. ^ "üst düzey kılavuz sayfası". www.tcl.tk. Alındı 21 Ağustos, 2020.
  9. ^ "eğer kılavuz sayfası". www.tcl.tk. Alındı 21 Ağustos, 2020.
  10. ^ "If and if let expressions". Alındı 1 Kasım, 2020.
  11. ^ "Amerikan Ulusal Standart Programlama Dili FORTRAN". 1978-04-03. Arşivlenen orijinal 2007-10-11 tarihinde. Alındı 2007-09-09.
  12. ^ "VisualWorks: Koşullu İşleme". 2006-12-16. Arşivlenen orijinal 2007-10-22 tarihinde. Alındı 2007-09-09.
  13. ^ "Anahtar / durum ifadelerini uygulamanın Pythonic yolu". Arşivlenen orijinal 2015-01-20 tarihinde. Alındı 2015-01-19.
  14. ^ Java.sun.com, Java Dil Spesifikasyonu, 3. Baskı.
  15. ^ Ecma-international.org Arşivlendi 2015-04-12 de Wayback Makinesi ECMAScript Dil Belirtimi, 5. Baskı.

Dış bağlantılar