2013-05-01 653 views
4

我想了解此代碼段:if語句沒有花括號後面會發生什麼?

class Worker 
{ 
    public bool DoThisJob(string job, int numberOfShifts) 
    { 
     if (!String.IsNullOrEmpty(currentJob)) 
      return false; 
     for (int i = 0; i < jobsICanDo.Length; i++) 
      if (jobsICanDo[i] == job) 
      { 
       currentJob = job; 
       this.shiftsToWork = numberOfShifts; 
       shiftsWorked = 0; 
       return true; 
      } 
     return false; 
    } 
} 

如果if語句有更多的代碼,然後一行(包括for環和兩個return S),爲什麼沒有有大括號?

+0

此,如果沒有代碼的多行。即使這樣做了,它仍然會返回。 – 2013-05-01 18:38:50

+4

我真的不明白爲什麼人們會低估這一點。 – Jonesopolis 2013-05-01 18:44:42

+0

@Jonesy:我是eather,當我認爲-4時,我投了贊成票?這是一個簡單的問題,但仍然有效。 – Cemafor 2013-05-01 19:24:53

回答

5

如果if語句的代碼

一個以上的線沒有。第一個if聲明的正文僅爲:return false;。其餘的部分是在if機構結束之後。

5

if語句只有一行代碼。底部return false;在if語句之外。

+3

這也是一個很好的例子,爲什麼很多人推薦你總是包含大括號,即使你的if語句只有一行代碼。 – 2013-05-01 18:45:50

+1

Nah。不必要。浪費時間添加未使用的大括號。我們一些懶惰的程序員討厭增加混亂。 – jacknad 2013-05-01 19:52:18

+0

@jacknad沒有大聲笑。即使是一行添加大括號也是不好的做法。至少在C#/ javascript世界中。我同意你在理論上的說法,但在其他開發人員觸及你的代碼的現實世界中(是的,他們也應該知道),這隻會增加更多的困惑。只需添加大括號即可。我甚至會說,如果你有一個if/else,那麼它們都有一行代碼,那麼這很好,但是如果你有一個if語句沒有curly和else,否則如果和他們在一起,看起來很混亂。 – jdmdevdotnet 2017-10-23 16:34:54

1

IF聲明不超過一行代碼。如果其他代碼針對的是IF語句,則它們從不執行,因爲代碼在IF之後的第一行始終返回false。

2

這是一樣的:

public bool DoThisJob(string job, int numberOfShifts) 
{ 
    if (!String.IsNullOrEmpty(currentJob)) 
    { 
     return false; 
    } 
    else 
    { 
     for (int i = 0; i < jobsICanDo.Length; i++) 
      if (jobsICanDo[i] == job) 
      { 
       currentJob = job; 
       this.shiftsToWork = numberOfShifts; 
       shiftsWorked = 0; 
       return true; 
      } 
     return false; 
    } 
} 

的其他簡單的心不是必要的,因爲它不會由於返回執行,如果IF語句評估爲真

+0

注意:該方法的其餘部分僅在else中,因爲第一個'if'將用'return false;'語句退出函數。否則,即使第一個「if」爲真,「for」循環仍然會被執行。 – Cemafor 2013-05-01 19:22:32

4

如果不是活得用If語句括住任何大括號,僅在If語句下考慮一個語句。

在這個例子中,只會執行一個語句:「return false;」

7

的代碼是相同的:

class Worker 
{ 
    public bool DoThisJob(string job, int numberOfShifts) 
    { 
     if (!String.IsNullOrEmpty(currentJob)) 
     { 
      return false; 
     } 
     for (int i = 0; i < jobsICanDo.Length; i++) 
     { 
      if (jobsICanDo[i] == job) 
      { 
       currentJob = job; 
       this.shiftsToWork = numberOfShifts; 
       shiftsWorked = 0; 
       return true; 
      } 
     } 
     return false; 
    } 
} 

只有下面的語句是如果在沒有大括號的一部分。對於for循環,if是下一個語句,因此所有內容都包含在內。

1

在C#中,花括號是可選的,但僅限於第一行代碼。

這意味着如果語句沒有大括號,只會在if條件(語句正文)之後的代碼行被執行。其他一切都不屬於聲明主體,因此不會被執行。

相同的作品與其他如:

if(SomeCompare()) 
return false; 
else 
return true;