рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬрд╛рд╡рд╛ рд╕реЗ рд╕реНрдХрд╛рд▓рд╛ рддрдХ рдХреИрд╕реЗ рдЬрд╛рдПрдВ

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред
рд╕рдордп-рд╕рдордп рдкрд░ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕реНрдХрд╛рд▓рд╛ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛, рд╕рд╡рд╛рд▓ "рдореМрдЬреВрджрд╛ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдХрд╛рд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ? рдХреНрдпрд╛ рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЬрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ? рдЗрд╕рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛? рдорд╛рд▓рд┐рдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рдордирд╛рдПрдБ? тАЭрд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдРрд╕рд╛ рд╕рдВрдХреНрд░рдордг рд╣реБрдЖ, рдЖрдЬ рд▓рдЧрднрдЧ рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡реНрдпрдВрдЬрдиреЛрдВ рдФрд░ рдЫрд╛рдкреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред

рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ, рдпрд╣ "рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?"
  1. рдореИрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХреБрдЫ рдирдпрд╛ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛;
  2. рдореИрдВ рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрдИ рдкрддреНрд░ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдердХ рдЧрдпрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдм рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛, рдкрд╛рдпрдерди рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ;

рдЗрди рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╡рд┐рдХрд▓реНрдк 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 рджрдмрд╛рдХрд░ред рдЬрд╛рд╡рд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрдерд╛рд╡рдд рд░рд╣реЗрдЧрд╛, рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдФрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдлрд┐рд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдЧреНрд░рд╣рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрдЧрдд рдкреНрд▓рдЧрдЗрди рд╣реИ ред

рдХреНрдпрд╛ рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЬрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ?


рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдЙрддреНрддрд░ "рдирд╣реАрдВ" рдерд╛, рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрдард┐рдирд╛рдИ рдХреЗ:

 //        ru.blablablaтАж,    ┬л ┬╗     ru package object ru { //      http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20.3.1 //   [A <: AutoCloseable]  [A <: { def close() }],         close,     def using[A <: AutoCloseable, R](resource: A)(block: A => R): R = { var primary: Throwable = null try { block(resource) } catch { case ex: Throwable => primary = ex // to allow suppresing throw ex } finally if (resource ne null) { if (primary eq null) { resource.close() } else try { resource.close() } catch { case ex: Throwable => primary.addSuppressed(ex) } } } } 

рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрдк рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
 package ru.habrahabr.hello ... val maybeSomeResult = using (Files.newBufferedReader(тАж)) { reader => // use reader and maybe return some result } ... 

рдЕрдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдордирд╛рдПрдВ?


рдореИрдВ рд╕реНрдХрд╛рд▓рд╛ рдХреЛ рдЧрд╛рдиреЗ рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ, рдореИрдВ рдХреЗрд╡рд▓ рдкреНрд░рд╛рдкреНрдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рднрд╛рдВрд╢ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдБрдЧрд╛:

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

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

рдкреБрдирд╢реНрдЪ: рдПрдХ рд░рд╛рдп рд╣реИ рдХрд┐ рд╕реНрдХрд╛рд▓рд╛ рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ ( рд╣рдмреНрд░рд╣реЗ рдкрд░ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП habrahabr.ru/post/134897 рджреЗрдЦреЗрдВ) рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдПрдХ рдЗрдирдкреБрдЯ рдереНрд░реЗрд╢реЛрд▓реНрдб рд╣реИ рдЬреЛ рдЫреЛрдЯрд╛ рд╣реИ, рднрд╛рд╖рд╛ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╕рд┐рд░ рдкреВрд▓ рдореЗрдВ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлреЗрдВрдХрдиреЗ рдирд╣реАрдВ рджреЗрддреА рд╣реИред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд▓рд╛рдн рд▓рд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧреА рд╕рдВрд╕рд╛рдзрди:

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


All Articles