Swift-style-guide: рдЕрдЧрд░ рдмрдирд╛рдо рдЧрд╛рд░реНрдб

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдЕрдХреНрддреВре░ 2018  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: raywenderlich/swift-style-guide

рд╡рд░реНрддрдорд╛рди рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб guard рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп if рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм if guard рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрд░реНрдл рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╡реИрдХрд▓реНрдкрд┐рдХреЛрдВ рдХреЛ рдЦреЛрд▓рдирд╛ рдирд╣реАрдВ рд╣реИ:

рдкрд╕рдВрджреАрджрд╛:

if !success { return false }

рдкрд╕рдВрджреАрджрд╛ рдирд╣реАрдВ:

guard success else { return false }

рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://www.natashatherobot.com/swift-when-to-use-guard-vs-if/

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рд▓рдЧрднрдЧ рдпрд╣реА рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдлреЗрд▓рд┐рдВрдЧ рдЧрд╛рд░реНрдбреНрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИ:
Guard statements are required to exit in some way.

...рдпрд╛ рдирддрд╛рд╢рд╛ рдХреЗ рдмреНрд▓реЙрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░:
think of guard as a lightweight Assert

рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

guard success else { return false }

рдпрд╣рд╛рдВ guard рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг:

// This compiles fine and a bug risks going unnoticed
if !success {
  // Some code here
  // Forgot the return statement
}

// Compiler error, you are required to return and the bug is prevented
guard success else {
  // Some code here
  // Forgot the return statement
}

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рд▓рдЧрднрдЧ рдпрд╣реА рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдлреЗрд▓рд┐рдВрдЧ рдЧрд╛рд░реНрдбреНрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИ:
Guard statements are required to exit in some way.

...рдпрд╛ рдирддрд╛рд╢рд╛ рдХреЗ рдмреНрд▓реЙрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░:
think of guard as a lightweight Assert

рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

guard success else { return false }

рдпрд╣рд╛рдВ guard рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг:

// This compiles fine and a bug risks going unnoticed
if !success {
  // Some code here
  // Forgot the return statement
}

// Compiler error, you are required to return and the bug is prevented
guard success else {
  // Some code here
  // Forgot the return statement
}

@RobertGummesson рддреЛ рдЖрдкрдХреЗ рдЕрдВрдЧреВрдареЗ рдХрд╛ рдирд┐рдпрдо рдпрд╣ рд╣реЛрдЧрд╛ - рднрд▓реЗ рд╣реА рдЖрдкрдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ - рдпрджрд┐ рдЖрдк рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдЖрдк guard рд╕реЗ рдЕрдзрд┐рдХ if рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╕рд╣реА?

@agirault - рд╣рд╛рдБ, рдпрд╛ рддреЛ рд╡рд╣ рдпрд╛ рдЖрдкрдХреЛ рдмрд╕ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЪрд╛рд╣реЗ рд╡рд╣ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рдпрд╛ рдирд╣реАрдВ)ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

sima-11 picture sima-11  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

designatednerd picture designatednerd  ┬╖  22рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  26рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

samkim102 picture samkim102  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gokselkoksal picture gokselkoksal  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