トラック
/
PHP
PHP
/
演習
/
ラッキーナンバー
ラッキーナンバー

ラッキーナンバー

学習演習

はじめに

型のジャグリング

型のジャグリングは、型強制とも呼ばれます。 型のジャグリングとは、異なる型の2つの値が、演算を行うために同じ型に変換されることです。

$baskets = 5 // int
$apples_per_basket = "3" // string
$baskets * $apples_per_basket
# => 15

これは暗黙的に行われる場合もあれば(上の例を参照)、C言語スタイルの型キャストを使って明示的に行う場合もあります。

$apples_per_basket = "3" // string
$my_number = (int) $apples_per_basket // cast string to int
# => 3 // int

手動の型キャストで使用できる型は、bool、int、float、string、array、objectです。 型キャストは、整数(int)を浮動小数点数(float)に変換する場合や、その逆の場合によく使われます。

説明

友人のKojoは数字が大好きです。 数字で遊ぶための小さなウェブサイトを運営しています。 Kojoはプログラミングがあまり得意ではないので、あなたに助けを求めました。

ここでは、Kojoのウェブサイトの新しい数字ゲームのために2つのヘルパーメソッドを作り、さらにユーザーが入力する値を検証する3つ目のメソッドも作ります。

1. スロットマシンの数字の合計を計算する

Kojoのウェブサイトにあるゲームのひとつは、数字が書かれたホイールの組を2つ表示するスロットマシンのようなものです。 それぞれの数字の組が1つの数値を表します。 ゲームの仕組みのために、Kojoはこれら2つの数値の合計を知る必要があります。

2つの配列を入力として受け取るsumUpメソッドを書きましょう。 それぞれの配列は、0から9までの1つ以上の数字でできています。 この関数は、それぞれの配列を数値として解釈し、それら2つの数値の合計を返します。

<?php
$lucky_numbers = new LuckyNumbers()

$lucky_numbers->sumUp([1, 2, 3], [0, 7]);
//=> 130

// [1, 2, 3] represents 123 and [0, 7] represents 7.
// 123 + 7 = 130

2. 数値が回文かどうかを判定する

ウェブサイトにあるもうひとつのゲームは、「Lucky Numbers」という小さなクイズです。 ユーザーは数値を入力すると、その数値が何か秘密の数列やパターンに当てはまるかどうかがわかります。 「Lucky Numbers」の数列やパターンは毎月変わり、ユーザーがそれを当てられる回数は限られています。

今月の「Lucky Numbers」は、回文になる数値です。 回文数は、数字を逆に並べても同じ数値のままです。

整数を入力として受け取る新しいisPalindrome関数を実装してみましょう。 この関数は、その数値が回文であればtrueを、そうでなければfalseを返します。 入力される数値は常に正の整数です。

<?php
$lucky_numbers = new LuckyNumbers()

$lucky_numbers->isPalindrome(1441);
//=>  true

$lucky_numbers->isPalindrome(123);
//=> false

3. 無効なユーザー入力に対するエラーメッセージを生成する

ウェブサイトのあちこちに、ユーザーが数値を入力してボタンをクリックすると何らかの処理が実行される入力フィールドがあります。 Kojoは、サイトのユーザー体験を改善したいと考えています。 ユーザーがボタンをクリックしたときに、フィールドに無効な入力値が入っていたら、エラーメッセージを表示したいのです。

入力フィールドの値がどのように渡されるかについて、もう少し説明します。

  • ユーザーがフィールドに何かを入力すると、たとえ数字だけを入力したとしても、その値は常に文字列になります。
  • 何かを入力したあとにそれを削除すると、変数は空の文字列になります。
  • ユーザーが入力し始める前も、変数は空の文字列です。

ユーザーの入力を入力として受け取るvalidate関数を書きましょう。 ユーザーが何も入力していない場合、validateは'Required field'を返します。 入力が正の0以外の整数を表していない場合(PHPの型キャストのルールに従います)、'Must be a whole number larger than 0'を返します。 それ以外の場合は、入力は有効であるとみなしてよく、戻り値は空の文字列になります。

<?php
$lucky_numbers = new LuckyNumbers()

$lucky_numbers->validate('123');
// => ''

$lucky_numbers->validate('');
// => 'Required field'

$lucky_numbers->validate('abc');
// => 'Must be a whole number larger than 0'
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
PHP Exercism

ラッキーナンバーを始める準備はできましたか?

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