Chris Pine の「Learn to Program」で Ruby を学んでいます。グローバル変数なしで対処しようとしています。見栄えの悪いコマンド プロンプト ブラックジャック プログラムがあります (まだ分割できません) 最初の 3 つの方法は、私が抱えている問題を示しています。Pascal では、グローバル変数を使用し、それらのグローバル変数を操作するメソッドを使用していました。こんな感じになります(Ruby疑似言語使用)
$deck_of_cards = []
$player_hand = []
$dealer_hand = []
def create_deck
$deck_of_cards = #numbers 1-52
end
def shuffle_deck
$deck_of_cards = #shuffled up deck of cards
end
def opening_deal
2.times do
$player_hand.push $deck_of_cards.pop
$dealer_hand.push $deck_of_cards.pop
end
end
create_deck
shuffle_deck
opening_deal
シャッフルされたデッキ、プレイヤーの手、ディーラーの手になります。
グローバル変数を取り除くと、最初の 2 つのメソッドは次のようになります。
def create_deck deck_of_cards
deck_of_cards = #numbers 1-52
return deck_of_cards
end
def shuffle_deck deck_of_cards
deck_of_cards = #shuffled up deck of cards
return deck_of_cards
end
deck = create_deck([])
deck = shuffle_deck(deck)
少し奇妙に感じますが、慣れることができました。
しかし、player_hand と deal_hand という 2 つの変数を返す必要がある最後のメソッドには完全に行き詰まっています。これらの 2 つの配列を別の配列にプッシュして返すこともできますが、それは何も単純化していないようです。
これに対処するための一般的な戦略はありますか、それとも状況ごとに独自の解決策がありますか?
頭に浮かぶ別の状況は、チェスのプログラムです。チェス プログラムのほぼすべてのメソッドがその値を使用する必要があるため、チェス盤をグローバル変数にするのはなぜ意味がないのでしょうか?