рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд░реВрдкрд╛рдВрддрд░рдг

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


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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдлреНрд▓реЛрдЯ рд╕реЗ рдЗрдВрдЯ (рдлреНрд▓реЛрдЯрдЯрд╛рдЗрдВрдЯ) рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдирд┐рд╣рд┐рдд рдХрд░реЗрдЧрд╛:

def double(value: Int) = value * 2 implicit def FloatToInt(value: Float):Int = value.toInt println(double(2.5F)) 

рднреНрд░рдорд┐рдд? рдЪрд▓реЛ рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИред

рддреЛ, рдЖрдЬ рд╣рдо рджреЛ рдирд┐рд╣рд┐рдд рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН:

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

рдЗрдореНрдкреНрд▓рд┐рдореЗрдВрдЯ рдкреИрд░рд╛рдореАрдЯрд░


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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рджреЛрдЧреБрдирд╛ рдХрд░рддрд╛ рд╣реИ:

 def double(implicit value: Int) = value * 2 

рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛:

 def double(implicit value: Int) = value * 2 println(double) // error: could not find implicit value for parameter value 

рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛:

 def double(implicit value: Int) = value * 2 println(double(3)) // 6 

рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 def double(implicit value: Int) = value * 2 implicit val multiplier = 2 println(double) // 4 

рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ:

 def double(implicit value: Int) = value * 2 implicit val multiplier = 2 implicit val multiplier2 = 1 println(double) // error: ambiguous implicit values 

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕рд┐рдВрдЧ рдбрд┐рдл рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг:

 def double(implicit value: Int) = value * 2 val cappucinoLarge: Boolean = false implicit def cappucinoPrice: Int = if (cappucinoLarge) 200 else 100 println(double) // 200 

рдпрд╛рдиреА рдЕрдВрдд рдореЗрдВ рд╣рдо рд╕рдлрд▓ рд╣реЛрдВрдЧреЗ
 double(cappucinoPrice()) 

рд╕рд┐рдВрдЯреИрдХреНрд╕ рдиреЛрдЯреНрд╕:

 def func1(implicit value1: Int) // value1  def func2(implicit value1: Int, value2: Int) // value1  value2  def func3(value1: Int, implicit value2: Int) //   def func4(value1: Int)(implicit value2: Int) //  value2  def func5(implicit value1: Int)(value2: Int) //   def func6(implicit value1: Int)(implicit value2: Int) //   

рдирд┐рд╖реНрдкреНрд░рд╛рдг рд░реВрдкрд╛рдВрддрд░рдг


рдлреНрд▓реЛрдЯ рд╕реЗ рдЗрдВрдЯ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд▓реМрдЯрдирд╛:

 def double(value: Int) = value * 2 implicit def FloatToInt(value: Float):Int = value.toInt println(double(2.5F)) 

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

рдЕрдм, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╕реНрдХрд╛рд▓рд╛ рдХреЛ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╛рд░реА рд╕рдлрд▓рддрд╛!

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


All Articles