LoginSignup
2
2

More than 5 years have passed since last update.

Domemo実装によるプログラミング言語比較 その2

Last updated at Posted at 2018-07-15

趣旨

Domemo実装によるプログラミング言語比較 その1の続きです。

成果物

ソースコードはBitBucketに入れてますので、MITライセンスの元でお好きにしてください!
※公開リポジトリだけど、みんな好き勝手に触れるのかよくわかってない...
git clone https://aoi_erimiya@bitbucket.org/aoi_erimiya/domemo.git

各言語の感想

Go-独特

とことんコーディングの省力化がされた独自の文法。
極めればめっちゃ早くコーディングできるんだろうなって思う。
※VSCodeの補完もすらすら!

いいところ

  • 変数宣言が楽(varとか型指定とかいらない)
domemo.go
round := 1
  • ポインタ使える!

つまったところ

  • リスト宣言の文法がめっちゃ特殊
domemo.go
cards := [5]int{1,2,3,4,5}
  • foreachがない
  • オブジェクトも配列も全部値渡し→泣く泣くポインタ使う事に
domemo.go
// 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のようだけど洗練されていて、わかりやすい文法。

いいところ

  • 配列の宣言がわかりやすい
domemo.swift
let cards: [Int] = [1,2,3,4,5]
  • 文字列への変数埋め込みがわかりやすい
domemo.swift
var round = 1
print("*round\(round)")

つまったところ

  • Random周りの関数が3.0->4.0->4.2で仕様激変してたり、やっぱりCocoaあるのが前提?
  • Mac持ってないのでRandom系がどうしても通らず、動作確認できてない(たぶん動くはず...)
domemo.swift
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祭りは勘弁だけど...:sweat_smile:
※個人的にTwitterのBot組んでるので慣れもある

いいところ

  • インデントで見やすい
  • 文字列や配列の掛け算ができる
domemo.py
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,...)の記法が特殊
domemo.py
class Player:
    def __init__(self, name, cards):
        self.name = name
        self.cards = cards

Ruby-自由

明示的な文法によるわかりやすさと気が利いた標準ライブラリの関数たち。
ドキュメントの豊富さと、便利関数が多いからか
自分が実装してきた中で、一番ゲームとしての実装が進んでたり:stuck_out_tongue_closed_eyes:

いいところ

  • Pythonでできる事はたいていできる(文字列の掛け算とか)
  • スコープの明示(@とか)
  • getter,setterの実装も楽
domemo.rb
class Player
    attr_reader :name, :cards

    def initialize(name, cards)
        @name = name
        @cards = cards
    end

つまったところ

やってみて

同じテーマで色んな言語で書いてみると、それぞれの良さがわかって楽しい:relaxed:
後半に行けば行くほど、こういう実装もできるって気づいたりも。
実装簡略化してるものもあったり、例外処理は度外視しているので
そこもリファクタリングしていきたいですね。

最近のモダンな言語はひとまずおさえたつもりだけど今後も他の言語で実装やってみます!
次はAdaとか、TypeScriptあたりかな。

ご意見など

各言語の専門家の方、もっと綺麗に書けるよとかご意見ありましたら
スキル磨きたいのでぜひ教えてください!!:blush:

2
2
0

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
2
2