トラック
/
C#
C#
/
演習
/
電話番号の分析
電話番号の分析

電話番号の分析

学習演習

はじめに

タプル

C#では、タプルはデータを整理するデータ構造で、任意の型のフィールドを2つ以上まとめて保持します。

タプルは通常、2つ以上の式をコンマで区切って括弧で囲むことで作成します。

string boast = "All you need to know";
bool success = !string.IsNullOrWhiteSpace(boast);
(bool, int, string) triple = (success, 42, boast);

タプルは、代入や初期化の操作で使えるほか、戻り値やメソッドの引数としても使えます。

フィールドはドット記法で取り出します。既定では、最初のフィールドがItem1、2番目がItem2、というようになります。既定以外の名前については後述します。

// initialization
(int, int, int) vertices = (90, 45, 45);

// assignment
vertices = (60, 60, 60);

//  return value
(bool, int) GetSameOrBigger(int num1, int num2)
{
    return (num1 == num2, num1 > num2 ? num1 : num2);
}

// method argument
int Add((int, int) operands)
{
    return operands.Item1 + operands.Item2;
}

Item1のようなフィールド名では、読みやすいコードにはなりません。以下のコードでは、タプルのフィールドに名前を付ける2つの方法を示します。また、以下のコードでは、varをタプルで使って型を推論できることにも注目してください。これは、名前付きフィールドを持つタプルでも、名前のないフィールドを持つタプルでも、同じように機能します。

// name items in declaration
(bool success, string message) results = (true, "well done!");
bool mySuccess = results.success;
string myMessage = results.message;

// name items in creating expression
var results2 = (success: true, message: "well done!");
bool mySuccess2 = results2.success;
string myMessage2 = results2.message;

説明

この演習では、電話番号を分析します。

実装する機能は2つあります。

ルーチンに渡される電話番号は、必ずNNN-NNN-NNNNの形式(たとえば212-515-9876)であり、nullになることはありません。

1. 電話番号を分析する

分析では、3つのデータを返します。

  1. その番号がニューヨークの市外局番、つまり最初の3桁が212であるかどうかを示す値
  2. 1から数えて5桁目から7桁目に、プレフィックスコードとして555を持つ偽の番号かどうかを示す値
  3. 番号の最後の4桁

(静的)メソッドPhoneNumber.Analyze()を実装して、電話番号の情報を生成します。

PhoneNumber.Analyze("631-555-1234");
// => (false, true, "1234")

2. 電話番号が偽のプレフィックスコード(555)を持つかどうかを検出する

タスク1で生成した電話番号の情報を使って、その電話番号が偽のものかどうかを検出する(静的)メソッドPhoneNumber.IsFake()を実装します。

PhoneNumber.IsFake(PhoneNumbers.Analyze("631-555-1234"));
// => true
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
C# Exercism

電話番号の分析を始める準備はできましたか?

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