GNU/Linux >> Linux の 問題 >  >> Linux

方法:プログラミング入門–変数、型、およびデータの操作

ハウツーシリーズ

これは、プログラミング入門

の5部構成のシリーズの第3部です。

  1. プログラミング入門:はじめに
  2. プログラミング入門:最初のプログラム
  3. プログラミング入門:変数、型、およびデータの操作
  4. プログラミング入門:フロー制御
  5. プログラミング入門:オブジェクト指向プログラミング

プログラムに戻る

このシリーズの前の2つの記事では、平均して、記事ごとに1行のコードを記述しました。これでは、別の行を追加しますが、変数とデータ型について話し始めるため、既存の行も変更します。

この記事の目的は、変数と型、およびこれらを操作して「HelloWorld!」を出力するだけではないプログラムを作成する方法について説明することです。

カバーすることがたくさんあるので、指を準備して、それに取り掛かりましょう。

変数の使用

現在のプログラムは、2行のコードで非常にシンプルなままです:

Console.WriteLine("Hello World!");
Console.ReadLine();

最初の行はテキストの一部をコンソールに出力し、2番目の行はユーザーからの行を読み取ります。しかし、私たちが入力したこの行はどこに行き着くのでしょうか?現在、取得するために何もしていないため、無になっているだけなので、すぐに変更しましょう。

次のように2行目を変更します。

String input = Console.ReadLine();

ここで行っているのは、メソッドReadLineから出力されるものすべてに「文字列入力」(それが何であれ)を割り当てる必要があるということです。 Consoleで呼び出されます 静的クラス。

等号を使用して、C#および多くの同様の言語で値を割り当てます。等号の左側にあるものはすべて、右側にあるものの値が割​​り当てられます。

String inputの2つの単語 意味が異なります。 String 値のタイプとinputを示します 値を表すために使用する名前です。ここで行っているのは、変数を作成することです。 タイプを持つ「入力」と呼ばれる 「文字列」の。タイプについては、この記事の後半で説明します。

プログラミングでは、変数を使用してデータをメモリに保持し、データを簡単に操作できるようにします。これは、実際には変数とは呼ばずに、日常生活でも使用します。たとえば、「あなたの電話」を考えてみてください。これは、時間の経過とともに変化する可能性のある特定の電子機器の名前を覚える簡単な方法です。または、「米ドルからユーロへの為替レート」を検討してください。そのレートを常に覚えているわけではなく、急速に変化するため、値よりも名前で参照する方が簡単な場合があります。

変数を使用すると、値が何であるか、または値が変更されるかどうかに関係なく、値ではなく名前で特定のデータを参照できます。私たちのプログラムでは、データはユーザーがEnterを押す前に入力したものです。 鍵。この場合、その特定のデータに付ける名前は「入力」ですが、別の名前を付けることもできます。実際、変数に名前を付けるためだけにさまざまなパターンがあり、キャリアの後半でそれによって非常に混乱する可能性があります。

ブレークポイントを使用したデバッグ

これを今すぐ試すことができますが、試す前に、ブレークポイントと呼ばれるVisualStudioのトリックを紹介します。 。ブレークポイントを使用すると、プログラムの実行を停止して、実行されているコードの行を確認できます。さらに、そのポイントから1行ずつコードをステップスルーすることもできます。

ブレークポイントを作成するには、カーソルをコードの最初の行に移動して、F9を押します。 または、ブレークポイントを設定する行の行番号の左側の余白をクリックします。正しく行うと、線全体が赤くなり、余白に赤い円が表示されます。

図1:追加されたブレークポイント

ブレークポイントはに実行を停止することに注意してください 設定した線。また、ブレークポイントは、Visual Studioなどの開発ツールを使用してアプリケーションを実行する場合にのみ機能するため、アプリケーションを配布する前にブレークポイントを削除しない場合は、まったく問題ありません。

次に、F5を押します または、メニューの[スタート]ボタンをクリックして、アプリケーションが起動するのを確認します。その直後に、Visual Studioがポップアップ表示され、実行する次の行が黄色で表示されます。

図2:ブレークポイントヒット

