4つの言語での車の番号。 パート1







小さな紹介



私は比較的最近、ITの世界に参入しました。iOS向けのアプリケーションを開発しているのはわずか2年です。 しかし、Objective-CとSwiftに加えて、JavaとC#の世界は常に私を魅了しました。 定期的に、これらの言語の基本を教えたビデオを見るために時間をかけましたが、画面からコードを表示して書き換えるだけではありませんでした。 そして、友人がかつて私に助言した数学ゲームを思い出しました。







ゲームの本質はこれです。通りを歩いて、車の番号を見ます。 そして、各番号ですべての数字の合計を考慮します(たとえば、番号8037では8 + 0 + 3 + 7をカウントする必要があります)。 これはゲームの最も簡単なレベルです。 2番目に難しいレベルは、数値の前半と2番目の合計(80 + 37)を計算することです。 3番目のレベル-すべての数値を乗算(ゼロをスキップ:8 x 3 x 7)および4番目-数値の前半に2番目(80 x 37)を乗算します。







一般的に:私はこのゲームを(コンソール版で)4つの言語で書くことに決めました:Swift、Objective-C、Java、C#。 何から来たの? 見てみましょう。











どこから始めますか?



コンソールアプリケーション用の空のプロジェクトを作成することから始めます。SwiftとObjective-Cの場合はXcodeを、Javaの場合は当然IntelliJ IDEAを、C#の場合はXamarin Studioを使用します。







まず、補助クラスGameStart



ます。 彼は、キーワードを入力してアプリケーションを終了するまで、ユーザーからの応答を要求します。







スイフト



クラス自体を作成します。







 class GameStart { }
      
      





その中に、 exitWord



プロパティと初期化子があります。







 private var exitWord: String init(with exitWord: String) { self.exitWord = exitWord }
      
      





これが私たちのキーワードになります。







また、ユーザーが終了ワードを入力するまで、常にユーザーに回答を求めるstartGame



メソッドがあります。







 func startGame() { print(GreetingMessage.replacingOccurrences(of: ExitWordPlaceholder, with: self.exitWord)) guard let inputWord = readLine() else { print(ErrorMessage) return } self.check(inputWord: inputWord) } private func check(inputWord: String) { if inputWord == self.exitWord { print(GoodByeMessage) } else { print(InputAcceptMessage.replacingOccurrences(of: InputWordPlaceholder, with: inputWord)) startGame() } }
      
      





ご覧のとおり、 startGame



メソッドはユーザーに挨拶し、ユーザーが入力した内容をコマンドラインから読み取り、結果の文字列をcheck(inputWord:)



メソッドにcheck(inputWord:)



ます。







使用された文字列定数:







 private let ExitWordPlaceholder = "{exitWord}" private let InputWordPlaceholder = "{inputWord}" private let GreetingMessage = "Please enter your answer (enter \"\(ExitWordPlaceholder)\" for exit):" private let InputAcceptMessage = "You entered \"\(InputWordPlaceholder)\".\n" private let GoodByeMessage = "Good bye.\n" private let ErrorMessage = "There is unknown error, sorry. Good bye.\n"
      
      





クラスの準備ができたので、オブジェクトを作成してstartGame()



メソッドを呼び出す必要があります。







 let gameStart = GameStart(with: "quit") gameStart.startGame()
      
      





コンソールでは、次のようになります。













次に、Objective-Cで同じクラスを作成しましょう。



 //   GameStart.h @interface GameStart : NSObject - (instancetype)initWithExitWord:(NSString *)exitWord; - (void)startGame; @end //   GameStart.m const NSString *GreetingMessage = @"Please enter your answer (enter \"%@\" for exit):"; const NSString *InputAcceptMessage = @"You entered \"%@\".\n"; const NSString *GoodByeMessage = @"Good bye.\n"; const NSString *ErrorMessage = @"There is unknown error, sorry. Good bye.\n"; @interface GameStart() @property (strong, nonatomic) NSString *exitWord; @end @implementation GameStart - (instancetype)initWithExitWord:(NSString *)exitWord { self = [super init]; if (self) { self.exitWord = exitWord; } return self; } - (void)startGame { NSLog(GreetingMessage, self.exitWord); NSString *inputWord = [self readLine]; if (inputWord) { [self checkInputWord:inputWord]; } else { NSLog(@"%@", ErrorMessage); } } - (void)checkInputWord:(NSString *)inputWord { if ([inputWord isEqualToString:self.exitWord]) { NSLog(@"%@", GoodByeMessage); } else { NSLog(InputAcceptMessage, inputWord); [self startGame]; } } - (NSString *)readLine { char inputValue; scanf("%s", &inputValue); return [NSString stringWithUTF8String:&inputValue]; } @end
      
      





さて、メソッド呼び出しでオブジェクトを作成する:







 GameStart *gameStart = [[GameStart alloc] initWithExitWord:@"quit"]; [gameStart startGame];
      
      





