5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Go, ruby, pythonのカウンタプログラム

Posted at

#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

同じ処理をいろんなプログラムで書くと結構楽しい。

5
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?