この時点で、実行を段階的に制御し、コンソールウィンドウで結果を確認できます。一歩先に進むには、F10を押します VisualStudioで。コンソールウィンドウを前面に移動し、コードが1行進んだことを確認します。これで、「HelloWorld!」が表示されます。期待どおりにウィンドウに表示されます。

図3:実行される次のコマンドライン

注:プログラマーは、コードが「デバッグ」として実行されているときに、コードにフックするこのプロセスをよく参照します。このプロセスは、コードが期待どおりに機能していることを確認するために行う可能性のある種類のデバッグの一例です。


VisualStudioでコードをもう一度進めます。これを行うと、コンソールウィンドウが自動的に表示されることに注意してください。このイベントは、Console.ReadLine()を実行するときにコンソールがユーザーからの入力を必要とするために発生します。 メソッド。

好きなテキストを入力して、Enterを押します 。これを行うと、Visual Studioがポップアップ表示されます。これは、入力を入力したので、実行を続行でき、コードをステップ実行しているだけだからです。

このVisualStudioウィンドウで、「ローカル」というタブが表示される画面の下部に注目したいと思います。見つからない場合は、メニューに移動して[デバッグ]-> [Windows]-> [ローカル]を選択するか、CTRL+Dを押して開くことができます。 次にL

[ローカル]ウィンドウを開くと、コンソールウィンドウに入力した値に設定された「入力」と呼ばれる変数があることがわかります。私の場合、「こんにちは!」と入力しました。

図4:ローカルのデバッグ

[ローカル]タブには、現在のスコープで使用できる変数が表示されます。ただし、このデータの操作と使用を開始する前に、変数型の概念を理解することが重要です。

変数タイプ:静的および動的

ご覧のとおり、プログラマーが「タイピング」と呼ぶ方法には2つのアプローチがあり、どちらもキーボードのキーを押すこととは関係ありません。どちらのアプローチにも長所と短所があります。いいえ、どちらが最適かはお話ししません。自分で判断するのに十分な時間があり、おそらく、一部のプログラマーがどちらか一方をほぼ熱狂的に好む理由を理解するようになるかもしれません。

2つのアプローチは静的です および動的 タイピング。これらの記事で使用している言語であるC#は静的に型付けされた言語ですが、JavaScriptなどの他の一般的な言語は動的に型付けされた言語です。違いを説明させてください。

先ほど、変数「input」を作成したときに、それがStringであると判断したことに気づきました。 変数。 String は、どのタイプのデータが変数に入ることができるかを示すのに役立つ用語です。 Visual Studio(または技術的にはプログラミングコードをマシンコードに変換するコンパイラー)が反対し、協力を拒否するため、互換性のないデータを変数に追加することはできません。

String は単なるテキストであり、ほとんどすべてのものを保持できます。これは、ユーザーに任意のテキストを入力するように求める場合に意味があります。ただし、データの操作を開始する場合は、潜在的な問題があります。

たとえば、ユーザーに年齢の入力を求め、ユーザーが13歳未満の場合は、特定の機能を制限したいとします。

「こんにちは!」かどうかをどのように判断しますか。 13よりも小さいですか?テキストの一部を計算する方法がないため、できません。 「トマト」と45を足したものは意味がありません。

このような状況は、静的に型付けされた言語が異なる変数型を持っている理由です。プログラムをユーザーに送信する前に、データに対して算術演算やその他の演算を実行できるかどうかを知ることができます。

C#、VisualBasic、Javaなどの静的に型指定された言語では、変数が保持できるものを事前に定義する必要があり、これらの規則に従わずにプログラムを作成またはコンパイルすることはできません。その見返りとして、Appleを3.42と比較したり、「あなたのビジネスではない」年齢の人にアルコールを販売することが合法かどうかを判断しようとしたりしないことが保証されます。

動的型付けされた言語では、そのような保証はありません。代わりに、任意のタイプのデータを保持できる変数を操作するだけです。動的型付けされた言語の例はJavaScriptです。 JavaScriptでは、プログラマーは、「yes」を18に追加または比較しようとするとコードがクラッシュする可能性があるため、取得したデータが期待値であることを確認する必要があります。

注:実際には、方法に応じて、ほとんどの言語で18に「はい」を追加できます。ほとんどの場合、「yes18」になりますが、これはおそらく期待したものではありません。


