見出し画像

プログラミングを始めてみようという話(第四回:データの型)


データの型ってなにさ?

前回くり返し言い続けたデータの型ですがそれってつまり何なんだよって話をします。
さかのぼると第二回の変数のところから出てきているのに今更感がありますね。

ざっくり分類するデータの型

ざっくり分類するとデータの型は二種類あります。

  • プログラム言語で定義されている型

  • ユーザが定義した型

それぞれについて説明していきます。

プログラム言語で定義されている型

プリミティブ型と呼ばれることもある予め用意されているデータの型です。
言語によって違いがあるのでここではC#を例にします。
自分の使う言語では何が使えるのか一度確認してみるといいでしょう。

プログラム言語で定義されている型の例

最初から全部おぼえるというより使いたいときにここを見て選ぶ感じでいいです。
太字のものだけでも覚えてたら効率上がるかも。

  • bool:"true"または"false"、真か偽かを表します。詳細は後ほど。

  • char:一文字だけ入る変数。文字列を編集するときにたまに使います。

ここから全部数値が入ります。

  • byte:1byteの整数。極稀にbyte単位でデータを扱いたいときに使う感じ。

  • short:桁数の少ない整数。メモリを節約したいときに。

  • int:-2,147,483,648 ~ 2,147,483,647まで扱える。整数を使うときはこれがメイン。

  • uint:0 ~ 4,294,967,295まで扱える。マイナスがなくなったint。

  • long:-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807まで扱える。めっちゃ桁数が必要なときに使う整数型。

  • float:少数が使いたいときに使う数値型。

  • double:めっちゃ桁数が必要なときに使う数値型。

※整数とは:小数点以下を含まない数値(例:-3,-2,-1,0,1,2,3)

bool型

正しいか正しくないかを表しています。
長くなるのであとにします。

char型

一文字だけを扱うことができます。
文字列は扱えないので注意。

byte型

あんまり出番がないけど0~255の整数を扱うことができます。

short型

-32,768 ~ 32,767の整数が扱えます。
殆どの場合intでいい。

int型

-2,147,483,648 ~ 2,147,483,647の整数が扱える数値型のメイン。
整数使うときはほとんどこれでいいです。

uint型

0 ~ 4,294,967,295の整数が扱えるマイナスのないint型。
int型からマイナスを取りたいとき(”-5”を”5”にしたいとき)に使ったりしてもいいかもしれません。

long型

-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807の途方もない桁数が扱える。
どうしても必要なとき以外は使わないほうがいいです。

float型

少数も扱える数値型。
割り切れないときとか大変なので扱いには注意が必要です。

double型

もっとたくさん桁数が扱える数値型。
基本的にfloatでいいけどもっとたくさん桁数がほしい(0.000000000000000000000000000000000000001まで扱いたいときとか)に使う。

サンプルを見ながらそれぞれを確認

bool型

いちばん簡単なAIの話をしましょう。

public class Hello{
    public static void Main(){
        bool sin = true;
        if (sin) {
            System.Console.WriteLine("正しい");
        } else {
            System.Console.WriteLine("誤り");
        }
    }
}

初めて「if」という単語が出てきましたね。
これは条件によって処理を分岐するものでプログラミングにおいて必須と言っても過言ではないので後日詳しく解説しますがここでは簡単に文法だけ触れておきます。

if (条件(bool型)) {
    // 条件がtrue(真)のときの処理
} else {
    // 条件がfalse(偽)のときの処理
}

このプログラムでは変数”sin”がtrue(真)の場合に”正しい”を出力、false(偽)の場合に”誤り”を出力します。
プログラムが自身で判断しているのでこれが分かればAIを理解したも同然ですね。
ここで大切なのはtrueが文字列ではない点です。

bool sin = "true";

上記のような書き方をするとエラーになります。
bool型に文字列型を代入しようとしているところが問題ですね。

次はもう少しbool型に焦点を当ててみましょう。

public class Hello{
    public static void Main(){
        bool sin = (1 == 0);
        if (sin) {
            System.Console.WriteLine("正しい");
        } else {
            System.Console.WriteLine("誤り");
        }
    }
}

この例では1と0を比較して同じものの場合「正しい」、違うものの場合「誤り」を出力しています。
新しい要素が出てきましたね。
2つの値を比較するというものです。

bool sin = (1 == 0);

「(1 == 0)」の部分で0と1を比較してその結果を変数”sin”に代入しています。
以前「A = B」をAにBを代入すると説明しましたが「A == B」とすることでAとBが同じかどうかを比較しています。
同じ場合は真(true)、違う場合は偽(false)が帰ってきます。
今回、1と0は違うのでfalseとなり「誤り」が出力されますね。
この「==」のことを比較演算子と言います。
いくつか種類があるのでまとめて説明します。

比較演算子

  • A == B:AとBが同じ場合true、違う場合はfalseになります。

  • A >= B:AがB以上の場合true、違う場合falseになります。同じ場合でもtrueになるところがポイントです。

  • A <= B:AがB以下の場合true、違う場合falseになります。上記と同じく同値の場合にtrueとなります。

  • A > B:AがBより大きい場合true、違う場合falseになります。

  • A < B:AがBより小さい場合true、違う場合falseになります。

