関数型・オブジェクト指向宗教戦争に疲れたなたに送るgo言語入門

19
関数型・オブジェクト指向 宗教戦争に疲れたあなたに送る Go言語のススメ 石坂忠広 http://opcdiary.net

Upload: tadahiro-ishisaka

Post on 15-Jul-2015

1.188 views

Category:

Software


2 download

TRANSCRIPT

Page 1: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

関数型・オブジェクト指向宗教戦争に疲れたあなたに送る

Go言語のススメ

石坂忠広

http://opcdiary.net

Page 2: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

自己紹介

• プロフィールは適当にWindows GitとかVisual Studio Gitで検索してください。トップに出てきません。

•富士山の方から来ました。

• オブジェクト指向スキーなSEです。

•純粋関数型なんてわかりませんと思っていたら、純粋関数型の人もあんまりわかってなかったみたいな感じで何なんだったんだこの一ヶ月みたいな感じです。ま、傍観者ですが。

• ま、あと、オブジェクト指向も流派が分かれるので一緒にするな。

Page 3: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

疲れました。。。

•総称性の議論とか

• クラス、オブジェクト、そもそもJavaScriptのあれはとか

•副作用?副作用?

•圏論?はぁ?それがお前の言う圏論の議論なの?

•別に関数型とオブジェクト指向とか相反しないし• OCamlとF#に謝れとか

• まぁ、原理主義者相手にしてると疲れますよね

Page 4: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

そんな疲れたアナタに朗報です

Page 5: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

Go言語でリフレッシュしましょう!

Page 6: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

Go言語には議論を呼ぶ以下のものがありません

•クラス、オブジェクト、継承、オーバーライド

• Generics(総称性)構文

•関数型原理主義者の嫌う、擬似関数型現機能、ラムダ式

• While/Do While/Foreach

•モナド?圏論?とか面倒くさいこと言う厨二

Page 7: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

争いの起きる余地なし!!

Page 8: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

Go言語の特徴• 手続き型の高級言語

• ロブ・パイク、ケン・トンプソンが開発に関わっている

• ALGOL, Pascal, Cのような構文

• コンパイル言語• クロスコンパイルが得意(Linux/Darwin(Mac)/BSD/Solaris/Windows/Plan 9)• 実行動作ランタイムなどない!

• メモリ管理はGCに一任

• 連想配列を持つ

• 型の継承、ジェネリックプログラミング、アサーション、オーバーロードといった機能は無いが、インターフェイスによるポリモーフィズムはある(それなんてVB)

• 並行動作の支援機能

Page 9: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

Hello World

package main

import "fmt“

func main() {fmt.Printf("Hello, World¥n")

}

Page 10: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

;(セミコロン)がない!!!

•中括弧言語のくせにセミコロンがない!

•無いのではなく、コンパイラが構文解釈して適宜挿入するので省略できている。(文末解析出れば人が入れること無いじゃん)

•以下のような場合は必要。• for i := 0; i < 10; i++ {} (for文のイニシャライザ)

• 1行に複数の文を記述したい場合

Page 11: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

;以外もC/C#/Java違うところが多いよ

•代入演算子が :=

• for, if にカッコを付けない

•変数の型指定が変数の後• var n int

• var err os.Error

• Asはいらない

• while / do whileが無い。ロブ・パイク大先生もforで十分だと。

• ポインタがある。

• C++プログラマ向けGo講座を見よ

Page 12: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

ま、ゆるふわな言語です。

Page 13: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

実践Go言語Go言語を勉強したくなったらこのサイトを見よう

Page 14: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

はじめかた

• http://golang-jp.org/から始めましょう• ここのトップページのDownload Goをクリック

• Linux/BSD/OS X/WindowsはこれでOK

• リンク先ページ書きの注意書きを読みましょう

• Solarisの人はパッケージがあるはず

• チュートリアル• A Tour of Goでひと通りの構文を学習できます。

• WEBで完結しているので何かをインストールする必要なし

• http://go-tour-jp.appspot.com/#1

Page 15: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

開発環境• CLI主義

• コンソールウインドウを黒い画面とか言うゆとりはPHPでも使ってろ!!

• コード整形• コンパイラがその機能を内蔵 go fmt <ソースコードファイル>

• 複数のコーディングスタイルとか許してやんない→議論の余地なし

• エディタ• Vim, Emacs, Atom等でGo用に構文のハイライトや、コード整形、コード補完の機能を提供するプラグインがあるよ

• IDE• LiteIDEが優秀

• InteliJ IDEAもがんばっているっぽい

Page 16: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

何に向いているか?

• Goole App Engine(GAE)でのアプリケーション展開

• WEBアプリケーション

• UNIXwayなコマンドラインツール、且つクロス環境で動作して欲しい場合• クロスコンパイル機能が非常に優秀で、実行ファイルがあればライブラリのポートとかも必要ない。Linux上でMac用、Windows用のバイナリも作成可

• 個人的におすすめ

• GUIはあんまり得意じゃない

Page 17: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

何より• Gopherが可愛い(*´∀`)

https://golang.org/doc/gopher/

Page 18: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

お前じゃない

Page 19: 関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門

ご清聴ありがとございました。