次はJavaです。



GameStart



クラス:







 public class GameStart { private static final String GreetingMessage = "Please enter your answer (enter \"%s\" for exit):"; private static final String InputAcceptMessage = "You entered \"%s\".\n"; private static final String GoodByeMessage = "Good bye.\n"; private String exitWord; public GameStart(String exitWord) { this.exitWord = exitWord; } void startGame() { System.out.println(String.format(GreetingMessage, exitWord)); String inputWord = readLine(); checkInputWord(inputWord); } private void checkInputWord(String inputWord) { if (inputWord.equals(exitWord)) { System.out.println(GoodByeMessage); } else { System.out.println(String.format(InputAcceptMessage, inputWord)); startGame(); } } private String readLine() { java.util.Scanner scanner = new java.util.Scanner(System.in); return scanner.next(); } }
      
      





そして呼び出し:







 GameStart gameStart = new GameStart("quit"); gameStart.startGame();
      
      





C#の4人のリーダーを完成させる



グレード:







 public class GameStart { const string GreetingMessage = "Please enter your answer (enter \"{0}\" for exit):"; const string InputAcceptMessage = "You entered \"{0}\".\n"; const string GoodByeMessage = "Good bye.\n"; readonly string exitWord; public GameStart(string exitWord) { this.exitWord = exitWord; } public void startGame() { Console.WriteLine(string.Format(GreetingMessage, exitWord)); string inputWord = Console.ReadLine(); checkInputWord(inputWord); } void checkInputWord(string inputWord) { if (inputWord.Equals(exitWord)) { Console.WriteLine(GoodByeMessage); } else { Console.WriteLine(string.Format(InputAcceptMessage, inputWord)); startGame(); } } }
      
      





呼び出し:







 GameStart gameStart = new GameStart("quit"); gameStart.startGame();
      
      





少しの乱雑さは痛くない



また、プロジェクトに補助クラスを追加します。これは、車の番号を形成します(番号は4桁のランダムな数字で構成される必要があります)。 クラス自体をRandomizer



と呼ぶだけです。







スイフト:



 class Randomizer { var firstNumber: UInt32 var secondNumber: UInt32 var thirdNumber: UInt32 var fourthNumber: UInt32 init() { self.firstNumber = arc4random() % 10 self.secondNumber = arc4random() % 10 self.thirdNumber = arc4random() % 10 self.fourthNumber = arc4random() % 10 } }
      
      





Objective-C:



 //   Randomizer.h @interface Randomizer : NSObject @property (assign, nonatomic) NSInteger firstNumber; @property (assign, nonatomic) NSInteger secondNumber; @property (assign, nonatomic) NSInteger thirdNumber; @property (assign, nonatomic) NSInteger fourthNumber; @end //   Randomizer.m @implementation Randomizer - (instancetype)init { self = [super init]; if (self) { self.firstNumber = arc4random() % 10; self.secondNumber = arc4random() % 10; self.thirdNumber = arc4random() % 10; self.fourthNumber = arc4random() % 10; } return self; } @end
      
      





Java:



 public class Randomizer { private static Random random = new Random(); int firstNumber; int secondNumber; int thirdNumber; int fourthNumber; public Randomizer() { firstNumber = random.nextInt(10); secondNumber = random.nextInt(10); thirdNumber = random.nextInt(10); fourthNumber = random.nextInt(10); } }
      
      





C#:



 public class Randomizer { static readonly Random random = new Random(); public int firstNumber; public int secondNumber; public int thirdNumber; public int fourthNumber; public Randomizer() { firstNumber = random.Next(10); secondNumber = random.Next(10); thirdNumber = random.Next(10); fourthNumber = random.Next(10); } }
      
      





ご覧のとおり、初期化中に、クラスの4つのフィールドに0〜9のランダムな整数を入力するだけです。







汎用性が私たちのすべてです



アプリケーションにはゲームが1つしかないという事実にもかかわらず、将来アプリケーションの拡張性を提供するふりをします。 したがって、 greet(with exitWord: String)



メソッドとcheck(userAnswer: String)



メソッドを使用して、 Game



のインターフェイス( Swift



およびObjective-C



のプロトコル)を追加します。







スイフト:



 protocol Game { func greet(with exitWord: String) func check(userAnswer: String) }
      
      





Objective-C:



 @protocol Game <NSObject> - (void)greetWithExitWord:(NSString *)exitWord; - (void)checkUserAnswer:(NSString *)userAnswer; @end
      
      





Java:



 public interface Game { void greet(String exitWord); void checkUserAnswer(String userAnswer); }
      
      





C#:



 public interface IGame { void greet(string exitWord); void checkUserAnswer(string userAnswer); }
      
      





これで、最初のパートを終了します。 難易度を選択してゲーム自体を実装し、 ブラックジャックを使用して、プレイヤーの正当性に対する応答を確認し、 ... 後半で行います。 すべてに良い。 :)








All Articles