早期リターン
CoddyのC#ジャーニー「ロジックとフロー」セクションの一部。レッスン 18/66。
早期リターンは、答えが得られた時点や無効な条件に遭遇した時点でメソッドをすぐに終了するテクニックで、条件分岐をネストさせるのではなく用いられます。
ユーザー名を検証する2つの方法を比較してみましょう。
早期リターンを使わない場合(条件分岐のネスト):
public bool ValidateUsername(string username)
{
bool isValid = false;
if (username != null)
{
if (username.Length >= 3)
{
if (username.Length <= 20)
{
isValid = true;
}
}
}
return isValid;
}早期リターンを使用する場合:
public bool ValidateUsername(string username)
{
// usernameがnullの場合は早期に戻る
if (username == null)
return false;
// usernameが短すぎる場合は早期に戻る
if (username.Length < 3)
return false;
// usernameが長すぎる場合は早期に戻る
if (username.Length > 20)
return false;
// ここまで到達した場合、usernameは有効
return true;
}早期リターンを使うと、コードが読みやすくなり、インデントの段階を減らせます。
チャレンジ
簡単支払いを処理できるかどうかを次の条件に基づいて判定する、ProcessPaymentというメソッドを書きましょう。
- 支払い金額は正の値でなければなりません
- 口座残高は十分でなければなりません
- 口座はロックされていてはなりません
各条件を確認するために早期リターンを使い、適切なエラーメッセージを返してください。
このメソッドは次のようにします。
- 3つのパラメーターを受け取ります。
decimal paymentAmount、decimal accountBalance、bool isAccountLocked "Payment processed successfully"またはエラーメッセージを文字列で返します- 検証には早期リターンを使います
エラーメッセージは、次の形式と完全に一致するように出力してください。
- "Error: Payment amount must be positive"
- "Error: Insufficient funds"
- "Error: Account is locked"
自分で試してみよう
using System;
public class Program
{
public static string ProcessPayment(decimal paymentAmount, decimal accountBalance, bool isAccountLocked)
{
// ここにコードを書いてください
}
public static void Main(string[] args)
{
decimal paymentAmount = decimal.Parse(Console.ReadLine());
decimal accountBalance = decimal.Parse(Console.ReadLine());
bool isAccountLocked = bool.Parse(Console.ReadLine());
string result = ProcessPayment(paymentAmount, accountBalance, isAccountLocked);
Console.WriteLine(result);
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: C#オンラインコンパイラ