静的に型付けされた言語では、すべてのメソッドが特定のタイプのデータを返すか、場合によっては何も返さないこともわかります。たとえば、Console.ReadLine() メソッドは文字列値を返すため、String inputを設定すると効果的です。 私たちが行ったように、そのメソッドからの出力に可変です。

しかし、後で何かにその番号を使用したいので、ユーザーに1から10までの番号を選択するように依頼したい場合はどうなりますか?簡単なゲームの作成を始めてみましょう。

推測ゲームプログラム

これから作成するゲームは推測ゲームです。 1から10までの秘密の番号を選び、それがどの番号であるかをユーザーに推測してもらいます。このゲームは後でさらに高度なものにするため、今のところ、ユーザーは1つの推測しか得られないため、10%の確率で正しくゲームを作成できます。実際、この記事では、それらが正しいかどうかをテストすることすらしません。テストするには、まだ学習しない概念である条件とフロー制御が含まれるためです。

まず、小数を持たない数値の変数タイプは整数、またはintと呼ばれます。 略して。 int 非常に大きな数を保持できますが、通常はCPUアーキテクチャの種類によって制限され、32ビットCPUは最大約44億の整数を保持します。それ以外にも、他の変数タイプを使用できます。ただし、簡単な例では、通常のint うまくいくでしょう。

すべてのタイプの変数に対して、単純な値を直接割り当てることができます。例:

int value = 10; 
string name = “Frank”;

変数が「意味をなす」限り、変数に対して操作を実行することもできます。たとえば、2つの整数値を足し合わせることができます。

int value1 = 10;
int value2 = 3;
int value3 = value1+value2;

これらの行を含むコードの部分がこのポイントを通過した後、変数「value3」に格納される整数は13です。

メソッドの戻り値から値を割り当てることもできます。 Console.ReadLine()からの結果を割り当ててみましょう intへのメソッド 、 しましょうか?まだ行っていない場合は、プログラムの実行を停止してください。次に、2行のコードを次のように更新します。

Console.WriteLine("Guess a number between 1 and 10:");
int input = Console.ReadLine();

これを行うと、赤い波線のケース(以下の図5を参照)と、「タイプ「文字列」を「int」に暗黙的に変換できません」というエラーリストのエラーメッセージが表示されます。

図5:赤い波線の場合

Console.ReadLine()から出力される値が原因で、このエラーが発生します は文字列であり、コンパイラは、ユーザーが入力できる内容を数値に変換できることを保証できません。ユーザーが「NO!」と入力する場合があります。たとえば、その入力を数値に変換する方法はありません。

もちろん、この問題を回避する方法はあります。コンパイラーに、特定のタイプのものとして入ってくるものをすべて受け入れるように強制することができます。実際、これはどのタイプでも実行できます。これは、キャストと呼ばれるプロセスです。 。

変数型をキャストするとき、コンパイラーはある変数型から別の変数型に変換するために最善を尽くします。このキャストは、たとえば、10進数があり、整数が必要な場合に機能する可能性があります。

decimal decimalvalue = 3.14M;
int integervalue = decimalvalue;

最初の行は、値3.14をdecimalに割り当てます。 decimalvalueという変数 。 2行目は、その10進値を整数に割り当てようとします。

注:Mは、10進数値を作成しているというコンパイラーへのヒントとしてのみ存在します。これは、この点にさらに混乱を加えるために、decimalにはいくつかのタイプがあるためです。 倍精度および浮動小数点値を含む値。知っておくと便利ですが、この記事で心配する必要のある点はありません。


VisualStudioでこれらの行を入力すると、decimalが原因で、今でも波線が発生する場合があります。 値がintに適合しません 価値。試してみると、.14が失われ、integervalueの値が3のままになります。 。

この振る舞いはまさに私たちが望むものかもしれません。この場合、decimalをキャストできます intの値 、事実上、コンパイラに10進値から整数値への明示的な変換を受け入れるように強制します。これを行うには、値の前に括弧で囲んだタイプを付けます。これらのコード行を上からのコードと比較してください。

decimal decimalvalue = 3.14M;
int integervalue = (int)decimalvalue;

これで、Visual Studioの波線が消え、コンパイラーは満足しています。数字の詳細が失われていますが、これがあなたの望むものであると確信しているかもしれません。

