2016-03-18 26 views
1

kısa if ifadesi ve kısa if ifadesi yok. Bunu Java Language Specification belgesinde buldum. It saysjava ifadeleri Kısa nedir?

şöyle "Tablolar böylece dilbilgisi iki kategoriye ayrılır: hayır else sözcüğü (a sahip if ifadesi sona olabilecek olanlar '' deyimi ise kısa) ve kesinlikle yok olanlar

does deyimi else sözcüğü varsa kesinlikle kısa olursa açıklamada may yılında bitmez

Sadece ifadeleri bir başka anahtar kelime önce acil substatement olarak görünür.

Bu basit kural "sarkan e önler "sorun" "Hayır kısa if" kısıtlaması olan bir ifadenin yürütülmesi davranışı, kısıtlamasının "kısa iflas" kısıtlaması olmadan aynı tür ifade yürütme davranışıyla aynıdır; ayrım sözdizimsel zorluk çözmek için tamamen çizilir "

kimse bu lütfen açıklayabilir

+4

gerçekten önceki satırı eklemelisiniz: "C ve C++ gibi Java programlama dili ve onlardan önce birçok programlama dili, bir başka maddenin, muhtemelen ait olabileceğinden, en içteki tümcelere aittir." Aşağıdaki gramer tarafından: " –

+0

@NathanHughes Evet, soru bağlamı olmayan garip bir şekilde okur. Bunu sağladığın için teşekkür ederim. –

cevap

2

iki kategoriye ayrılır:.?

sahiptir if ifadesi sona ihtimali olanlarla else koşulu ("kısa ise ifadesi")

if (condition) { 

} 

ve kesinlikle

if (condition) { 

} else { 

} 

süslü parantez dışarıda bırakın eşleşmeyenler, sen bir satır varsa ve başka ifadeleri olsun.

if (condition) action(); // short-if 
// else doOther(); // optional 
4

Başvurulan paragraftaki tanıma göre; Kısa bir if ifadesi desenleri uyan Bir if ifadesi

if (condition) { 
} 

if (condition) { 
} else if (condition) { 
} 

olmayan bir kısa deyimi bu desen uymuyorsa, örneğin bu olabilir aşağıdaki

if (condition) { 
} else { 
} 

if (condition) { 
} else if (condition) { 
} else { 
} 

ve böylece herhangi üzerinde.

Temel olarak, "kısa if" ifadesi, başka bir bloğa sahip olmaması nedeniyle olarak bilinen bir if ifadesidir.

+1

Bu 'else'de bir boşluk koymanız gerekir. –

+0

@PaulBoddington Teşekkürler Paul, çok fazla farklı dil var, ve sadece soğuk yazarak (bir IDE'ye yazmadan yazarak) bana daha az yer bırakmaya zorlandım. Şimdi düzenleme :) –

1

Diğer 2 yanıtın yanı sıra, sorunun bu kuralın önüne geçtiğini görmek güzel.

Örneğin, bu ne yazdırıyor?

int a = 0; if (a == 1) if (a == 2) System.out.println("A"); else System.out.println("B"); 

O (hiçbir şey yazdırmak hangi)

int a = 0; 
if (a == 1) 
    if (a == 2) 
     System.out.println("A"); 
    else 
     System.out.println("B"); 

olarak yorumlanır, ya da (o "B" yazdırmalısınız benziyor)

int a = 0; 
if (a == 1) 
    if (a == 2) 
     System.out.println("A"); 
else 
    System.out.println("B"); 

olarak mümkündür.

Ancak, kural, bunlardan ikincisini hariç tutar, çünkü bu if (a == 1) bölümünün else yan tümcesi vardır, ancak if (a == 2) System.out.println("A"); ifadesi kısadır.

Dolayısıyla bunların hiçbir yazdırır. Öte yandan

, if (a == 2) olsaydı değil kısa, eğer şu şekilde görünecektir, ve endişelenecek bir belirsizlik olmaması olacaktır. Hiçbir else sözcüğü (bir "deyimi ise kısa") olan bir if açıklamada sona ihtimali olanlarla ve kesinlikle yok olanlar:

int a = 0; 
if (a == 1) 
    if (a == 2) 
     System.out.println("A"); 
    else 
     System.out.println("C"); 
else 
    System.out.print("B"); 
+0

Cevabınız için teşekkürler. Int = 0 olarak verdiğiniz kodda; (A == 1) ise (a == 2) System.out.println ("A"); başka System.out.println ("B"); Fakat bu ifadeyi nasıl söylerseniz (a == 2) System.out.println ("A"); kodları a = 1 ile çalıştırdığımda coz kısa olur. Çıkışı B olarak aldım. O zaman nasıl olur da eğer ikinci bir kısaysa. – BabyboB

0

Tablolar böylece dilbilgisi iki kategoriye ayrılır.

O ifadeleriStatementNoShortIf ve Tablosu ayrılır anlamına gelir. Hangi Bildirim "kısa if ifadesi" içinde görünebilir ve StatementNoShortIf yapamazsınız.

deyimi başka koşulu olmadan bir if ifadesi ise kısa. deyimi else sözcüğü etmeyen bir varsa açıklamada başka anahtar kelime önce acil substatement olarak görünebilir eğer kesinlikle kısacası bitmez

IfThenStatement: // short if statement 
    if (Expression) Statement 

IfThenElseStatement: // not short if statement 
    if (Expression) StatementNoShortIf else Statement 

IfThenElseStatementNoShortIf: // not short if statement 
    if (Expression) StatementNoShortIf else StatementNoShortIf 

Sadece tablolar.

Sadece StatementNoShortIf deyimi ise olmayan kısacası if ve else arasında görünebilir.

Ve böyle StatementNoShortIf o if else ifadesinin bir derhal substatement olmalıdır.

Bu basit kural

"Başka sarkan" sorunu engeller. kısıtlama "ise bir kısa" olmadan "bir kısa ise" sınırlama açıklamada aynı tür uygulama davranışı ile aynıdır bir ifadesinin yürütülmesi davranışı; ayrım sözdizimsel soruna karşı tamamen çekilir.

Dolayısıyla sarkan başka sorun numune böyle düşünün:

if (door.isOpen()) 
    if (resident.isVisible()) 
     resident.greet("Hello!"); 
else door.bell.ring(); // A "dangling else" 

else ilk if parçası olamaz. Eğer öyleyse StatementNoShortIf her zaman else gerektiğinden

, hemen substatement kuralına göre, hat 2-3 bir StatementNoShortIf deyim olması gerekiyor, ama aslında bir IfThenStatemtn (deyim eğer kısa) olduğunu . Bu nedenle, ikincinin bir parçası olmalı, eğer sarkan başka bir problem çözülürse.