ื”ืชื ืื™ื ื‘ื’ื• ื•ื”ืžื•ื–ืจื•ืช ืฉืœื”ื

ื”ืื ืืชื” ื—ื•ืฉื‘ ืฉืฉืชื™ ื”ืืคืฉืจื•ื™ื•ืช ื”ืœืœื• ืœื‘ื“ื™ืงืช ืชื ืื™ื ื‘ืชื•ืš ืœื•ืœืื” ืฉื•ื•ืช ืขืจืš ื‘ื‘ื™ืฆื•ืขื™ื?

		
if a > b && c*2 > d {
	....
}
// ะธ
if a <= b  { 
  continue;
}
if c*2 > d {
 ....
}


ื”ื›ืœ ื”ืชื—ื™ืœ ื‘"ื—ื™ืžื•ื ืžื•ื—"; ื”ื™ื™ืชื™ ืฆืจื™ืš ืœืชืช ื“ื•ื’ืžื” ืœื—ื™ืคื•ืฉ ืื•ืคื˜ื™ืžืœื™ ืฉืœ ื”ืžืกืคืจ ื”ื–ื•ื’ื™ ื”ื’ื“ื•ืœ ื‘ื™ื•ืชืจ ื‘ืžืขืจืš ืฉืœ ืžืกืคืจื™ื ืฉืœืžื™ื [-x....x]. ืชื”ื™ืชื™ ื›ืžื” ื‘ื™ืฆื•ืขื™ื ื˜ื•ื‘ื™ื ื™ื•ืชืจ ืื ืืฉืชืžืฉ ื‘ื›ืคืœ ืœื•ื’ื™ ื‘-1 ื›ื“ื™ ืœื”ื‘ื™ืŸ ืื ืžืกืคืจ ื–ื•ื’ื™ ืื• ืœื.


//ัƒ ั‡ะตั‚ะฝั‹ั… ั‡ะธัะตะป ะฟะพัะปะตะดะฝะธะน ะฑะธั‚ ะฒัะตะณะดะฐ ั€ะฐะฒะตะฝ 0
value & 1 == 0
//vs ะบะปะฐััะธั‡ะตัะบะธะน ะผะตั‚ะพะด
value % 2 == 0

ื”ื ื™ืกื™ื•ืŸ ืฉืœื™ ื‘ืชื›ื ื•ืช ื‘-Go ืื™ื ื• ื ืจื—ื‘ ื‘ืžื™ื•ื—ื“, ืงืฆืช ื™ื•ืชืจ ืžืฉื ื” ื•ื—ืฆื™, ื”ืฉืชืžืฉืชื™ ื‘ื•, ืื ื›ื™ ืœืขืชื™ื ืงืจื•ื‘ื•ืช, ืื‘ืœ ืืš ื•ืจืง ืœืžื˜ืจื•ืช ืชื•ืขืœืชื ื™ื•ืช (ื˜ื•ื‘, ืื•ืœื™ ื—ื•ืฅ ืžืคืจื•ื™ืงื˜ ืื—ื“ ืฉืงืฉื•ืจ ืœืฉื™ืจื•ืช http ื‘ืขื•ืžืก ื’ื‘ื•ื”), ืื– ืื ื™ ื”ืชื—ื™ืœ ืขื ื–ื”. ืคืชื— ืืช GoLand ื•ื›ืชื•ื‘ ืžื‘ื—ืŸ ืคืฉื•ื˜


package main
import (
	"fmt"
	"log"
	"math"
	"math/rand"
	"time"
)
const size = 100000000 //math.MaxInt32*2
type Result struct {
	Name     string
	Duration time.Duration
	Value    int32
}