public class Hello{
    public static void Main(){
        bool sin = (1 == 0);
        
        WriteBool(sin);
        
        sin = (1 >= 0);
        
        WriteBool(sin);
        
        sin = (1 <= 0);
        
        WriteBool(sin);
        
        sin = (1 > 0);
        
        WriteBool(sin);
        
        sin = (1 < 0);
        
        WriteBool(sin);
    }
    
    public static void WriteBool(bool sin) {
        if (sin) {
            System.Console.WriteLine("正しい");
        } else {
            System.Console.WriteLine("誤り");
        }
    }
}
誤り
正しい
誤り
正しい
誤り

これで条件分岐するプログラムが書けるようになりましたね。
プログラムの殆どをマスターしたと言ってもいいでしょう。

char型

文字を1文字だけ持つことができます。
文字列を持つことはできないので注意が必要ですね。

public class Hello{
    public static void Main(){
        char moji = 'あ';
        System.Console.WriteLine(moji);

    }
}

あまり言うことはないですがポイントは「"」ダブルクォーテーションではなく「'」シングルクォーテーションを使うというところです。
ダブルクォーテーションだと1文字でも文字列として扱われるため注意が必要です。

short,int,uint,long型

整数型をまとめて説明します。
明示的に型を指定していない整数はint型として扱われます。そのため基本的にはint型を使用することをおすすめします。
どの型も同じように扱えますが桁数などに特徴があるのでそこだけ注意が必要ですね。

public class Hello{
    public static void Main(){
        short shnum = 0;
        int innum = 0;
        uint uinum = 0;
        long lonum = 0;
        
        shnum = 32767;
        innum = 32767;
        uinum = 32767;
        lonum = 32767;
        
        shnum = 2147483647;
        innum = 2147483647;
        uinum = 2147483647;
        lonum = 2147483647;
        
        shnum = 4294967295;
        innum = 4294967295;
        uinum = 4294967295;
        lonum = 4294967295;
        
        shnum = 9223372036854775807;
        innum = 9223372036854775807;
        uinum = 9223372036854775807;
        lonum = 9223372036854775807;
        
        shnum = -5;
        innum = -5;
        uinum = -5;
        lonum = -5;
    }
}

実行してみるとエラーがたくさん出ますね。
エラーが出ているところは桁数がオーバーしているところや負の数が使えないところに代入しようとしているところです。
その変数に入る値がどれくらいの範囲で変化するかを考えて型を選びましょう。

float,double型

小数を扱うことができる型です。
小数の桁数は考え方が難しいのでfloatよりdoubelのほうが桁数が多いくらいの認識で問題ありません。
明示的に書かれていない小数はdouble型として扱われるのでdouble型を使用することが推奨されます。

public class Hello{
    public static void Main(){
        int innum = 0;
        double bdnum = 0;

        MatometeWrite(innum, bdnum);
        
        innum = 2 - 5;
        bdnum = 2 - 5;

        MatometeWrite(innum, bdnum);
        
        innum = 7 / 2;
        bdnum = 7.0 / 2.0;

        MatometeWrite(innum, bdnum);

    }
    
    public static void MatometeWrite(int innum, double dbnum){
        System.Console.WriteLine("int:" + innum);
        System.Console.WriteLine("double" + dbnum);
    }
}
int:0
double0
int:-3
double-3
int:3
double3.5

int型では小数点以下が切り捨てられていることがわかりますね。
また7.0のように一見意味のなさそうな小数点ですがこれによってdouble型として扱われるようになるところもポイントです。
もう一つ、初めて割り算が出てきたので算術演算子についても触れておきましょう。

算術演算子

プログラミングで計算式を書くときは小学校で習ったものとは少し違う記号が使われます。

  • A + B:AとBを足します。そのままですね。

  • A - B:AからBを引きます。ここもそのままです。

  • A * B:AとBを掛けます。アスタリスクは掛け算です。

  • A / B:AをBで割ります。分数で考えるとわかりやすいかもしれません。

  • A % B:AをBで割ったあまりを計算します。17 % 3 は2になります。(17 ÷ 3 = 5あまり2 なので)

public class Hello{
    public static void Main(){
        int innum = 0;
        double bdnum = 0;

        innum = 1 + 1;
        
        System.Console.WriteLine("1 + 1 = " + innum);
        
        innum = 2 - 5;

        System.Console.WriteLine("2 - 5 = " + innum);
        
        innum = 2 * 5;

        System.Console.WriteLine("2 * 5 = " + innum);
        
        innum = 7 / 2;
        bdnum = 7.0 / 2.0;
        
        System.Console.WriteLine("7 / 2 = " + innum);
        System.Console.WriteLine("7.0 / 2.0 = " + bdnum);

        innum = 17 % 3;
        System.Console.WriteLine("17 % 3 = " + innum);
    }
}
1 + 1 = 2
2 - 5 = -3
2 * 5 = 10
7 / 2 = 3
7.0 / 2.0 = 3.5
17 % 3 = 2

まとめ

  1. 何かを判断するときはbool

  2. 整数は(だいたい)int

  3. 小数は(だいたい)double

次回、ついにユーザが定義した型について触れていきます。
オブジェクト指向と呼ばれる分野に足を踏み入れます。
分からなければ何でも聞いてください。

この記事が気に入ったらサポートをしてみませんか?