#Go, ruby, pythonのカウンタプログラム
##環境
ruby 2.4.1
Python 3.4.6
go version go1.9.4
openSUSE Leap 42.3
##概要
土日に突発的に何か新しい事をやりたいと思ったのでA Tour of GoでGo言語やってました。
そこでカウンタをとるプログラムの書き方が出てきて、他の言語では、どうやってたっけ?と思ったので備忘録としてここに残しておきます。
カウンタプログラムの実装
Goのカウンタ
A Tour of Goにおいて、Go言語のカウンタは、クロージャを使っていました。それを真似て作成したのが以下のプログラムです。
pythonみたいにnonlocalとかは、書かないようです。
test.go
package main
import(
"fmt"
)
func counter() func() int{
count := 0
return func() int{
count ++
return count
}
}
func main(){
count := counter()
fmt.Println(count()) => 1
fmt.Println(count()) => 2
fmt.Println(count()) => 3
}
pythonのカウンタ
続いてPythonのカウンタ。こちらもクロージャを使用。
test.py
def counter():
count = 0
def inc():
nonlocal count
count += 1
return count
return inc
test = counter()
print(test()) => 1
print(test()) => 2
print(test()) => 3
rubyのカウンタ
rubyでは、メタプログラミングで活躍するフラットスコープを使ってlambdaを使用。
test.rb
count = 0
test = lambda{count += 1}
puts test.call => 1
puts test.call => 2
puts test.call => 3
同じ処理をいろんなプログラムで書くと結構楽しい。