func main() {
	log.Println("initial array capacity: " + fmt.Sprint(size))
	var maxValue int32
        // ะ‘ัƒะดะตะผ ะฒะฐั€ัŒะธั€ะพะฒะฐั‚ัŒ ะดะธะฐะฟะฐะทะพะฝ ั‡ะธัะตะป ะพั‚ ะผะธะฝะธะผะฐะปัŒะฝะพะณะพ 
        // ะดะพ ะผะฐะบัะธะผะฐะปัŒะฝะพะณะพ. ะงะตะผ ะผะตะฝัŒัˆะต ะดะธะฐะฟะฐะทะพะฝ, ั‚ะตะผ ะฑะพะปัŒัˆะต 
        // ะฟั€ะพั†ะตััะพั€ะฝะพะณะพ ะฒั€ะตะผะตะฝะธ ะฑัƒะดะตั‚ ัƒั…ะพะดะธั‚ัŒ ะฝะฐ ะพะฟะตั€ะฐั†ะธัŽ 
        // ัั€ะฐะฒะฝะตะฝะธั ั‚ะตะบัƒั‰ะตะณะพ ั‡ะธัะปะฐ, ั ั€ะฐะฝะตะต ะฝะฐะนะดะตะฝะฝั‹ะผ ะธ ะฝะฐะพะฑะพั€ะพั‚
	for maxValue = 128; maxValue < math.MaxInt32/2+1; maxValue = maxValue * 2 {
		test(maxValue)
	}
}

func test(maxValue int32) {
	log.Println("max threshold: " + fmt.Sprint(maxValue))
	arr := make([]int32, size)
	for i := range arr {
		arr[i] = rand.Int31n(maxValue)
                // ะฒ ั‚ะตัั‚ะพะฒั‹ั… ะดะฐะฝะฝั‹ั… ะฝะฐะผ ะฝัƒะถะฝั‹ ะธ ะพั‚ั€ะธั†ะฐั‚ะตะปัŒะฝั‹ะต ั‡ะธัะปะฐ 
		sign := rand.Intn(2)
		if sign == 1 {
			arr[i] = -arr[i]
		}
	}

        // ะทะฐะฟัƒัะบะฐะตะผ ั‚ะตัั‚ "ะดะตะปะตะฝะธะต ั ะพัั‚ะฐั‚ะบะพะผ"
	result := maxEvenDividing("maxEvenDividing", arr)
	log.Printf(result.Name+"t result: "+fmt.Sprint(result.Value)+"ttduration %s", result.Duration)

        // ะทะฐะฟัƒัะบะฐะตะผ ั‚ะตัั‚ "ะบะพะฝัŠัŽะฝะบั†ะธะธ"
	result = maxEvenConjunction("maxEvenConjunction", arr)
	log.Printf(result.Name+"t result: "+fmt.Sprint(result.Value)+"ttduration %s", result.Duration)
}

func maxEvenDividing(name string, arr []int32) Result {
	start := time.Now()
	var current int32 = math.MinInt32
	for _, value := range arr {
		if value > current && value%2 == 0 {
			current = value
		}
	}
	duration := time.Since(start)
	result := Result{name, duration, current}
	return result
}

func maxEvenConjunction(name string, arr []int32) Result {
	start := time.Now()
	var current int32 = math.MinInt32
	for _, value := range arr {
		if value > current && value&1 == 0 {
			current = value
		}
	}
	duration := time.Since(start)
	result := Result{name, duration, current}
	return result
}

ืื ื• ืžืงื‘ืœื™ื ืชื•ืฆืื” ืฉืžืจืื” ืฉื›ื›ืœ ืฉื”ืกืฃ ื’ื‘ื•ื” ื™ื•ืชืจ, ื›ืš ืžื•ืคื™ืขื•ืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื™ื•ืชืจ ืชื ื•ื“ื•ืช ื‘ื‘ื™ืฆื•ืขื™ื.

ื”ืฉื•ื•ื”max threshold: 128
maxEvenDividing result: 126 duration 116.0067ms
maxEvenConjunction result: 126 duration 116.0066ms

max threshold: 16384
maxEvenDividing result: 16382 duration 115.0066ms
maxEvenConjunction result: 16382 duration 111.0064ms

......

max threshold: 8388608
maxEvenDividing result: 8388606 duration 109.0063ms
maxEvenConjunction result: 8388606 duration 109.0062ms

max threshold: 16777216
maxEvenDividing result: 16777214 duration 108.0062ms
maxEvenConjunction result: 16777214 duration 109.0062ms

max threshold: 33554432
maxEvenDividing result: 33554430 duration 114.0066ms
maxEvenConjunction result: 33554430 duration 110.0063ms

max threshold: 67108864
maxEvenDividing result: 67108860 duration 111.0064ms
maxEvenConjunction result: 67108860 duration 109.0062ms

max threshold: 134217728
maxEvenDividing result: 134217726 duration 108.0062ms
maxEvenConjunction result: 134217726 duration 109.0063ms

max threshold: 268435456
maxEvenDividing result: 268435446 duration 111.0063ms
maxEvenConjunction result: 268435446 duration 110.0063ms

