เดฎเดพเดทเต เดธเตเดตเดฏเด‚ เดธเดฎเดพเดนเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเดฏเดพเดฃเต

เดฎเดพเดทเต เดธเตเดตเดฏเด‚ เดธเดฎเดพเดนเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเดฏเดพเดฃเต

2020เดฒเต† เดชเตเดคเตเดตเตผเดทเดคเตเดคเดฟเตฝ เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เด†เดถเด‚เดธเด•เตพ.

เด†เดฆเตเดฏ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฃเด‚ เดฎเตเดคเตฝ เดจเต‡เดพเดฎเตเดชเต เดฎเดพเดทเดฟเดจเต† เด•เตเดฑเดฟเดšเตเดšเต เดเด•เดฆเต‡เดถเด‚ เด•เตƒเดคเตเดฏเด‚ 1 เดตเตผเดทเด‚ เด•เดดเดฟเดžเตเดžเต.

เดˆ เดตเตผเดทเด‚, เดญเดพเดท เดตเดณเดฐเต†เดฏเดงเดฟเด•เด‚ เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเดฟ, เด…เดคเดฟเดจเตเดฑเต† เดชเดฒ เดตเดถเด™เตเด™เดณเตเด‚ เดšเดฟเดจเตเดคเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเตเดฑเต† เดตเต†เด•เตเดฑเตเดฑเตผ เดจเดฟเตผเดฃเตเดฃเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต.

เด‡เดคเต†เดฒเตเดฒเดพเด‚ เดธเดฎเต‚เดนเดตเตเดฎเดพเดฏเดฟ เดชเด™เตเด•เตเดตเต†เด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดธเดจเตเดคเต‹เดทเดฎเตเดฃเตเดŸเต.

เดจเดฟเดฐเดพเด•เดฐเดฃเด‚

เดˆ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด‰เดคเตเดธเดพเดนเดคเตเดคเดฟเตฝ เดฎเดพเดคเตเดฐเด‚ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดšเต†เดŸเตเด•เตเด•เตเดจเตเดจเต, เดกเตˆเดจเดพเดฎเดฟเด•เต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเด•เดณเตเดŸเต† เดฎเต‡เด–เดฒเดฏเดฟเตฝ เดฒเต‹เด• เด†เดงเดฟเดชเดคเตเดฏเด‚ เดจเดŸเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ!

เดˆ เดตเดฟเด•เดธเดจเด‚ เดชเดฐเดฟเดถเตเดฐเดฎเดฟเด•เตเด•เต‡เดฃเตเดŸ เด’เดฐเต เดฎเดพเดจเดฆเดฃเตเดกเดฎเดพเดฏเดฟ เด•เดฃเด•เตเด•เดพเด•เตเด•เดฐเตเดคเต; เดชเดฆเตเดงเดคเดฟ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดฒเตเดฒ, เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚ เด…เดคเต เดตเดฟเด•เดธเดฟเดšเตเดšเตเด•เตŠเดฃเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดธเดพเดฎเต‚เดนเดฟเด•เด‚
เดตเต†เดฌเตเดธเตˆเดฑเตเดฑเต
เดซเต‡เดพเดฑเด‚

เดชเตเดคเดฟเดฏ เด•เดฎเตเดชเตˆเดฒเตผ

เดชเตเดฐเตŠเดœเด•เตเดฑเตเดฑเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเตเดŸเต† /mashc เดฌเตเดฐเดพเดžเตเดšเดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดฎเตเดชเตˆเดฒเดฑเดฟเดจเตเดฑเต† เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเต เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚, เด…เดคเต เดฎเดพเดทเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต (เดญเดพเดทเดฏเตเดŸเต† เด†เดฆเตเดฏ เดชเดคเดฟเดชเตเดชเต).

เด•เด‚เดชเตˆเดฒเดฑเดฟเดจเต asm เดฒเดฟเดธเตเดฑเตเดฑเดฟเด‚เด—เดฟเตฝ เด’เดฐเต เด•เต‹เดกเต เดœเดจเดฑเต‡เดฑเตเดฑเตผ เด‰เดฃเตเดŸเต (เด’เดฐเต เดธเตเดฑเตเดฑเดพเด•เตเด•เต เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ VM-เดจเตเดณเตเดณ เด…เดธเด‚เดฌเตเดฒเดฑเดฟเดจเต).
เดจเดฟเดฒเดตเดฟเตฝ เดžเดพเตป เดœเดพเดตเดฏเตโ€Œเด•เตเด•เดพเดฏเตเดณเตเดณ เดœเดจเดฑเต‡เดฑเตเดฑเดฑเดฟเดจเตเดฑเต† เด’เดฐเต เดชเดคเดฟเดชเตเดชเต เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต (JDK 1.8).

