トラック
/
Swift
Swift
/
演習
/
羽の探求
羽の探求

羽の探求

学習演習

はじめに

Swiftには、真偽値を表すための組み込み型Boolがあります。真偽値とは、trueとfalseのことです。

論理演算子

Swiftには、真偽値の式を組み合わせて評価するための3つの論理演算子(!、&&、||)があります。

論理AND(&&)

_AND_演算子(&&)は、両方のオペランドがtrueのときだけtrueを返します。 どちらか一方のオペランドがfalseなら、falseを返します。 &&記号の両側には、式または真偽値を置きます。

true && true  // true
true && false // false

論理OR(||)

_OR_演算子(||)は、少なくとも一方のオペランドがtrueならtrueを返します。 両方のオペランドがfalseのときだけfalseを返します。 ||記号の両側には、式または真偽値を置きます。

true || true   // true
true || false  // true
false || false // false

論理NOT(!)

_NOT_演算子(!)は、真偽値を反転させます。 値がfalseならtrueを返し、値がtrueならfalseを返します。 !演算子は、値または式の直前に置きます。

!true  // false
!false // true

括弧(())を使う

括弧を使うと、式をまとめて評価の順序を制御できます。 Swiftでは、括弧の中の式が先に評価されます。

true && false && false || true   // true
true && false && (false || true) // false

括弧でまとめると、複雑な式にNOT演算子がどのように適用されるかも決まります。

!true && false   // false (evaluates (!true) first, then false && false)
!(true && false) // true  (evaluates (true && false) first to false, then !false)
Note

評価の順序を明確にしたいときや、複雑な条件を読みやすくしたいときには、括弧を使いましょう。 デフォルトの優先順位で明らかな場合は、不要な括弧を追加するのは避けましょう。

説明

いま、注目を集めている新作ゲームWings Questを開発しているところです。 このゲームでは、鳥になって飛び回り、種を集めます。 プレイヤーは、すべての種を拾い集めると勝利します。 プレイヤーがワシに触れてしまうと、集めた種をすべて失い、ゲームに負けます。 ただし、例外があります。プレイヤーがパワーアップを有効にしていると、ほかの鳥よりも高く飛ぶことができます。

このゲームで使われるルールをいくつか書くことが、この演習の目標です。

1. 鳥がボーナスポイントを獲得するかどうかを定義する

ゲームでは、鳥はパワーアップ中にワシに触れると、ボーナスポイントを獲得します。

関数bonusPoints(powerUpActive:touchingEagle:)を定義してください。この関数は2つの引数を取ります。powerUpActiveは、鳥がパワーアップを有効にしているかどうかを保持し、touchingEagleは、鳥がワシに触れているかどうかを保持します。 この関数は、鳥がパワーアップを有効にしていて、かつワシに触れているときだけtrueを返し、それ以外の場合はfalseを返します。

bonusPoints(powerUpActive: false, touchingEagle: true)
// Returns false

2. 鳥が得点するかどうかを定義する

ゲームでは、プレイヤーは種かパワーアップを拾うとポイントを獲得します。

関数score(touchingPowerUp:touchingSeed:)を定義してください。この関数は2つの引数を取ります。touchingPowerUpは、鳥がパワーアップに触れているかどうかを保持し、touchingSeedは、鳥が種に触れているかどうかを保持します。 この関数は、鳥がパワーアップか種に触れているときにtrueを返し、それ以外の場合はfalseを返します。

score(touchingPowerUp: true, touchingSeed: true)
// Returns true

3. 鳥が負けるかどうかを定義する

関数lose(powerUpActive:touchingEagle:)を定義してください。この関数は2つの引数を取ります。powerUpActiveは、鳥がパワーアップを有効にしているかどうかを保持し、touchingEagleは、鳥がワシに触れているかどうかを保持します。 この関数は、キャラクターがワシに触れていて、パワーアップを有効にしていないときにtrueを返し、それ以外の場合はfalseを返します。

lose(powerUpActive: false, touchingEagle: true)
// Returns true

4. 鳥が勝つかどうかを定義する

関数win(hasPickedUpAllSeeds:powerUpActive:touchingEagle:)を定義してください。この関数は次の引数を取ります。

  • hasPickedUpAllSeeds:鳥がすべての種を拾い集めたかどうか。
  • powerUpActive:鳥がパワーアップを有効にしているかどうか。
  • touchingEagle:鳥がワシに触れているかどうか。

この関数は、鳥がすべての種を集めていて、パート3で定義した引数に基づいて負けていないときにtrueを返し、それ以外の場合はfalseを返します。

win(hasPickedUpAllSeeds: false, powerUpActive: true, touchingEagle: false)
// Returns false
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Swift Exercism

羽の探求を始める準備はできましたか?

Exercismに登録すれば、35個のコンセプト116個の演習、そして本物の人間によるメンタリングとともに、Swiftを学んでマスターできます。すべて無料です。