ื‘ืจื•ืจ ืฉื‘ืžืงืจื” ื–ื”, ืขื‘ื•ืจ ืกืคื™ื ืฉื•ื ื™ื ื™ืฉ ืœื ื• ืกื˜ื™ื ืฉื•ื ื™ื ืฉืœ ื ืชื•ื ื™ ื‘ื“ื™ืงื”, ืขื•ืžืก ื”ืžืขื‘ื“ (ื‘ืžื—ืฉื‘ ื”ื ื™ื™ื“ i5-2540M ืฉืœื™) ืžืฉืชื ื” ื‘ืกื‘ื™ื‘ื•ืช 20..30%, ื”ื–ื™ื›ืจื•ืŸ ืฉืชื•ืคืก ืขืœ ื™ื“ื™ ื”ืืคืœื™ืงืฆื™ื” ื”ืคื•ืขืœืช ืž-GoLand ื”ื•ื ื‘ืžืžื•ืฆืข ื‘ืขืจืš 813MB - ื–ื” ืžืฉืคื™ืข ื’ื ืขืœ ืžื”ื™ืžื ื•ืช ื”ืชื•ืฆืื”, ืืชื” ืฆืจื™ืš ืœืฉืžื•ืจ ืžืงืจื™ ื‘ื“ื™ืงื” ื‘ื“ื™ืกืง ื•ืœื”ืจื™ืฅ ืืช ื›ืœ ื”ื‘ื“ื™ืงื•ืช ืขื‘ื•ืจ ื›ืœ ืกืฃ ื‘ืžื ื•ืชืง ืื—ื“ ืžื”ืฉื ื™.

ื•ืขื›ืฉื™ื•, ื›ืฉืื ื™ ื—ื•ืฉื‘ ืื™ืš ืœื™ื™ืฉื ืืช ื›ืœ ื–ื” ื‘ืขืœื•ื™ื•ืช ืžื™ื ื™ืžืœื™ื•ืช, ืื ื™ ืžืชืงืŸ ืื•ื˜ื•ืžื˜ื™ืช ืืช ื‘ื“ื™ืงืช ื”ืžืฆื‘

		
if value > current && value&1 == 0 {
	current = value
}

ืขืœ

		
if value <= current {
        continue;
}
if value&1 == 0 {
	current = value
}

ืื ื™ ืžืจื™ืฅ ืืช ื”ื‘ื“ื™ืงื•ืช ืฉื•ื‘... ื•ืื ื™ ืžืคืกื™ืง ืœื”ื‘ื™ืŸ ื›ืœื•ื :)

ื”ื–ืžืŸ ื”ืžื•ืฉืงืข ื‘ื‘ื™ืฆื•ืข ืžืชื—ื™ืœ ืœื”ื™ื•ืช ืฉื•ื ื” ื›ื‘ืจ ืœื ื‘ืื—ื•ื–ื™ื/ืฉื‘ืจื™ ืื—ื•ื–, ืืœื ื‘-10..15%. ืื ื™ ืžื•ืกื™ืฃ ื‘ืžื”ื™ืจื•ืช ืขื•ื“ 2 ื‘ื“ื™ืงื•ืช:

		
func maxEvenDividing2(name string, arr []int32) Result {
	start := time.Now()
	var current int32 = math.MinInt32
	for _, value := range arr {
		if value <= current {
			continue
		}

		if value%2 == 0 {
			current = value
		}
	}
	duration := time.Since(start)
	result := Result{name, duration, current}
	return result
}

func maxEvenConjunction2(name string, arr []int32) Result {
	start := time.Now()
	var current int32 = math.MinInt32
	for _, value := range arr {
		if value <= current {
			continue
		}
		if value&1 == 0 {
			current = value
		}
	}
	duration := time.Since(start)
	result := Result{name, duration, current}
	return result
}

ืื ื™ ืžืจื™ืฅ ืืช ื–ื” ื•ืžืงื‘ืœ ืืช ื”ืชืžื•ื ื” ื”ื–ืืช:ืงื™ื‘ื•ืœืช ืžืขืจืš ื”ืชื—ืœืชื™: 100000000

