рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред
рд╕рдордп-рд╕рдордп рдкрд░ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕реНрдХрд╛рд▓рд╛ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛, рд╕рд╡рд╛рд▓ "рдореМрдЬреВрджрд╛ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдХрд╛рд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ? рдХреНрдпрд╛ рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЬрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ? рдЗрд╕рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛? рдорд╛рд▓рд┐рдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рдордирд╛рдПрдБ? тАЭрд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдРрд╕рд╛ рд╕рдВрдХреНрд░рдордг рд╣реБрдЖ, рдЖрдЬ рд▓рдЧрднрдЧ рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡реНрдпрдВрдЬрдиреЛрдВ рдФрд░ рдЫрд╛рдкреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ, рдпрд╣ "рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?"
- рдореИрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХреБрдЫ рдирдпрд╛ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛;
- рдореИрдВ рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрдИ рдкрддреНрд░ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдердХ рдЧрдпрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдм рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛, рдкрд╛рдпрдерди рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ;
рдЗрди рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╡рд┐рдХрд▓реНрдк JVM- рдЖрдзрд╛рд░рд┐рдд рднрд╛рд╖рд╛рдУрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ред
рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж, рд╣рдо рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рд░реБрдХ рдЧрдПред рдореБрдЭреЗ рдХреЙрдореНрдкреИрдХреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕, рдордЬрдмреВрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ, рдУрдУ-рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЬрд╛рд╡рд╛-рдХреЛрдб рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рдмрд╛рддрдЪреАрдд рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИред рдпрд╣ рддрдереНрдп рдХрд┐ рд╕реНрдХрд╛рд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯреНрд╡рд┐рдЯрд░, рд▓рд┐рдВрдХреНрдбрдЗрди, рдлреЛрд░рд╕реНрдХреНрд╡реЗрдпрд░ рдФрд░ рдЬреИрд╕реА рдмрдбрд╝реА рдХрдВрдкрдирд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдиреЗ рднрд╛рд╖рд╛ рдХреЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред
рдЬреЗрд╡рдиреАрдд рдкрд░ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдорд╛рд╡реЗрди рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдереА, рдЗрд╕рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪреЗ рдХреЗ рдЕрдиреБрдХреВрд▓ рд▓рд╛рдЧрддреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдХрд╛рд▓рд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛ред
рддреЛ, рдХреНрд░рдо рдореЗрдВред
рдЗрд╕рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛?
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдзрд╛рд░рдгрд╛ рдЬреЛ рд╕рдВрджреЗрд╣ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ - рд╕реНрдХрд╛рд▓рд╛ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдФрд░
рдзреАрд░реЗ-рдзреАрд░реЗ рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛
рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ ред рдкрд╣рд▓реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдереЛрдбрд╝рд╛ рд╕рдордп рдмреАрдд рдЬрд╛рдПрдЧрд╛, рдореИрдВ рдПрдХ рдпрд╛ рджреЛ рджрд┐рди рдХрд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рддреЛ рдпрд╣ рд╕рд┐рд░реНрдл "рдЬрд╛рд╡рд╛ рд╡рд┐рдж рд╡реИрд▓ рдФрд░ рдиреЛ рд╕реЗрдореАрдХреЛрд▓рди" рд╣реЛ рд╕рдХрддрд╛ рдерд╛ред рд╕рдордп рдмреАрдд рдЬрд╛рдПрдЧрд╛, рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдЖрдк рдЕрдЪрд╛рдирдХ рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдЕрд╕рдВрдЧрдд рдмреЛрдирд╕ рддрд░реАрдХреЛрдВ (рд╣реИрд▓реЛ рдирд┐рд╣рд┐рдд) рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкрд╛рдПрдВрдЧреЗ, рдлрд╝рдВрдХреНрд╢рди, рдХреНрд▓реЛрдЬрд░, рдХреЗрд╕-рдХреНрд▓рд╛рд╕, рдкреИрдЯрд░реНрди-рдорд┐рд▓рд╛рди, рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдЗрддрдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗ ... рдпрд╣ рдИрдорд╛рдирджрд╛рд░ рд╣реИ, рдзреАрд░реЗ-рдзреАрд░реЗ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рд░реБрдХрд╛рд╡рдЯ рдХреЗред рд░реЛрдЬрдорд░реНрд░рд╛ рдХрд╛ рдХрд╛рдоред
рдореМрдЬреВрджрд╛ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдХрд╛рд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдорд╛рддрд╛-рдкрд┐рддрд╛ pom.xml рдореЗрдВ рд╕реНрдХрд╛рд▓рд╛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВ:
<project> ... <properties> <version-scala>2.10.3</version-scala> </properties> <dependencies> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>${version-scala}</version> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.1.6</version> <configuration> <scalaVersion>${version-scala}</scalaVersion> <args> <arg>-deprecation</arg> <arg>-explaintypes</arg> <arg>-feature</arg> <arg>-optimise</arg> <arg>-unchecked</arg> </args> </configuration> <executions> <execution> <id>scala-compile</id> <phase>process-resources</phase> <goals> <goal>add-source</goal> <goal>compile</goal> </goals> </execution> <execution> <id>scala-compile-tests</id> <phase>process-test-resources</phase> <goals> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ ... рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред
рдЕрдм mvan
mvn compile
рд╕рднреА ssc / main / scala рдореЗрдВ рд╕реНрдерд┐рдд .scala рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдПрдХрддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ (рд╣рд╛рд▓рд╛рдБрдХрд┐, src / main / java рдореЗрдВ рд╕реНрдерд┐рдд рд▓реЛрдЧреЛрдВ рдХреЛ рднреА рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рдЖрдк рд╕реНрдХреЗрд▓ рдореЗрдВ JUnit рдкрд░реАрдХреНрд╖рдг рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░
mvn test
рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдиреЛрдЯ:
mvn test
рдХреЗрд╡рд▓ рдЙрди .scala рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдЧрд╛ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ рдЬреЛ src / test / scala рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИрдВ,
рдЕрдиреНрдпрдерд╛ рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рдЗрд╕рд▓рд┐рдП, рддреБрд░рдВрдд рдЕрдкрдиреЗ .scala рдХреЛ src / (main | test) / scala / рдореЗрдВ рдбрд╛рд▓реЗрдВред рдЧреНрд░реИрдбрд▓ рдХреЗ рд▓рд┐рдП, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд╕реНрдХрд╛рд▓рд╛ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрд╕рдмреАрдЯреА (рд╕рд┐рдВрдкрд▓ рдмрд┐рд▓реНрдб рдЯреВрд▓, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЧреНрд░реЗрдбрд▓ рдХреА рддрд░рд╣, рдХреЗрд╡рд▓ рд╕реНрдХрд╛рд▓рд╛ рдкрд░) рд╕реНрдХрд╛рд▓рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рдмрди рдЧрдпрд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ SBT рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛ рдЬрдм рдЖрдкрдХреЛ ScalaTest, ScalaCheck, Specs рдЗрддреНрдпрд╛рджрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ SBT рдЙрдирдХреЗ рд╕рд╛рде рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдЙрдиреНрд╣реЗрдВ рдЖрдк рдкрд░ рдереЛрдкрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдордиреЗ рдПрд╕рдмреАрдЯреА рдкрд░ рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдлрд╛рдпрджреЗ рдЕрднреА рддрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдЙрдирдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╣рд┐рд▓рд╛ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝реЗ рд╣реИрдВред
IDE рдХреЗ рд▓рд┐рдП, рд╣рдо IntelliJ IDEA рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдореЗрдВ рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕реНрдХрд╛рд▓рд╛ рд╕рдорд░реНрдерди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (рдлрд╝рд╛рдЗрд▓ тЖТ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ тЖТ рдкреНрд▓рдЧрдЗрдиреНрд╕ тЖТ рдЪреЗрдХ рд╕реНрдХрд╛рд▓рд╛)ред рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкреЛрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╕реНрдХреИрд▓рд╛ рдкрд╣рд▓реВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдорд╛рд╡реЗрди рдХреЗ рдмрд┐рдирд╛ рдЦреБрдж рд╣реА рдЖрдИрдбрд┐рдпрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдЬрд╛рд╡рд╛ рд╕реЗ рд╕реНрдХреЗрд▓ рддрдХ рдХреБрдЫ рд╡рд░реНрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ IDEA рдореЗрдВ .java рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрдиреВ рдореЗрдВ, "рдХрдиреНрд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП" рд╕реНрдХреЗрд▓ рдЖрдЗрдЯрдо рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдпрд╛ рдмрд╕ .java рдЦреЛрд▓рдиреЗ рдФрд░ Ctrl-Shift-G рджрдмрд╛рдХрд░ред рдЬрд╛рд╡рд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрдерд╛рд╡рдд рд░рд╣реЗрдЧрд╛, рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдФрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдлрд┐рд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдЧреНрд░рд╣рдг рдХреЗ рд▓рд┐рдП, рдПрдХ
рд╕рдВрдЧрдд рдкреНрд▓рдЧрдЗрди рд╣реИ ред
рдХреНрдпрд╛ рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЬрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ?
рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдЙрддреНрддрд░ "рдирд╣реАрдВ" рдерд╛, рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрдард┐рдирд╛рдИ рдХреЗ:
for(;;)
рдФрд░ break
рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдорджреНрджреЗрдирдЬрд░ break
рдХреБрдЫ рдЬрдЯрд┐рд▓ рдЫреЛрд░реЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХреЗрд╡рд▓ рд▓рд╛рдн рд╣реБрдЖ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХреНрд▓реАрдирд░ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ред break
рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ scala.util.control.Breaks
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЖрд╡рдЬрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;- рдХрднреА-рдХрднреА рд╕реНрдХреЗрд▓рд╛ рдореЗрдВ рд╕рдореГрджреНрдз рдкреНрд░рдХрд╛рд░-рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдорджреНрджреЗрдирдЬрд░ рдЬрд╛рд╡рд╛ рд╕реЗ рд╕реНрдХрд╛рд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдерд╛, рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╕реНрдХрд╛рд▓рд╛ рд▓рдХреНрд╖рдг рдХреЗ рдЬрд╛рд╡рд╛ рдПрдирд╛рд▓реЙрдЧреНрд╕ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐, рдпрд╛ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ (рд╕реНрдХрд╛рд▓рд╛ рдХреЛрдб рдореЗрдВ, рд╕рдВрдХрд▓рдХ рдПрдХ рдкрдХреНрд╖рдкрд╛рддрдкреВрд░реНрдг рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдк рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЛ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВрдЧреЗ рджреЗрдЦреЗрдВ,
@throws[SomeException]
рдореЗрдВ рдПрдХ рдПрдиреЛрдЯреЗрд╢рди @throws[SomeException]
, рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ @throws[SomeException]
рд╕рд╛рде рдмрд╛рдЗрдЯрдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ); - рдХрд╛рдлреА рдЬрдЯрд┐рд▓рддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рд╣реИ (рдЬрд╛рд╡рд╛ 7 рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП), рдЬреЛ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЛрдг рдкреИрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдкреНрд░рдкрддреНрд░ рдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди ...
рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрдк рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
package ru.habrahabr.hello ... val maybeSomeResult = using (Files.newBufferedReader(тАж)) { reader =>
рдЕрдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдордирд╛рдПрдВ?
рдореИрдВ рд╕реНрдХрд╛рд▓рд╛ рдХреЛ рдЧрд╛рдиреЗ рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ, рдореИрдВ рдХреЗрд╡рд▓ рдкреНрд░рд╛рдкреНрдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рднрд╛рдВрд╢ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдБрдЧрд╛:
- рдХрд╛рдлреА рдХрдо рдЕрдХреНрд╖рд░ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдХреБрдЫ рддреНрд╡рд░рд┐рдд рдореЛрдбрд╝ рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░реВрдкрд╛рдВрддрд░рдг рдиреЗ рднреА рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ 25% рдХреА рдФрд╕рдд рд╕реЗ рдХрдореА рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ 37 рд╣рдЬрд╛рд░ рдореЗрдВ рд╕реЗ рд▓рдЧрднрдЧ 9 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рдЦреЛ рдЧрдИрдВред рдпреЗ рд░реЗрдЦрд╛рдПрдБ рд╣реИрдВ, рдЕрдХреНрд╖рд░ рд╕реНрд╡рдпрдВ рднреА рдЫреЛрдЯреЗ рд╣реЛ рдЧрдП рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХрдо рдкрддреНрд░реЛрдВ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рддреЗрдЬреА рд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╛рддреЗ рд╣реИрдВред рдПрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рдХрдХреНрд╖рд╛рдПрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЖрдорддреМрд░ рдкрд░ рдкрд╣рд▓реЗ рдЫрдд рдХреЛ рдЙрдбрд╝рд╛ рджреЗрддреА рд╣реИ;
- рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдореГрджреНрдз рд╕рдВрдЧреНрд░рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдиреЗ рд▓реВрдк рдХреЗ рд╕рд╛рде рдирд┐рдпрдорд┐рдд рдХрд╛рдо рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЛ рдмрдЪрд╛рдпрд╛ред рдпреЗ рд╕рднреА рдорд╛рдирдЪрд┐рддреНрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдлреЛрд░реНрд▓ рдореЗрдВ рдореМрдЬреВрдж рдорд┐рди рдкрд╛рд░реНрд╕ рдЖрджрд┐ рд╣реИрдВред рдЖрджрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╡рд╛рдкрд╕реА рдХреЗ рд╕рдВрдХреЗрдд рдмрд╕ рдорд╛рд░реЗ рдЬрд╛рддреЗ рд╣реИрдВ (рдХреЗрд╡рд▓ рдмрд░рд╛рдмрд░ рдореВрд▓реНрдп рдХреНрдпрд╛ рд╣реИ)ред рдпрд╣ рд╕рднреА рдзрди рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрдЧреНрд░рд╣реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рд┐рдд рд╣реИ, рдЬреЛ рдХрд┐
Iterable
рдореЗрдВ рдХрдореА рд╣реИ (рдЬрд┐рд╕рдореЗрдВ Iterable
рдХреЛрдИ рдЖрдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, Collection
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ, Collections.unmodifiableтАж
рдХреЗрд╡рд▓ рдореВрд░реНрдЦ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рджреБрд░реБрдкрдпреЛрдЧ рд╕реЗ рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЦрд╛рддрд┐рд░ рдпрд╣ рд╕реНрдХрд╛рд▓рд╛ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреЗрдбреАрдХреЗ рдореЗрдВ рдЙрддреНрдкрд╛рджрдХ рд╕рдорд╡рд░реНрддреА рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдЪрдпрди рд╣реИ); - рдХреЛрдб рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрдврд╝ рдЧрдИ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдХреНрд╕рд░ рд╣рдо
Option[T]
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд╢рдХреНрдд рдЬрд╛рдВрдЪ (рд░реАрдб, рд╕рдВрдмрдВрдзрд┐рдд рдмрдЧ) рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ; - рдЙрдЪреНрдЪ рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдп рдФрд░ рд╕реНрдХрд╛рд▓рд╛ рдХреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдлрд┐рд░ рд╕реЗ рдЖрдкрдХреЛ рдЫреЛрдЯреЗ, рдЕрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдФрд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ (рдЬрд╛рд╡рд╛ 8 рдореЗрдВ, рд▓реИрдореНрдмреНрдбрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕рд╛рдВрддреНрд╡рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЕрднреА рднреА рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛);
- рдореЙрдбрд░реЗрд╢рди рдореЗрдВ рдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдиреЗ рд╣рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд░реИрдкрд┐рдВрдЧ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА;
==
рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдпрд╣ рдЬрд╛рд╡рд╛ рдореЗрдВ Objects.equals(o1, o2)
рддрд░рд╣ рд╣реИ, рд▓рд┐рдВрдХ рдХреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддреБрд▓рдирд╛ рдХреЛ рдЕрд▓рд╡рд┐рджрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрджрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рд╡рд╣рд╛рдБ eq
рдФрд░ neq
);- рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рдмрд╛рддрдЪреАрдд рд╕реНрдХрд╛рд▓рд╛ рдбрд┐рдЬрд╛рдЗрди рдХреА рдиреАрдВрд╡ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЬрд╛рд╡рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ (рд╕реНрдкреНрд░рд┐рдВрдЧ, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ, рдЖрджрд┐) рдХрд╛ рдПрдХреАрдХрд░рдг рдмрд╣реБрдд рджрд░реНрдж рд░рд╣рд┐рдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
@BeanProperty
рддрд░рд╣ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдХрд▓рдХ рдХреЛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рдмреАрди рд╢реИрд▓реА рдореЗрдВ @BeanProperty
рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред
рд╕реНрдХрд╛рд▓рд╛ рдХреЗ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкреВрд░реА рдЯреАрдо рдХреЛ рд╕реАрдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЕрдЪрд╛рдирдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдЯреАрдо рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЯреАрдо рдХреЛ рдЕрднреА рднреА рдирдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЬрд▓реНрджреА рд╕рд┐рдЦрд╛рдиреЗ рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдЕрдиреБрднрд╡ рд╣реЛрдЧрд╛ред
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдпрджрд┐ рд╣рдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ "рдХрдо рдЕрдХреНрд╖рд░ - рдХрдо рдХреАрдбрд╝реЗ - рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХрддрд╛"ред
рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЗ рдмрд╛рдж рд╕реЗ, рдирдпрд╛ рдЬрд╛рд╡рд╛ рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд░рд┐рдЯрд░реНрди рдХреЗ рдПрдХ рдмрд┐рдВрджреБ рдерд╛ред
рдореИрдВ рдЦреБрдж рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ (рд╡рд░рд┐рд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, "рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреИрд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ")ред
рдкреБрдирд╢реНрдЪ: рдПрдХ рд░рд╛рдп рд╣реИ рдХрд┐ рд╕реНрдХрд╛рд▓рд╛ рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ (
рд╣рдмреНрд░рд╣реЗ рдкрд░ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП
habrahabr.ru/post/134897 рджреЗрдЦреЗрдВ) рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдПрдХ рдЗрдирдкреБрдЯ рдереНрд░реЗрд╢реЛрд▓реНрдб рд╣реИ рдЬреЛ рдЫреЛрдЯрд╛ рд╣реИ, рднрд╛рд╖рд╛ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╕рд┐рд░ рдкреВрд▓ рдореЗрдВ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлреЗрдВрдХрдиреЗ рдирд╣реАрдВ рджреЗрддреА рд╣реИред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд▓рд╛рдн рд▓рд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧреА рд╕рдВрд╕рд╛рдзрди: