рдЬрд╛рд╡рд╛ 12 рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рдЧрд╛рдЗрдб


рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ switch рдЬрд╛рд╡рд╛ рдореЗрдВ рдкрд╣рд▓реЗ рджрд┐рди рд╕реЗ рд╣реИред рд╣рдо рд╕рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рдХреНрд╡рд┐рд░рдХреНрд╕ред (рдХреНрдпрд╛ рдХрд┐рд╕реА рдФрд░ рдХреЛ break рдЧреБрд╕реНрд╕рд╛ рдЖрддрд╛ рд╣реИ?) рд▓реЗрдХрд┐рди рдЕрдм рд╕рдм рдХреБрдЫ рдмрджрд▓рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ: рдЬрд╛рд╡рд╛ 12 рдореЗрдВ, рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рд╕реНрд╡рд┐рдЪ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:


 boolean result = switch(ternaryBool) { case TRUE -> true; case FALSE -> false; case FILE_NOT_FOUND -> throw new UncheckedIOException( "This is ridiculous!", new FileNotFoundException()); // as we'll see in "Exhaustiveness", `default` is not necessary default -> throw new IllegalArgumentException("Seriously?!"); }; 

рд╕реНрд╡рд┐рдЪ рдореЗрдВ рдЕрдм рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдЖрдк рд▓реИрдореНрдмреНрдбрд╛-рд╢реИрд▓реА рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдЙрди рд╕рднреА case рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ case рд╣реИ рдЬрд┐рдирдореЗрдВ рдХреЛрдИ break рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдирд╣реАрдВ рд╣реИред


рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ 12 рдореЗрдВ рд╕реНрд╡рд┐рдЪ рднрд╛рд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред


рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдореАрдХреНрд╖рд╛


рднрд╛рд╖рд╛ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕реНрд╡рд┐рдЪ рднрд╛рд╡ рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ 12 рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╢реБрд░реВ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ ред


рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рдпрдВрддреНрд░рдг рдирд┐рд░реНрдорд╛рдг рднрд╛рд╖рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


switch рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ switch рдЖрдкрдХреЛ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рджреМрд░рд╛рди --release 12 --enable-preview рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЖрдкрдХреЛ рдЕрдиреБрд╡рд╛рджрдХ рджреНрд╡рд╛рд░рд╛ рдиреЛрдЯ рдХрд░рддреЗ рд╕рдордп --release 12 рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред


рддреЛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рд┐рдЪ , рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬрд╛рд╡рд╛ 12 рдореЗрдВ рдЕрдВрддрд┐рдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд╣реАрдВ рд╣реИред


рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рд╕рдм рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдЦреЗрд▓рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдЖрдк рдореЗрд░реЗ рдЬрд╛рд╡рд╛ рдПрдХреНрд╕ рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЬреАрдердм рдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред


рд╕реНрд╡рд┐рдЪ рдореЗрдВ рдмрдпрд╛рди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╕реНрд╡рд┐рдЪ рдореЗрдВ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рдЪрд▓реЛ рдПрдХ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдПрдХ "рднрдпрд╛рдирдХ" рдЯрд░реНрдирд░реА рдмреВрд▓рд┐рдпрди рд╕реЗ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд рдмреВрд▓рд┐рдпрди рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ:


 boolean result; switch(ternaryBool) { case TRUE: result = true; // don't forget to `break` or you're screwed! break; case FALSE: result = false; break; case FILE_NOT_FOUND: // intermediate variable for demo purposes; // wait for it... var ex = new UncheckedIOException("This is ridiculous!", new FileNotFoundException()); throw ex; default: // ... here we go: // can't declare another variable with the same name var ex2 = new IllegalArgumentException("Seriously?!"); throw ex2; } 

рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред "рдкреНрд░рдХреГрддрд┐" рдореЗрдВ рдкрд╛рдП рдЧрдП рдХрдИ рдЕрдиреНрдп рд╕реНрд╡рд┐рдЪ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддрд░рд╣, рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЗрд╡рд▓ рдПрдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ result рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ), рджреЛрд╣рд░рд╛рдпрд╛ (рдореЗрд░рд╛ break 'рдФрд░ рд╣рдореЗрд╢рд╛ рдХреЙрдкреА-рдкрд╛рд╕реНрддрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо) рдФрд░ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг (рджреВрд╕рд░реА рд╢рд╛рдЦрд╛ рдХреЛ рднреВрд▓ рдЧрдП? рдУрд╣!)ред рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рд╣реИред


рдЖрдЗрдП рд╕реНрд╡рд┐рдЪ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдореЗрдВ рд░рдЦрдХрд░ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:


 private static boolean toBoolean(Bool ternaryBool) { switch(ternaryBool) { case TRUE: return true; case FALSE: return false; case FILE_NOT_FOUND: throw new UncheckedIOException("This is ridiculous!", new FileNotFoundException()); // without default branch, the method wouldn't compile default: throw new IllegalArgumentException("Seriously?!"); } } 

рдпрд╣ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИ: рдХреЛрдИ рдбрдореА рдЪрд░ рдирд╣реАрдВ рд╣реИ, default рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдб рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ break рдирд╣реАрдВ рд╣реИрдВ (рднрд▓реЗ рд╣реА рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ)ред


рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЕрдЬреАрдм рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рддрд░реАрдХреЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рднреА рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдирд╣реАрдВ, рд╣рдореЗрдВ рдПрдХ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!


рдкреНрд░рд╕реНрддреБрдд рд╣реИ рд╕реНрд╡рд┐рдЪ рднрд╛рд╡!


рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛, рдЬрд╛рд╡рд╛ 12 рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рд╢реБрд░реБрдЖрдд, рдЖрдк рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 boolean result = switch(ternaryBool) { case TRUE -> true; case FALSE -> false; case FILE_NOT_FOUND -> throw new UncheckedIOException( "This is ridiculous!", new FileNotFoundException()); // as we'll see in "Exhaustiveness", `default` is not necessary default -> throw new IllegalArgumentException("Seriously?!"); }; 

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдпрджрд┐ ternartBool рд╣реИ, рддреЛ result ' true рд╕реЗрдЯ рд╣реЛрдЧрд╛ (рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, TRUE рдмрджрд▓ рдЬрд╛рддрд╛ true )ред FALSE рд╣реЛ рдЬрд╛рддрд╛ false ред


рджреЛ рд╡рд┐рдЪрд╛рд░ рддреБрд░рдВрдд рдЙрдарддреЗ рд╣реИрдВ:


  • switch рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ;
  • рддреАрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реИ?

рдирдП рд╕реНрд╡рд┐рдЪ рдлреАрдЪрд░реНрд╕ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рджреЗрд░реА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╢реБрд░реБрдЖрдд рдореЗрдВ рдореИрдВ рдЗрди рджреЛ рдореБрдЦреНрдп рдкрд╣рд▓реБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред


рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдпрд╛ рдХрдерди


рдЖрдкрдХреЛ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реНрд╡рд┐рдЪ рдЕрдм рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╣ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рдерд╛?


рдЬрд╛рд╡рд╛ 12 рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╕реНрд╡рд┐рдЪ рдПрдХ рдСрдкрд░реЗрдЯрд░ рдерд╛ - рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд┐рд░реНрдорд╛рдг рдЬреЛ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред


if рдФрд░ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред рд╡реЗ рджреЛрдиреЛрдВ рддрд╛рд░реНрдХрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВред


рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ if рдмрд╕ рдЗрд╕реА рдмреНрд▓реЙрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХреБрдЫ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ:


 if(condition) { result = doThis(); } else { result = doThat(); } result = condition ? doThis() : doThat(); 

рд╡рд╣реА рд╕реНрд╡рд┐рдЪ рдХреЗ рд▓рд┐рдП рд╣реИ : рдЬрд╛рд╡рд╛ 12 рд╕реЗ рдкрд╣рд▓реЗ, рдпрджрд┐ рдЖрдк рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрдЪрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рддреЛ рдЖрдк рдЗрд╕реЗ рдпрд╛ рддреЛ рдПрдХ рдЪрд░ (рдФрд░ рдлрд┐рд░ break ) рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВрдЧреЗ, рдпрд╛ рдЗрд╕реЗ switch рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╡рд┐рдзрд┐ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗред


рдЕрдм, рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рд╕рдВрдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рд╢рд╛рдЦрд╛ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдФрд░ рдЧрдгрдирд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдФрд░ рдХрдерди рдХреЗ рдмреАрдЪ рдПрдХ рдФрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдХреНрд▓рд╛рд╕рд┐рдХ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рддреАрд░ рдпрд╛ рдЙрдкрдирд┐рд╡реЗрд╢


рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рдЙрджрд╛рд╣рд░рдг рдиреЗ рд▓реЗрдмрд▓ рдФрд░ рд░рдирд┐рдВрдЧ рднрд╛рдЧ рдХреЗ рдмреАрдЪ рдПрдХ рддреАрд░ рдХреЗ рд╕рд╛рде рдирдП рд▓реИрдореНрдмреНрдбрд╛-рд╢реИрд▓реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ switch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:


 boolean result = switch(ternaryBool) { case TRUE: break true; case FALSE: break false; case FILE_NOT_FOUND: throw new UncheckedIOException( "This is ridiculous!", new FileNotFoundException()); default: throw new IllegalArgumentException("Seriously?!!?"); }; 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдм рдЖрдк рдПрдХ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде break рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреБрд░рд╛рдиреА рд╢реИрд▓реА рдХреЗ switch рд╕рд╛рде рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ рдЬреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрд░реНрде рдХреЗ break рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рддреЛ рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рддреАрд░ рдХрд╛ рдорддрд▓рдм рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ, рд╡рд╣ рдпрд╣рд╛рдВ рдХреНрдпреЛрдВ рд╣реИ? рдмрд╕ рд╣рд┐рдкреНрд╕реНрдЯрд░ рд╕рд┐рдВрдЯреЗрдХреНрд╕?


рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ, рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХреЗ рдирд┐рд╢рд╛рди рдХреЗрд╡рд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдмреНрд▓реЙрдХ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдмрд┐рдВрджреБ рд╕реЗ, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рднреА рдХреЛрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рддрдм рднреА рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдХреЛрдИ рдЕрдиреНрдп рд▓реЗрдмрд▓ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИред switch рд╣рдо рдЗрд╕реЗ рдЕрдЧрд▓реЗ case (рдлрд╝реЙрд▓-рдереНрд░реВ) рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ: case рд▓реЗрдмрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХрд╣рд╛рдВ рддрдХ тАЛтАЛрдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ break рдпрд╛ return рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдмрджрд▓реЗ рдореЗрдВ, рддреАрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рджрд╛рдИрдВ рдУрд░ рдХреЗрд╡рд▓ рдмреНрд▓реЙрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдирд╣реАрдВ "рд╡рд┐рдлрд▓"ред


рд╕реНрд╡рд┐рдЪ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдЕрдзрд┐рдХ


рдорд╛рдорд▓реЗ рдкрд░ рдХрдИ рдЯреИрдЧ


рдЕрдм рддрдХ, рдкреНрд░рддреНрдпреЗрдХ case рдХреЗрд╡рд▓ рдПрдХ рд▓реЗрдмрд▓ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдм рд╕рдм рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ - рдПрдХ case рдХрдИ рд▓реЗрдмрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:


 String result = switch(ternaryBool) { case TRUE, FALSE -> "sane"; // `default, case FILE_NOT_FOUND -> ...` does not work // (neither does other way around), but that makes // sense because using only `default` suffices default -> "insane"; }; 

рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: TRUE рдФрд░ FALSE рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ - рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "рд╕рдордЭ" рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдирд╡рд╛рдЪрд╛рд░ рд╣реИ рдЬрд┐рд╕рдиреЗ case рдХреЗ рдХрдИ рдЙрдкрдпреЛрдЧ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рдЬрдм рдЕрдЧрд▓реЗ case рдПрдХ рдкрд╛рд╕-рдереНрд░реВ рд╕рдВрдХреНрд░рдордг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред


Enum рдХреЗ рдмрд╛рд╣рд░ рдХреЗ рдкреНрд░рдХрд╛рд░


рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╕рднреА switch рдЙрджрд╛рд╣рд░рдг enum рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рдФрд░ switch String , int , ( рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ) short , byte , char рдФрд░ рдЙрдирдХреЗ рд░реИрдкрд░ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдЕрдм рддрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ float рдФрд░ long рдЬреИрд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЕрднреА рднреА рд╡реИрдз рд╣реИ (рджреВрд╕рд░реЗ рд╕реЗ рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдЧреНрд░рд╛рдл рддрдХ)ред


рддреАрд░ рдкрд░ рдЕрдзрд┐рдХ


рдЖрдЗрдП рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рддреАрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджреЛ рдЧреБрдгреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ:


  • рдЕрдЧрд▓реЗ case рд╕рдВрдХреНрд░рдордг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдореА;
  • рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдмреНрд▓реЙрдХред

рдЕрдЧрд▓реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкрд╛рд╕ рд╕реЗ рдирд╣реАрдВ


рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЗрдИрдкреА 325 рдХреНрдпрд╛ рдХрд╣рддрд╛ рд╣реИ:


рдЬрд╛рд╡рд╛ рдореЗрдВ switch рдХрд╛ рд╡рд░реНрддрдорд╛рди рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реА рдФрд░ рд╕реА ++ рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдВрдб-рдЯреВ-рдПрдВрдб рд╕реЗрдореЗрдВрдЯрд┐рдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рдпрд╣ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рдзрд┐ рдЕрдХреНрд╕рд░ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХреЛрдб (рдЬреИрд╕реЗ рдмрд╛рдЗрдирд░реА рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░) рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрддреА рд╣реИ, рдЪреВрдВрдХрд┐ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдХреЛрдб рдореЗрдВ switch рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЗрд╕рдХреЗ рд▓рдЪреАрд▓реЗрдкрди рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рд▓рдЧрддреА рд╣реИрдВред

рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд┐рдирд╛ рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВ:


 switch(ternaryBool) { case TRUE, FALSE -> System.out.println("Bool was sane"); // in colon-form, if `ternaryBool` is `TRUE` or `FALSE`, // we would see both messages; in arrow-form, only one // branch is executed default -> System.out.println("Bool was insane"); } 

рдпрд╣ рд╕реАрдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдпрд╛ рдХрдерди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдпрд╣рд╛рдВ рдирд┐рд░реНрдгрд╛рдпрдХ рдХрд╛рд░рдХ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рддреАрд░ рд╣реИред


рдСрдкрд░реЗрдЯрд░ рдмреНрд▓реЙрдХ


рд▓рдВрдмреЛрджрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рддреАрд░ рдПрдХ рдСрдкрд░реЗрдЯрд░ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░) рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдШреБрдорд╛рд╡рджрд╛рд░ рд▓рдЯреЛрдВ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:


 boolean result = switch(Bool.random()) { case TRUE -> { System.out.println("Bool true"); // return with `break`, not `return` break true; } case FALSE -> { System.out.println("Bool false"); break false; } case FILE_NOT_FOUND -> { var ex = new UncheckedIOException("This is ridiculous!", new FileNotFoundException()); throw ex; } default -> { var ex = new IllegalArgumentException("Seriously?!"); throw ex; } }; 

рдорд▓реНрдЯреА-рд▓рд╛рдЗрди рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рд╣реЛрддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ), рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рдЪрд░ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, switch рдХреЛ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред


рдпрджрд┐ рдЖрдкрдХреЛ return рдмрдЬрд╛рдп break рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд▓реЙрдХ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓рдЧрд╛, рддреЛ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ - рдЗрд╕рд╕реЗ рдореБрдЭреЗ рднреА рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдФрд░ рдпрд╣ рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдФрд░ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ switch рдирд┐рд░реНрдорд╛рдг рдХреА рдкреБрд░рд╛рдиреА рд╢реИрд▓реА рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде break рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред


рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ


рдФрд░ рдЕрдВрддрд┐рдо рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ switch рдХрд╛ рдЙрдкрдпреЛрдЧ switch рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ:


  • рдХрдИ рднрд╛рд╡;
  • рдЬрд▓реНрджреА рд╡рд╛рдкрд╕реА (рдЬрд▓реНрджреА return );
  • рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдХрд╡рд░реЗрдЬред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ!


рдПрдХрд╛рдзрд┐рдХ рднрд╛рд╡


рд╕реНрд╡рд┐рдЪ рднрд╛рд╡ рдХрдИ рднрд╛рд╡ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдРрд╕реЗ рднрд╛рд╡реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: s -> s + " " , Function<String, String> рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ Function<Serializable, Object> рдпрд╛ UnaryOperator<String> рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


рд╕реНрд╡рд┐рдЪ рдХреЗ рднрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдмрд╛рддрдЪреАрдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ред рдпрджрд┐ рдПрдХ рд╕реНрд╡рд┐рдЪ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдЕрдиреНрдпрдерд╛ рдПрдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕рдЯреАрдХ рдкреНрд░рдХрд╛рд░ рдЬреНрдЮрд╛рдд рд╣реЛрддрд╛ рд╣реИ (рдЗрд╕реЗ рд▓рдХреНрд╖реНрдп рдкреНрд░рдХрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ), рддреЛ рдЗрд╕рдХреА рд╕рднреА рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рд╣рдордиреЗ рдЕрднреА рддрдХ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИ:


 String result = switch (ternaryBool) { case TRUE, FALSE -> "sane"; default -> "insane"; }; 

рдирддреАрдЬрддрди, switch String рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ result рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, String рд▓рдХреНрд╖реНрдп рдкреНрд░рдХрд╛рд░ рд╣реИ, рдФрд░ рд╕рднреА рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ String рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рдпрд╣рд╛рдБ рднреА рд╡рд╣реА рд╣реЛрддрд╛ рд╣реИ:


 Serializable serializableMessage = switch (bool) { case TRUE, FALSE -> "sane"; // note that we don't throw the exception! // but it's `Serializable`, so it matches the target type default -> new IllegalArgumentException("insane"); }; 

рдЕрдм рдХреНрдпрд╛ рд╣реЛрдЧрд╛?


 // compiler infers super type of `String` and // `IllegalArgumentException` ~> `Serializable` var serializableMessage = switch (bool) { case TRUE, FALSE -> "sane"; // note that we don't throw the exception! default -> new IllegalArgumentException("insane"); }; 

(рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рдореЗрдВ var рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЕрдВрддрд┐рдо рд▓реЗрдЦ 26 рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдореЗрдВ рдкрдврд╝реЗрдВ - рдЕрдиреБрд╡рд╛рджрдХ рджреНрд╡рд╛рд░рд╛ рдиреЛрдЯ рдХрд░реЗрдВ)


рдпрджрд┐ рд▓рдХреНрд╖реНрдп рдкреНрд░рдХрд╛рд░ рдЕрдЬреНрдЮрд╛рдд рд╣реИ, рддреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╣рдо var рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рд╢рд╛рдЦрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рдмрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрдкрд░рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИред


рдЬрд▓реНрджреА рд▓реМрдЯрдирд╛


рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдФрд░ switch рдмреАрдЪ рдЕрдВрддрд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк switch рд╕реЗ рдмрд╛рд╣рд░ return рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 public String sanity(Bool ternaryBool) { switch (ternaryBool) { // `return` is only possible from block case TRUE, FALSE -> { return "sane"; } default -> { return "This is ridiculous!"; } }; } 

... рдЖрдк рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдВрджрд░ return рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ ...


 public String sanity(Bool ternaryBool) { String result = switch (ternaryBool) { // this does not compile - error: // "return outside of enclosing switch expression" case TRUE, FALSE -> { return "sane"; } default -> { return "This is ridiculous!"; } }; } 

рдЗрд╕рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдПрдХ рддреАрд░ рдпрд╛ рдПрдХ рдХреЛрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛


рдпрджрд┐ рдЖрдк рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ switch рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдХрд╡рд░ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдмреЗрд╢рдХ, рдЖрдк рдЧрд▓рддреА рд╕реЗ рдЗрд╕ case рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреЛрдб рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ - рдЖрдк, рдЖрдкрдХреЗ рдЖрдИрдбреАрдИ рдФрд░ рдЖрдкрдХреЗ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдг рдЗрд╕реЗ рдЕрдХреЗрд▓реЗ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред


рд╕реНрд╡рд┐рдЪ рдХреЗ рднрд╛рд╡ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрдврд╝рд╛ рджреЗрддреЗ рд╣реИрдВред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд▓реЗрдмрд▓ рдЧрд╛рдпрдм рд╣реИ, рддреЛ рд╕реНрд╡рд┐рдЪ рдХрд╣рд╛рдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдПрдХрдорд╛рддреНрд░ рдЙрддреНрддрд░ рдЬреЛ рдЬрд╛рд╡рд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╢рдХреНрддрддрд╛ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиред рдпрд╣ рдореБрдЦреНрдп рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред


рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП, рдХрдВрдкрд╛рдЗрд▓рд░ рдЬреЛрд░ рджреЗрдЧрд╛ рдХрд┐ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рдХрд╡рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ, рдЬрд┐рд╕рд╕реЗ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ:


 // compile error: // "the switch expression does not cover all possible input values" boolean result = switch (ternaryBool) { case TRUE -> true; // no case for `FALSE` case FILE_NOT_FOUND -> throw new UncheckedIOException( "This is ridiculous!", new FileNotFoundException()); }; 

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: default рд╢рд╛рдЦрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ - рдЖрдк рдЕрднреА рднреА FALSE рд▓рд┐рдП case рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред


 // compiles without `default` branch because // all cases for `ternaryBool` are covered boolean result = switch (ternaryBool) { case TRUE -> true; case FALSE -> false; case FILE_NOT_FOUND -> throw new UncheckedIOException( "This is ridiculous!", new FileNotFoundException()); }; 

рд╣рд╛рдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдВрдд рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╕рднреА рдПрдирдо рд╡реИрд▓реНрдпреВ рдХрд╡рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ (рдЪрд╛рд╣реЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВ), рдФрд░ рдмреЗрдХрд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рди рдХрд░реЗрдВ! рдПрдХ рдХреНрд╖рдг рдореМрди рдХреГрддрдЬреНрдЮрддрд╛ рдореЗрдВ рдмреИрда рдЬрд╛рддреЗ рд╣реИрдВред


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрднреА рднреА рдПрдХ рд╕рд╡рд╛рд▓ рдЙрдард╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХреЛрдИ рдПрдХ рдкрд╛рдЧрд▓ рдмреВрд▓ рдХреЛ рдЪрддреБрд░реНрде рдорд╛рди рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдЪрддреБрд░реНрднреБрдЬ рдмреВрд▓рд┐рдпрди рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ? рдпрджрд┐ рдЖрдк рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдмреВрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ , рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА (рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЕрдм рд╕рдВрдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ)ред рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рдПрдХ рд░рди-рдЯрд╛рдЗрдо рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдВрдкрд╛рдЗрд▓рд░ default рдмреНрд░рд╛рдВрдЪ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрд╕реА рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╣рдордиреЗ рдЕрднреА рддрдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛, рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддреЗ рд╣реБрдПред


рдЬрд╛рд╡рд╛ 12 рдореЗрдВ, default рд╢рд╛рдЦрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рднреА рдорд╛рдиреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗрд╡рд▓ enum рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЬрд╛рд╡рд╛ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ switch рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдордирдорд╛рдиреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ case рд▓реЗрдмрд▓ рди рдХреЗрд╡рд▓ рд╕рдорд╛рдирддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рддреБрд▓рдирд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, _ <5 -> ...) - рдпрд╣ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛ред


рд╕реЛрдЪ


рд╣рдордиреЗ рд▓реЗрдЦ рд╕реЗ рд╕реАрдЦрд╛ рдХрд┐ рдЬрд╛рд╡рд╛ 12 рдПрдХ switch рдХреЛ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдорд┐рд▓рддреА рд╣реИрдВ:


  • рдЕрдм рдПрдХ case рдХрдИ рд▓реЗрдмрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ;
  • рдирдпрд╛ рддреАрд░ рдлрд╝реЙрд░реНрдо case тАж -> тАж рд▓рдВрдмреЛрджрд░ рднрд╛рд╡реЛрдВ рдХреЗ рд╡рд╛рдХреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ:
    • рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди рдСрдкрд░реЗрдЯрд░ рдпрд╛ рдмреНрд▓реЙрдХ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ;
    • рдЕрдЧрд▓реЗ case рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд░реЛрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ;
  • рдЕрдм рдкреВрд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдПрдХ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдлрд┐рд░ рдПрдХ рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдПрдХ рдмрдбрд╝реЗ рдмрдпрд╛рди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;
  • рдПрдХрд╛рдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐: рдпрджрд┐ рд▓рдХреНрд╖реНрдп рдкреНрд░рдХрд╛рд░ рдЬреНрдЮрд╛рдд рд╣реИ, рддреЛ рд╕рднреА рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдЗрд╕рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╕рднреА рд╢рд╛рдЦрд╛рдУрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ;
  • break рдПрдХ рдореВрд▓реНрдп рдХреЛ рдПрдХ рдмреНрд▓реЙрдХ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ;
  • enum рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ switch рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдкрдиреЗ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЗ рджрд╛рдпрд░реЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ default рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ, рддреЛ рдПрдХ рд╢рд╛рдЦрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред

рдпрд╣ рд╣рдореЗрдВ рдХрд╣рд╛рдВ рд▓реЗ рдЬрд╛рдПрдЧрд╛? рдкрд╣рд▓рд╛, рдЪреВрдВрдХрд┐ рдпрд╣ switch рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдЪреАрдЬ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реИрдВ рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдореНрдмрд░ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред


рдлрд┐рд░, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╕реНрд╡рд┐рдЪ рдЗрд╕ рд╕рдордп рдЬреИрд╕рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреАрд░ рдХрд╛ рдЖрдХрд╛рд░ рдирдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдк рдмрди рдЬрд╛рдПрдЧрд╛ред рдЕрдЧрд▓реЗ case рд▓рд┐рдП рдПрдХ рдорд╛рд░реНрдЧ рдХреЗ рдмрд┐рдирд╛ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде (рдпрд╣ рдПрдХ рдХреЗрд╕ рдореЗрдВ рдПрдХ рдмрдпрд╛рди рдФрд░ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдмрд╣реБрдд рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ), switch рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрджрд┐ рдореИрдВ рдкрд╛рд╕ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдБрдЧрд╛ред


рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ? рдЪреАрдЬреЛрдВ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдХреИрд╕реЗ рдирд┐рдХрд▓рд╛?

Source: https://habr.com/ru/post/hi443464/


All Articles