ืกืฃ ืžืงืกื™ืžืœื™: 128
maxEvenDividing ืชื•ืฆืืช: 126 ืžืฉืš 116.0066ms
maxEvenDividing2 ืชื•ืฆืื”: 126 ืžืฉืš 79.0045ms
ืชื•ืฆืืช maxEvenConjunction: 126 ืžืฉืš 114.0065ms
maxEvenConjunction2 ืชื•ืฆืื”: 126 ืžืฉืš 83.0048ms

ืกืฃ ืžืงืกื™ืžืœื™: 256
maxEvenDividing ืชื•ืฆืืช: 254 ืžืฉืš 111.0063ms
maxEvenDividing2 ืชื•ืฆืื”: 254 ืžืฉืš 77.0044ms
ืชื•ืฆืืช maxEvenConjunction: 254 ืžืฉืš 110.0063ms
maxEvenConjunction2 ืชื•ืฆืื”: 254 ืžืฉืš 80.0046ms

ืกืฃ ืžืงืกื™ืžืœื™: 512
maxEvenDividing ืชื•ืฆืืช: 510 ืžืฉืš 114.0066ms
maxEvenDividing2 ืชื•ืฆืื”: 510 ืžืฉืš 80.0045ms
ืชื•ืฆืืช maxEvenConjunction: 510 ืžืฉืš 110.0063ms
maxEvenConjunction2 ืชื•ืฆืื”: 510 ืžืฉืš 80.0046ms

ืกืฃ ืžืงืกื™ืžืœื™: 1024
maxEvenDividing ืชื•ืฆืืช: 1022 ืžืฉืš 109.0063ms
maxEvenDividing2 ืชื•ืฆืื”: 1022 ืžืฉืš 77.0044ms
ืชื•ืฆืืช maxEvenConjunction: 1022 ืžืฉืš 111.0063ms
maxEvenConjunction2 ืชื•ืฆืื”: 1022 ืžืฉืš 81.0047ms

ืกืฃ ืžืงืกื™ืžืœื™: 2048
maxEvenDividing ืชื•ืฆืืช: 2046 ืžืฉืš 114.0065ms
maxEvenDividing2 ืชื•ืฆืื”: 2046 ืžืฉืš 79.0045ms
ืชื•ืฆืืช maxEvenConjunction: 2046 ืžืฉืš 113.0065ms
maxEvenConjunction2 ืชื•ืฆืื”: 2046 ืžืฉืš 81.0046ms

ืกืฃ ืžืงืกื™ืžืœื™: 4096
maxEvenDividing ืชื•ืฆืืช: 4094 ืžืฉืš 114.0065ms
maxEvenDividing2 ืชื•ืฆืื”: 4094 ืžืฉืš 80.0046ms
ืชื•ืฆืืช maxEvenConjunction: 4094 ืžืฉืš 111.0063ms
maxEvenConjunction2 ืชื•ืฆืื”: 4094 ืžืฉืš 78.0045ms

ืกืฃ ืžืงืกื™ืžืœื™: 8192
maxEvenDividing ืชื•ืฆืืช: 8190 ืžืฉืš 107.0062ms
maxEvenDividing2 ืชื•ืฆืื”: 8190 ืžืฉืš 77.0044ms
ืชื•ืฆืืช maxEvenConjunction: 8190 ืžืฉืš 111.0063ms
maxEvenConjunction2 ืชื•ืฆืื”: 8190 ืžืฉืš 77.0044ms

ืกืฃ ืžืงืกื™ืžืœื™: 16384
maxEvenDividing ืชื•ืฆืืช: 16382 ืžืฉืš 109.0063ms
maxEvenDividing2 ืชื•ืฆืื”: 16382 ืžืฉืš 77.0044ms
ืชื•ืฆืืช maxEvenConjunction: 16382 ืžืฉืš 108.0062ms
maxEvenConjunction2 ืชื•ืฆืื”: 16382 ืžืฉืš 77.0044ms

ืกืฃ ืžืงืกื™ืžืœื™: 32768
maxEvenDividing ืชื•ืฆืืช: 32766 ืžืฉืš 112.0064ms
maxEvenDividing2 ืชื•ืฆืื”: 32766 ืžืฉืš 77.0044ms
ืชื•ืฆืืช maxEvenConjunction: 32766 ืžืฉืš 109.0062ms
maxEvenConjunction2 ืชื•ืฆืื”: 32766 ืžืฉืš 78.0045ms