เด•เด‚เดชเตˆเดฒเดฑเดฟเดจเตเดฑเต† เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเต, เดญเดพเดทเดฏเตเดŸเต† เด†เดฆเตเดฏ เดชเดคเดฟเดชเตเดชเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดคเดฏเต† เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเดฟ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเต เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดชเตเดคเดฟเดฏ OOP

เดญเดพเดทเดฏเตเดŸเต† เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเดฟเตฝ, เด•เตเดฒเดพเดธเตเด•เดณเตเดณเตเดณ เดตเตผเด•เตเด•เต เดญเดพเด—เดฟเด•เดฎเดพเดฏเดฟ เดชเตเดจเตผเดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต.
เด•เตเดฒเดพเดธเต เดฐเต€เดคเดฟเด•เตพ เด•เตเดฒเดพเดธเต เดฌเต‹เดกเดฟเดฏเดฟเดฒเตเด‚ เดชเตเดฑเดคเตเดคเตเด‚ เดชเตเดฐเด–เตเดฏเดพเดชเดฟเด•เตเด•เดพเด‚.
เด•เตเดฒเดพเดธเตเดธเดฟเดจเต เด‡เดชเตเดชเต‹เตพ เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เด’เดฐเต เด•เตบเดธเตเดŸเตเดฐเด•เตเดฑเตเดฑเตผ เด‰เดฃเตเดŸเต: init.

เดธเดพเดฎเตเดชเดฟเตพ เด•เต‹เดกเต:

...
class MyClass:
  private:
    var a, b

  public:
    init(a, b):
      $a ?= a
      $b ?= b
    end

    func Foo():
      return $a + $b   
    end
end

func MyClass::Bar(c):
  return $a + $b + c
end
...

เด…เดจเดจเตเดคเดฐเดพเดตเด•เดพเดถเด‚ เด‰เดฃเตเดŸเดพเดฏเดพเตฝ, เด…เดจเดจเตเดคเดฐเดพเดตเด•เดพเดถ เด•เต‹เดณเตเด•เตพ (เดธเต‚เดชเตเดชเตผ) เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดตเดฟเดณเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด…เดตเดธเดฐเดฎเตเดฃเตเดŸเต.

เดธเดพเดฎเตเดชเดฟเตพ เด•เต‹เดกเต:

...
class MySecondClass(MyClass):
  public:
    var c

    init(a, b, c):
      super(a, b)
      $c ?= c
    end

    func Bar():
      super($c)  
    end
end
...

x ?= new MySecondClass(10, 20, 30)
println( x -> Bar() )     // 60

เด•เตเดฒเดพเดธเต เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเดฒเต† เดฐเต€เดคเดฟเด•เดณเตเดŸเต† เดšเดฒเดจเดพเดคเตเดฎเด•เดฎเดพเดฏ เด“เดตเตผเดฑเตˆเดกเดฟเด‚เด—เต:

...
func Polymorph::NewFoo(c):
  return $a + $b + c  
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30)    // 60

เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ/เดจเดพเด‚เดธเตเดชเต‡เดธเตเด•เตพ

เดจเต†เดฏเดฟเด‚เดธเตเดชเต‡เดธเต เดตเตƒเดคเตเดคเดฟเดฏเดพเดฏเดฟ เดคเตเดŸเดฐเดฃเด‚!
เด…เดคเดจเตเดธเดฐเดฟเดšเตเดšเต, เดญเดพเดท เดˆ เด…เดตเดธเดฐเด‚ เดจเตฝเด•เดฃเด‚.
เดฎเดพเดทเดฟเตฝ, เด’เดฐเต เด•เตเดฒเดพเดธเต เดฐเต€เดคเดฟ เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด†เดฃเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เด•เต‹เดกเดฟเดจเตเดฑเต† เดเดคเต เดญเดพเด—เดคเตเดคเตเดจเดฟเดจเตเดจเตเด‚ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏเดฟ เดตเดฟเดณเดฟเด•เตเด•เดพเด‚.

เด‰เดฆเดพเดนเดฐเดฃเด‚:

...
class MyPackage:
  func MyFunc(a, b):
    return a + b  
  end
end
...
println( MyPackage -> MyFunc(10, 20) )    // 30

เดตเดดเดฟเดฏเดฟเตฝ, เดˆ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดตเดฟเดณเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดธเต‚เดชเตเดชเตผ เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด‚.

เด’เดดเดฟเดตเดพเด•เตเด•เดฒเตเด•เตพ

เดญเดพเดทเดฏเตเดŸเต† เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเดฟเตฝ เด…เดตเดฏเต† เด•เตเดฒเดพเดธเตเด•เดณเดพเดฏเดฟ เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเต:

...
try:
  raise new Exception(
    "My raised exception!"
  )
catch E:
  if E is Exception:
    println(E)
  else:
    println("Unknown exception class!")
  end
