演習 - メソッドから文字列を返す
多くの場合、文字列を返すメソッドを記述する必要があります。 たとえば、一連のデータから文字列を取得したり、何らかの方法で文字列を変更したりできます。 この演習では、一般的な面接の質問を練習しながら、メソッドで文字列を操作してみます。
文字列を返すメソッドを作成する
あなたはコーディング面接の受験者だとします。 面接担当者から、string.Reverse を使用せずに文字列を反転するメソッドを記述するように求められました。 このタスクを実行する方法について考えてみましょう。
文字列の末尾から反復処理することで、文字列を反転できると判断したとします。 一時的な文字列を使用して、各文字を末尾から先頭へと格納できます。 それでは始めましょう。
Visual Studio Code エディターで、前の演習の既存のコードを削除します。
エディターで、次のコードを入力します。
string ReverseWord(string word) { string result = ""; return result; }メソッドでは、指定された単語を反復処理し、結果を更新する必要があります。 そのためには、
ReverseWordメソッドを次のコードで更新します。string ReverseWord(string word) { string result = ""; for (int i = word.Length - 1; i >= 0; i--) { result += word[i]; } return result; }このコード ブロックでは、
word.Length - 1を使用して単語の末尾から開始します。 配列インデックスは 0 から始まるので、範囲外の要素にアクセスすることのないよう、長さから 1 を減算します。 次に、現在のインデックスの文字をresult文字列に追加し、インデックスを後方に移動します。 ループ内のコードが実行された後にi >= 0が更新されるので、iを使用し、0 番目のインデックスが必ず含まれるようにします。
コードのテスト
コーディングするときは、作業を頻繁に確認することが重要です。 コーディング プロセスの早い段階で間違いを見つけて修正すると、1 つの大きなプログラムをデバッグする代わりに、正しいコードを構築するのに時間をかけることができます。 作業を頻繁に確認することは、コーディング面接担当者が高く評価するスキルでもあります。
新しい空白のコード行を入力します。 次に、入力テキストを作成し、
ReverseWordメソッドの上に次のコードを入力してメソッドを呼び出します。string input = "snake"; Console.WriteLine(input); Console.WriteLine(ReverseWord(input));必要に応じて、Visual Studio Code の統合ターミナル パネルを開きます。
ターミナルのコマンド プロンプトで、「 dotnet run」と入力します。 出力を次のように比較します。
snake ekans自分のコードによって表示される結果が想定外である場合は、コードを確認し、エラーを見つけて更新する必要があります。 コードをもう一度実行して、問題が解決しているどうかを確認します。 期待する結果がコードによって生成されるまで、コードの更新と実行を続けます。
文中の単語を反転させるメソッドを作成する
面接担当者からフォローアップの質問があるとします。 面接担当者は、特定の文中の各単語について、元の位置を維持しながら、各単語を反転させるようあなたに求めています。 各単語はスペースで区切られていると仮定できます。 たとえば、"string return type" は "gnirts nruter epyt" になります。 このタスクを実行する方法について少し考えてみましょう。
前のタスクで記述したメソッドを使用すると、メソッドを使用して文字列内の各単語を個別に反転できることに気付くかもしれません。 新しい文を作成し、反転した各単語を追加できます。 それでは始めましょう。
現在のプログラムの末尾に新しい空白のコード行を作成します。 その後、新しいメソッドを作成するための次のコードを入力します。
string ReverseSentence(string input) { string result = ""; return result; }次に、
string.Splitを使用して、文字列から個々の単語を抽出できます。ReverseSentenceメソッドを次のように更新します。string ReverseSentence(string input) { string result = ""; string[] words = input.Split(" "); return result; }これで、文中の個々の単語にアクセスできるようになったので、各単語に対して
ReverseWordメソッドを使用し、resultに格納することができます。ReverseSentenceメソッドを次のように更新します。string ReverseSentence(string input) { string result = ""; string[] words = input.Split(" "); foreach(string word in words) { result += ReverseWord(word) + " "; } return result; }複合代入演算子内で
ReverseWordメソッドを呼び出す方法に注目してください。 このコードでは、ReverseWordから戻り値がキャプチャされ、resultに追加されます。 戻り値を持つメソッドは、データ型が要件に適合している限り、必要な場所であればどこでも使用できます。このコードでは、反転した各単語が結果に追加され、スペースが追加されます。 ただし、反転した文の末尾に余分なスペースが残ります。
末尾の余分なスペースは、
string.Trimを使用して削除できます。 メソッドを次のコードで更新します。string ReverseSentence(string input) { string result = ""; string[] words = input.Split(" "); foreach(string word in words) { result += ReverseWord(word) + " "; } return result.Trim(); }このメソッドの戻り値の結果について考えてみましょう。 メソッドでは、データ型が一致する限り、その実行全体、さらには return ステートメントでも、他のメソッドを使用できます。
これで、メソッドを呼び出す準備ができました。
inputテキストとConsole.WriteLineステートメントを次のように更新します。string input = "there are snakes at the zoo"; Console.WriteLine(input); Console.WriteLine(ReverseSentence(input));
作業を確認
このタスクでは、統合ターミナルからアプリケーションを実行し、コードが正しく動作していることを確認します。 それでは、始めましょう。
コードを以下と比較して、正しいことを確かめます。
string input = "there are snakes at the zoo"; Console.WriteLine(input); Console.WriteLine(ReverseSentence(input)); string ReverseSentence(string input) { string result = ""; string[] words = input.Split(" "); foreach(string word in words) { result += ReverseWord(word) + " "; } return result.Trim(); } string ReverseWord(string word) { string result = ""; for (int i = word.Length - 1; i >= 0; i--) { result += word[i]; } return result; }Ctrl + S または Visual Studio Code ファイル メニューを使用して作業内容を保存します。
必要に応じて、Visual Studio Code の統合ターミナル パネルを開きます。
[エクスプローラー] パネルで、TestProject フォルダーの場所にあるターミナルを開くには、[ TestProject] を右クリックし、[ 統合ターミナルで開く] を選択します。
ターミナルのコマンド プロンプトで、「dotnet run」と入力します。
コードによって次の出力が生成されることを確認します。
there are snakes at the zoo ereht era sekans ta eht oozコードによって表示される結果が異なる場合は、コードを確認し、エラーを見つけて更新する必要があります。 コードをもう一度実行して、問題が解決しているどうかを確認します。 期待する結果がコードによって生成されるまで、コードの更新と実行を続けます。