ืกืฃ ืžืงืกื™ืžืœื™: 65536
maxEvenDividing ืชื•ืฆืืช: 65534 ืžืฉืš 109.0062ms
maxEvenDividing2 ืชื•ืฆืื”: 65534 ืžืฉืš 75.0043ms
ืชื•ืฆืืช maxEvenConjunction: 65534 ืžืฉืš 109.0063ms
maxEvenConjunction2 ืชื•ืฆืื”: 65534 ืžืฉืš 79.0045ms

ืกืฃ ืžืงืกื™ืžืœื™: 131072
maxEvenDividing ืชื•ืฆืืช: 131070 ืžืฉืš 108.0061ms
maxEvenDividing2 ืชื•ืฆืื”: 131070 ืžืฉืš 76.0044ms
ืชื•ืฆืืช maxEvenConjunction: 131070 ืžืฉืš 110.0063ms
maxEvenConjunction2 ืชื•ืฆืื”: 131070 ืžืฉืš 80.0046ms

ืกืฃ ืžืงืกื™ืžืœื™: 262144
maxEvenDividing ืชื•ืฆืืช: 262142 ืžืฉืš 110.0063ms
maxEvenDividing2 ืชื•ืฆืื”: 262142 ืžืฉืš 76.0044ms
ืชื•ืฆืืช maxEvenConjunction: 262142 ืžืฉืš 107.0061ms
maxEvenConjunction2 ืชื•ืฆืื”: 262142 ืžืฉืš 78.0044ms

ืกืฃ ืžืงืกื™ืžืœื™: 524288
maxEvenDividing ืชื•ืฆืืช: 524286 ืžืฉืš 109.0062ms
maxEvenDividing2 ืชื•ืฆืื”: 524286 ืžืฉืš 78.0045ms
ืชื•ืฆืืช maxEvenConjunction: 524286 ืžืฉืš 109.0062ms
maxEvenConjunction2 ืชื•ืฆืื”: 524286 ืžืฉืš 80.0046ms

ืกืฃ ืžืงืกื™ืžืœื™: 1048576
maxEvenDividing ืชื•ืฆืืช: 1048574 ืžืฉืš 109.0063ms
maxEvenDividing2 ืชื•ืฆืื”: 1048574 ืžืฉืš 80.0045ms
ืชื•ืฆืืช maxEvenConjunction: 1048574 ืžืฉืš 114.0066ms
maxEvenConjunction2 ืชื•ืฆืื”: 1048574 ืžืฉืš 78.0044ms

ืกืฃ ืžืงืกื™ืžืœื™: 2097152
maxEvenDividing ืชื•ืฆืืช: 2097150 ืžืฉืš 111.0064ms
maxEvenDividing2 ืชื•ืฆืื”: 2097150 ืžืฉืš 79.0045ms
ืชื•ืฆืืช maxEvenConjunction: 2097150 ืžืฉืš 112.0064ms
maxEvenConjunction2 ืชื•ืฆืื”: 2097150 ืžืฉืš 77.0044ms

ืกืฃ ืžืงืกื™ืžืœื™: 4194304
maxEvenDividing ืชื•ืฆืืช: 4194302 ืžืฉืš 111.0063ms
maxEvenDividing2 ืชื•ืฆืื”: 4194302 ืžืฉืš 78.0045ms
ืชื•ืฆืืช maxEvenConjunction: 4194302 ืžืฉืš 111.0063ms
maxEvenConjunction2 ืชื•ืฆืื”: 4194302 ืžืฉืš 77.0044ms

ืกืฃ ืžืงืกื™ืžืœื™: 8388608
maxEvenDividing ืชื•ืฆืืช: 8388606 ืžืฉืš 109.0062ms
maxEvenDividing2 ืชื•ืฆืื”: 8388606 ืžืฉืš 78.0045ms
ืชื•ืฆืืช maxEvenConjunction: 8388606 ืžืฉืš 114.0065ms
maxEvenConjunction2 ืชื•ืฆืื”: 8388606 ืžืฉืš 78.0045ms

ืกืฃ ืžืงืกื™ืžืœื™: 16777216
maxEvenDividing ืชื•ืฆืืช: 16777214 ืžืฉืš 109.0062ms
maxEvenDividing2 ืชื•ืฆืื”: 16777214 ืžืฉืš 77.0044ms
ืชื•ืฆืืช maxEvenConjunction: 16777214 ืžืฉืš 109.0063ms
maxEvenConjunction2 ืชื•ืฆืื”: 16777214 ืžืฉืš 77.0044ms