end
...

เดชเตเดคเดฟเดฏ enum

เด‡เดชเตเดชเต‹เตพ เดŽเดฃเตเดฃเตฝ เด˜เดŸเด•เด™เตเด™เตพเด•เตเด•เต เดธเตเดฅเดฟเดฐเดฎเดพเดฏ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดจเตฝเด•เดพเด‚:

enum MyEnum [
  meFirst = "First",
  meSecond = 2,
  meThird
]
...
k ?= meSecond
...
if k in MyEnum:
  ...
end

เด‰เตพเดšเตเดšเต‡เตผเดคเตเดค เดญเดพเดท

เดธเดพเดงเตเดฏเดคเดฏเดจเตเดธเดฐเดฟเดšเตเดšเต, เดฒเตเดตเดพเดฏเตเด•เตเด•เต เดธเดฎเดพเดจเดฎเดพเดฏ เด’เดฐเต เดŽเด‚เดฌเดกเดกเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเดฏเดพเดฏเดฟ เดฎเดพเดทเดฟเดจเต เด…เดคเดฟเดจเตเดฑเต† เดธเตเดฅเดพเดจเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เด•เดดเดฟเดฏเตเด‚.

เดˆ เด†เดตเดถเตเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดฎเดพเดทเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ เดธเตเดตเดฏเด‚ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ.

เดฎเดพเดทเดฟเดจเต เด’เดฐเต เดฑเตบเดŸเตˆเด‚ เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเต เด‰เดฃเตเดŸเต - เด’เดฐเต เดชเต‚เตผเดฃเตเดฃ API เด‰เดณเตเดณ เด’เดฐเต เดกเตˆเดจเดพเดฎเดฟเด•เต เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเดพเดฏเดฟ เดธเดฎเดพเดนเดฐเดฟเดšเตเดš เด’เดฐเต เดธเตเดฑเตเดฑเดพเด•เตเด•เต เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ VM.

เดจเดฟเด™เตเด™เตพ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดกเดฟเดชเตปเดกเตปเดธเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เด‡เดคเต เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดฐเดฃเตเดŸเต เด•เต‹เดณเตเด•เตพ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด•.

เดญเดพเดท เดคเดจเตเดจเต† เด’เดฐเต เด‰เตพเดšเตเดšเต‡เตผเดคเตเดค เดญเดพเดทเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดค เดจเตฝเด•เตเดจเตเดจเต.
เด…เดคเต‡ เดธเดฎเดฏเด‚, เดญเดพเดทเดฏเตเด‚ เดฎเต‚เดจเตเดจเดพเด‚ เด•เด•เตเดทเดฟ เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เดณเตเดฎเดพเดฏเดฟ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเดšเตเดšเตเดณเตเดณ เดชเตเดฐเด•เดŸเดจเดคเตเดคเต† เดฌเดพเดงเดฟเด•เตเด•เดฟเดฒเตเดฒ.
เด…เดคเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดตเดฟเดตเดฟเดง เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเตเด•เดณเตเดŸเต† เดฎเตเดดเตเดตเตป เดถเด•เตเดคเดฟเดฏเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด’เดฐเต เดŽเด‚เดฌเดกเดกเต เดญเดพเดทเดฏเดพเดฃเต เดจเดฎเตเด•เตเด•เต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเต.

เดฎเดพเดทเต + เดœเต†.เดตเดฟ.เดŽเด‚

เดžเดพเตป เดœเต†เดตเดฟเดŽเดฎเตเดฎเดฟเดจเดพเดฏเดฟ เดตเดฟเดตเตผเดคเตเดคเด•เดจเตเดฑเต† เด’เดฐเต เดชเดคเดฟเดชเตเดชเต เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เดฟ.
เด’เดฐเตเดชเด•เตเดทเต‡, N เดธเดฎเดฏเดคเตเดคเดฟเดจเต เดถเต‡เดทเด‚, เดˆ เดตเดฟเดทเดฏเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด’เดฐเต เดชเต‹เดธเตเดฑเตเดฑเต Habrรฉ-เดฏเดฟเตฝ เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเด‚.

เดซเดฒเด™เตเด™เตพ

เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเต เดซเดฒเด™เตเด™เดณเตŠเดจเตเดจเตเดฎเดฟเดฒเตเดฒ. เด‡เดคเต เดซเดฒเด™เตเด™เดณเตเดŸเต† เด’เดฐเต เด‡เดจเตเดฑเตผเดฎเต€เดกเดฟเดฏเดฑเตเดฑเต เดชเตเดฐเดพเดคเดฟเดจเดฟเดงเตเดฏเดฎเดพเดฃเต.
2020เตฝ เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เด†เดถเด‚เดธเด•เตพ เดจเต‡เดฐเตเดจเตเดจเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•