C#では、10進数から整数値に変更する場合など、データが失われる可能性がある場合、コンパイラーは値をキャストするように要求します。ただし、データが失われる可能性がない場合は、互換性のある変換を喜んで受け入れます。 intを割り当てようとした場合 decimalの値 たとえば、コンパイラからの喧嘩はありません。

ただし、これまでのところ、問題の解決策に実際に近づいているわけではありません。 Console.ReadLine()からの文字列値をキャストしてみることができます intに 、ただし、コンパイラは、文字列値を自動的に整数に変換できない(図6に示すように)と文句を言います。これは、ユーザーからの情報を数値に変換できることを事前に保証する方法がないためです。

図6:文字列をIntにキャストする際のエラー

これを解決するためのより良い方法があるので、恐れることはありません!解決策は、静的メソッドを使用して文字列値を整数に解析することです。これは、intにあります。 自分自身を入力します。そのため、int.Parseを呼び出すことができます メソッド、Console.ReadLine()から入ってくるものは何でも送信します メソッドを実行し、整数を元に戻します。

それでは、プログラムコードを更新して、最初にユーザーにデータの入力を求め、次にデータをstringに取得するようにしましょう。 「テキスト」と呼ばれる変数、そして最後に「テキスト」を整数に解析します。

Console.WriteLine("Guess a number between 1 and 10:");
string text = Console.ReadLine();
int input = int.Parse(text);

これを行うと、すべての波線が消え、プログラムが期待どおりに実行されるはずです。最後の行の後にブレークポイントを設定して、実行を停止し、変数を調べてください。実行中に数値を入力するとどうなるかを確認してください。

図7:有効な実行

「input」は値が3であることを示していますが、私の場合は「text」は「3」の値です(二重引用符に注意してください。二重引用符は文字列値を示します)。

>

しかし、数字以外のものを入力するとどうなりますか?さて、数字の代わりに「こんにちは」のようなものを入力すると、プログラムはクラッシュします。 Visual Studioでは、以下の図8に示すように、実行が停止し、例外について通知します。

図8:無効な実行

プログラマーとして、ソフトウェアがクラッシュすることを望まないため、このバグを処理する必要があります。ただし、プログラムのフローを操作する必要があるため、次の記事に残しておきます。この点に到達するために、すでにかなりの説明を行っています。

変数、タイプ、およびデータのまとめの操作

今のところ、この3番目の記事を締めくくる時が来ました。あと一行のコードしか書かないにもかかわらず、たくさんの新しい資料を取り上げました。心配しないでください。私が何年も前にこれを学び始めたとき、私にとっても多くの紛らわしい側面がありました。

この記事では、変数の概念について説明し、データ型と、データ型が重要である時期と理由について説明しました。変数を作成する方法や、キャストによってデータをあるタイプから別のタイプに変換する方法についても学びました。ステップバイステップのデバッグ、ブレークポイント、およびVisualStudioで使用可能な変数を検査する方法について学習しました。

また、今学んだことは言語やプラットフォーム間で非常に一般的であり、静的型付けと動的型付けなど、さまざまな概念を紹介して説明するように注意を払っています。

次の記事では、フロー制御について説明します。これにより、プログラムの実行を制御する方法を学び、さまざまな条件をチェックして、プログラムが次に何をすべきかを判断できます。

ハウツーシリーズ

これは、プログラミング入門

の5部構成のシリーズの第3部です。
  1. プログラミング入門:はじめに
  2. プログラミング入門:最初のプログラム
  3. プログラミング入門:変数、型、およびデータの操作
  4. プログラミング入門:フロー制御
  5. プログラミング入門:オブジェクト指向プログラミング

Linux
  1. Cプログラミングチュートリアル4-変数とメモリ

  2. キャッシュとしてのRedis:その仕組みと使用理由

  3. コマンドラインでXキーとポインターグラブを操作しますか?

  1. データが重要である理由とその保護方法

  2. Linuxで環境変数とシェル変数を設定/作成する方法

  3. Linux で環境変数を設定、一覧表示、および削除する方法

  1. Linux環境変数:LinuxVPSでの読み取りと設定の方法

  2. RabbitMQデータと構成をバックアップおよび復元する方法

  3. OSWatcher を開始および停止する方法