ืกืฃ ืžืงืกื™ืžืœื™: 33554432
maxEvenDividing ืชื•ืฆืืช: 33554430 ืžืฉืš 113.0065ms
maxEvenDividing2 ืชื•ืฆืื”: 33554430 ืžืฉืš 78.0045ms
ืชื•ืฆืืช maxEvenConjunction: 33554430 ืžืฉืš 110.0063ms
maxEvenConjunction2 ืชื•ืฆืื”: 33554430 ืžืฉืš 80.0045ms

ืกืฃ ืžืงืกื™ืžืœื™: 67108864
maxEvenDividing ืชื•ืฆืืช: 67108860 ืžืฉืš 112.0064ms
maxEvenDividing2 ืชื•ืฆืื”: 67108860 ืžืฉืš 77.0044ms
ืชื•ืฆืืช maxEvenConjunction: 67108860 ืžืฉืš 112.0064ms
maxEvenConjunction2 ืชื•ืฆืื”: 67108860 ืžืฉืš 80.0046ms

ืกืฃ ืžืงืกื™ืžืœื™: 134217728
maxEvenDividing ืชื•ืฆืืช: 134217726 ืžืฉืš 109.0063ms
maxEvenDividing2 ืชื•ืฆืื”: 134217726 ืžืฉืš 78.0044ms
ืชื•ืฆืืช maxEvenConjunction: 134217726 ืžืฉืš 114.0065ms
maxEvenConjunction2 ืชื•ืฆืื”: 134217726 ืžืฉืš 81.0047ms

ืกืฃ ืžืงืกื™ืžืœื™: 268435456
maxEvenDividing ืชื•ืฆืืช: 268435446 ืžืฉืš 111.0064ms
maxEvenDividing2 ืชื•ืฆืื”: 268435446 ืžืฉืš 79.0045ms
ืชื•ืฆืืช maxEvenConjunction: 268435446 ืžืฉืš 114.0065ms
maxEvenConjunction2 ืชื•ืฆืื”: 268435446 ืžืฉืš 79.0045ms

ืกืฃ ืžืงืกื™ืžืœื™: 536870912
maxEvenDividing ืชื•ืฆืืช: 536870910 ืžืฉืš 107.0062ms
maxEvenDividing2 ืชื•ืฆืื”: 536870910 ืžืฉืš 76.0043ms
ืชื•ืฆืืช maxEvenConjunction: 536870910 ืžืฉืš 109.0062ms
maxEvenConjunction2 ืชื•ืฆืื”: 536870910 ืžืฉืš 80.0046ms

ืœื ื”ืฆืœื—ืชื™ ืœืžืฆื•ื ื”ืกื‘ืจ ื‘ืจื•ืจ ืœืžื” ื”ืžื”ื“ืจ ืฉืœ Go ืœื ืžื™ื™ืขืœ ืืช ื”ืงื•ื“ ื•ืชืžื™ื“ ื‘ื•ื“ืง ืืช ื”ืชื ืื™ ื”ืฉื ื™, ื’ื ืื ื”ืจืืฉื•ืŸ ื”ื•ื ืฉืงืจ. ืื• ืฉืื•ืœื™ ื”ืขื™ื ื™ื™ื ืฉืœื™ ืคืฉื•ื˜ ืžื˜ื•ืฉื˜ืฉื•ืช ื•ืื ื™ ืœื ืจื•ืื” ืฉื•ื ื˜ืขื•ืช ื‘ืจื•ืจื”? ืื• ืฉืืชื” ืฆืจื™ืš ืœืกืคืง ื›ืžื” ื”ื•ืจืื•ืช ืžื™ื•ื—ื“ื•ืช ืœืžื”ื“ืจ? ืืฉืžื— ืœืชื’ื•ื‘ื•ืช ื”ื’ื™ื•ื ื™ื•ืช.

ื .ื‘.: ื›ืŸ, ืกืชื ื‘ืฉื‘ื™ืœ ื”ื›ื™ืฃ, ื”ืจืฆืชื™ ื‘ื“ื™ืงื•ืช ื“ื•ืžื•ืช ืขืœ Java 5 ื•-Java 7/8 - ื”ื›ืœ ื‘ืจื•ืจ, ื–ืžืŸ ื”ื‘ื™ืฆื•ืข ื–ื”ื”.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”