趣旨
Domemo実装によるプログラミング言語比較 その1の続きです。
成果物
ソースコードはBitBucketに入れてますので、MITライセンスの元でお好きにしてください!
※公開リポジトリだけど、みんな好き勝手に触れるのかよくわかってない...
git clone https://aoi_erimiya@bitbucket.org/aoi_erimiya/domemo.git
各言語の感想
Go-独特
とことんコーディングの省力化がされた独自の文法。
極めればめっちゃ早くコーディングできるんだろうなって思う。
※VSCodeの補完もすらすら!
いいところ
- 変数宣言が楽(varとか型指定とかいらない)
round := 1
- ポインタ使える!
つまったところ
- リスト宣言の文法がめっちゃ特殊
cards := [5]int{1,2,3,4,5}
- foreachがない
- オブジェクトも配列も全部値渡し→泣く泣くポインタ使う事に
// Player型が詰められたリストがあるとして、プロパティを編集したい
players := []Player{}
players = append(players, Player{name, playerCards})
...
// foreachがないので、まず普通にfor
for idx := 0; idx < 4; idx++ {
// わかりやすくするために変数に代入
player := players[idx]
// 値渡しされてるので、実体を編集できてない
player.cards = [0,1,2]
}
Swift-洗練
pythonのようだけど洗練されていて、わかりやすい文法。
いいところ
- 配列の宣言がわかりやすい
let cards: [Int] = [1,2,3,4,5]
- 文字列への変数埋め込みがわかりやすい
var round = 1
print("*round\(round)")
つまったところ
- Random周りの関数が3.0->4.0->4.2で仕様激変してたり、やっぱりCocoaあるのが前提?
- Mac持ってないのでRandom系がどうしても通らず、動作確認できてない(たぶん動くはず...)
let cards:[Int] = [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7]
for idx in cards.indices{
let swp = cards[idx]
let targetIdx = Int.random(in: 0 ..< 28)
cards[idx] = cards[targetIdx]
cards[targetIdx] = swp
}
- 何をimportしないといけないかがよくわからない
Python-原点
モダンじゃないけどとても書きやすい。self祭りは勘弁だけど...
※個人的にTwitterのBot組んでるので慣れもある
いいところ
- インデントで見やすい
- 文字列や配列の掛け算ができる
def show_mask(self):
cards = "X" * len(self.cards)
print(self.name + "->" + cards)
cards = [1] + [2]*2 + [3]*3 + [4]*4 + [5]*5 + [6]*6 + [7]*7
つまったところ
- リストのremoveで例外が起きる
- __init__(self,...)の記法が特殊
class Player:
def __init__(self, name, cards):
self.name = name
self.cards = cards
Ruby-自由
明示的な文法によるわかりやすさと気が利いた標準ライブラリの関数たち。
ドキュメントの豊富さと、便利関数が多いからか
自分が実装してきた中で、一番ゲームとしての実装が進んでたり
いいところ
- Pythonでできる事はたいていできる(文字列の掛け算とか)
- スコープの明示(@とか)
- getter,setterの実装も楽
class Player
attr_reader :name, :cards
def initialize(name, cards)
@name = name
@cards = cards
end
つまったところ
- 命名規約が最初わからなかった(camel?snake?) ※答えはどっちも
Rubyスタイルガイドを読む: 命名
やってみて
同じテーマで色んな言語で書いてみると、それぞれの良さがわかって楽しい
後半に行けば行くほど、こういう実装もできるって気づいたりも。
実装簡略化してるものもあったり、例外処理は度外視しているので
そこもリファクタリングしていきたいですね。
最近のモダンな言語はひとまずおさえたつもりだけど今後も他の言語で実装やってみます!
次はAdaとか、TypeScriptあたりかな。
ご意見など
各言語の専門家の方、もっと綺麗に書けるよとかご意見ありましたら
スキル磨きたいのでぜひ教えてください!!