見出し画像

超初心者プログラミング講座 第5回 ~変数と値の種類~

はじめに

さて、よりプログラミングしてる感が高まる部分に入っていきましょう。前の投稿でもさらっと登場させましたが、変数についてです。

そのついでと言ってはなんですが値の種類っていうのも一応気にしておくと良いと思いますので、サラッとお伝えできればと思います。

1.変数とは?

さて、変数変数と言いながら、結局変数ってなんぞや?っていう話になるんですが、一応種類とかあるんですよ。

ただ、今回はとりあえず、基本的に変数ってこんなもん程度の感じで使えればあとは、考え方だとは思うので、基本的な変数について説明します。

まず変数とは?ですが、自分は「値等を入れておく箱」っていうイメージで考えています。

変数は英語ではVariableという単語になるのですが、この単語は実はエラーで出てくるときにあっそれかってヒントになるので、覚えておいてください。

<?php
 $message = "超初心者プログラミング講座";

 echo $message;

早速ですが、このように書いてみました。

ブラウザで実行すると、普通に文章が出ると思います。

2.コードの説明

さて、簡単に説明していきましょう。

まず【$】ですね。いっそこれが変数と言ってもいいのではないか?ってくらい、変数にはかかせません。

プログラミング言語においてはこの限りではありませんが、変数としての考え方使い方はほぼ同じですね。

まず、上で説明したように、値を入れる箱というイメージで説明をすると、、、

$で段ボールを用意します。
messageで段ボールに名前を書きます(引っ越しで中身はこれって感じ)
=で右の値を左に代入
""は文字列

流れとしてはこういう形です。

で、この段ボールの中身っていうのは、今ではとりあえず一つの段ボールに一つの値しか入れることができません(厳密にはいろいろありますが、今回は極端なイメージで)。

もしも一度値を入れた段ボールに対して違う値を入れようとすると、今まで入っていた値を段ボールから取り出して、新しい値を入れるという感じになります。

では、このあたりの挙動と、なぜ変数を使うのか?を書いてみます。

3.変数の再代入と変数は本当に必要か?

<?php

 $message = "超初心者プログラミング講座";
 echo $message;

 $message = "中級レベルへアップグレード!";
 echo $message;

さて、まずはこういう形を見ていきましょう。

表示結果は
超初心者プログラミング講座中級レベルアップグレード!

改行してねってのを入れてないので、横並びかとは思いますが、echoしてねって命令を二つ使ってますので、上からの処理を順番に行っていきます。

$messageという段ボールに"超初心者プログラミング講座"という値を入れました。
最初のechoでその段ボールをあけて中身を表示させました。

次に同じ$messageという段ボールに"中級レベルアップグレード!"という値を入れるので、最初の"超初心者プログラミング講座"という値を出して、入れ直しました。
次のechoでその段ボールをあけて中身を表示させました。

これですね。では、こういう形だとどうでしょうか?

<?php

 $message = "超初心者プログラミング講座";

 $message = "中級レベルアップグレード!";
 
 echo $message;

echoを最後の一回だけ行っています。

流れで見れば簡単ですね!

最初の段ボールに最初の値は入れたけど、すぐに違う値を入れなおしたので、最後のechoの結果は

中級レベルアップグレード!

となります。

再代入は便利な反面、ちゃんと使いどころとか使い方を考えないと、思わない不具合とかバグの原因にもなりますので、注意してくださいね♪

では、変数が必要か?
なぜそう考えるかというと、今のデモコードは量があまりにも少ないのもあります。

だって、変数という段ボールを用意するために、一行多いんですよ。
ただ、echoすればいいじゃんって話です。

ただですね。ちょっとあれですが、デモコードを書いてみます。

<?php

 $message = "超初心者プログラミング講座";

 echo
  "今回は{$message}に起こしいただいてありがとうございます!<br>
  この{$message}では、初心者よりも超初心者の方を対象としたプログラムを考えています。<br>
  では、つたない文章ですが、今後とも{$message}をよろしくお願いいたします!";

なるべくですが、コードはコピーはするけど、自分でテキストエディタに打ち込んでください。

コピペでは実際理解しきれない部分があります。

というか、こういうのがあれなので、コピーしたら全角スペース混ざってますwww

さて、今回は1つの文章の中に$messageを三つ埋め込んでみました。

普通なら変数を使わずその箇所に超初心者プログラミング講座という文言を入れていくと思いますが、もしも、、、この箇所の文言を変えたいなとなったらどうでしょう?

想像してみてください。
確かに検索し、複数選択し、置換するということも方法としてはありますが、実際にはしてはいけない箇所などを気にしないといけません。

しかし、この場合、$messageの箱の中を変えるだけで、その箱を使っている箇所が全て変更されるわけですね。

今回はただの文章、単語という値を入れているのでこういう使い方ですが、いろいろ使い方というか、変数という箱にはそこそこ自由に中身は入れれるものです。

〇変数という箱に値を入れる、割り当てることを「代入」と言います。
〇=は「代入演算子」と呼びます。

4.データ型を見ていこう!

さて、ここではデータ型と呼ばれるものを見ていきながら整理していきましょう。

ようは、日本語は勝手に日本語とするわけではなく、これは文章なんだなとか、これは数字なんだなとか、いちおうこれはこういうデータですよっていうのがあるんですね。

それらの扱い方もそれぞれちょっと違ったり、実際にいろいろ動作させる中でデータ型の違いで動かないとかっていうこともあります。

①文字列(string)
今までのコード内にでてきてますね。('_')、("_")で囲ってあると、それは文字なんだねって認識になります。
ストリング型ですね。

②整数(int)
次は、数値です。数値といっても整数と呼ばれるものですね。
5とか、100とか、20とか、88とか。
イント型って呼んでます。

③浮動小数点数(float)
なんかいきなり小難しそうな言葉が出ましたが、、、
ようは小数点が入る数値のことです。
0.2とか1.8とか100.95467とかw。
フロート型って呼んでます。

④null
これ、ちょっと掴みにくいとこもあるんですが、呼び方は、、、
自分は「ヌル」ですけど、「ナル」とも呼ばれてます。まぁどちらでも通じるとは思いますw
ヌル型、ナル型と、データ型としてはあれですけど、ようは、データが無いんです。何もないっていう意味で、、、
null型ってどんなのがあるかっていったら、実はnull(NULL)しかないんですw
データが無いっていうのもいろいろ見方はあるので、データが無い=NULLでもないので、ちょっと注意してください。

⑤真偽値(bool)
こちらは真偽値なので、〇か×かってことですね。
true(TRUE)かfalse(FALSE)です。ただ、データの扱い方によっては、0と1で表現される場合もあったりはしますが、それは扱い方であるので、真偽値とはってことになると、true or falseで考えていただく方が適切かと思いますね。
ブール型って呼んでます。

⑥配列(array)
こちらも、いざいろいろ書く時には、本当に使います。
もう使わざるを得ないくらい使いますw
変数とはまた少し違うんですが、変数はあくまでも一つの箱に一つのものってイメージです。
配列もまた、ある種の一つの箱ですが、自分は箱ってイメージもあるけど、ファイルってイメージも持ってます。
考え方としては共通する複数の項目を共通ファイルにまとめるって感じでしょうか?
配列も結局変数と同じやり方ではあるんですが、
人ってファイルの中には、名前、生年月日、性別など分類がわかれるデータが様々あります。
それぞれ、名前の箱、生年月日の箱って作ってもいいのですが、それだと、少し管理もしづらくなったり、わかりにくかったり、コード自体がどんだけ~な状況になったりもするので、人というファイルを作りそこに名前のページ、生年月日のページ、性別のページっていうのをファイリングしていくようなイメージで自分は持ってます。
難しいと、さらにそのページからまた配列が派生していったりして、大項目~中項目~小項目みたいなことにはなるんですが、そこらはまた配列をやってみてからですね♪
とりあえず「複数の値を一つにまとめる」って思っておいてください。
アレイ型って呼んでます。アーレイ?w

⑦オブジェクト(object)
PHPではオブジェクト型と呼ばれるものがあるんですが、これはすぐには使いません(たぶんww)ので、こういうのもあるよ程度で思ってください。

5.変数の初期化とエラー

それではですね。
そこそこ自由度の高いPHPとはいえ、、、変数とかを使いだすと、さらにエラーを誘発することも多いのも事実かと思います。

<?php

 //$message = "超初心者プログラミング講座";

 echo $message;

ちょっと最初のとこをコメントアウトにして、$messageに文字を代入させないで、いきなりechoしてみました。

Notice: Undefined variable: message in C:\xampp\htdocs\index.php on line 5

こちらのエラーは、通知:未定義の変数:messageという翻訳になるかなと思いますが、$messageって箱をechoしろと言われても、その箱が用意されてないやん!っていうエラーです。実はこれ、プログラムが止まるようなエラーではなくて、、、

<?php

 //$message = "超初心者プログラミング講座";

 echo $message;

  echo "これは表示されるんですよ";
  
  

処理は続行されるエラーになります。

箱はないけど、それはすっとばして他の処理やっていこうかねって進んじゃいます。

こういう動作はするけど、細かくエラーが出るのは放置するのではなく、ちゃんとこういうエラーも対処していくことが望まれますね。

変数の初期化っていうのは、結局、最初に箱を用意したら中身はどうしておくのか?っていうことで、空だったら何もしないでは動きません。

これは、例えば、エラー表示なんかイメージしやすいんですが、、、
ログイン画面で、最初に見てるページにエラーってそんな出てるものじゃないですよね?

でも、IDやらを間違えると、間違えてますよってエラーが出るものって多いじゃないですか?

いろいろ動作に関してはやり方等あるので一概ではないですが、今回の考え方で行くと、実は$errorっていう箱はずっと置いてある状況です。

そして、ユーザーがIDやらを入力して送信すると、その結果が✖だった場合に$errorっていう箱の中に「違ってますよ~」っていう値を入れて、表示されている状況。

ということはですよ?
$error = "違いますよ";って最初からしちゃうと、入力前から「違いますよ」って表示になるんですね。

これは初期値としては今回は適切ではなく、初期値はあくまでも「何も表示したくない」ということなので、実は、、、、

$error = "";

と書いたりします。

エラーという変数の箱には、文字入れる予定だけど、最初は何もいれないよってことで、何もないという値を入れるっていうイメージですね。

何もないのは、何もしないではなく、空白というデータがあるということをプログラミングする上では必要な認識の一つではないでしょうか?

上のデータ型における、$error = null;と書けば、当然それもアリかもしれませんね。

エラーという変数の箱には「何もない」という認識。

ただ、自分はあまりこういう場合はしないです。というのも、結果としてエラーという変数の箱には文字列(string)型が入るということなので、最初から同じ型で初期化したくなります。
状況によりますけどね、、、

文字列はダブルクオーテーション又はシングルクオーテーションで囲むと文字列として捉えてくれるわけですが、""だけであれば、空という値が入っているという感じになり、同じ文字列を再代入していくので、$errorって文字列が入る箱だよねって思うので。

6.数値と文字列について

では、最後になりますが、数値と文字列について最後に書かせていただきます。

<?php

  $string = "1234";

  $num = 1234;
  
 

このような変数を書いてみました。

同じ1234ではありますが、データの型が違うよねっていうのはお分かりいただけるかと思います。

出力結果として、1234が出れば型なんてどうでもいい、、、そう考える方もいらっしゃるとは思いますが、やはりデータの型が違うといろいろとややこしかったりもします。

では、、、

<?php

  $string = "1234";
  $num = 1234;

  echo "{$string}はString型ですが、{$num}はInt型です";

実行してみてください。ぶっちゃけ見た目では同じです。

では次に

<?php

  $string = "1234";
  $num = 1234;
  
  echo "{$string}はString型ですが、{$num}はInt型です";
  

と値を全角にしてみました。

これで実行してみてください。

ぶっちゃけechoはできていますが、エラーが出ていませんか?

Warning: Use of undefined constant 1234 - assumed '1234' (this will throw an Error in a future version of PHP)

なんか、PHPのバージョンによって、厳格なダブルクオーテーションとかって話みたいなのも拝見しましたが、、、

つまり、Int型っていうのは整数じゃないですか。全角っていうのはInt型じゃないんですよ。

というのも$num=としたところで、それがなんの型か別に指定しているわけでもないんです。

じゃぁどうやって型が決まってるのか?
それはPHPが値見て、こりゃこれやろってやってくれてますwww

あっもちろん指定の方法はありますよ。それは次回以降に♪

今回のように全角にしてしまうと、基本的に文字列String型だよねっていう話になり、String型の場合はクオーテーションに囲まれた文字っていうことなので、クオーテーションどっちかつけなきゃいけませんよ!っていうエラーなんですね。

では、次に数値、整数であれば計算することも多いはずです。こういう状況でいくつかのパターンをやってみましょう。

<?php
 //1.値は半角同士
  $string = "1234";
  $num = 1234;
  echo $string + $num;
 
 //2.$stringを全角
  $string = "1234";
  $num = 1234;
  echo $string + $num;
 
 //3.$numを全角(クオーテーション無し)
  $string = "1234";
  $num = 1234;
  echo $string + $num;
 
 //4.値を両方全角
  $string = "1234";
  $num = 1234;
  echo $string + $num;
 
 //5.$numを全角で(クオーテーションあり)
  $string = "1234";
  $num = "1234";
  echo $string + $num;
 

どうでしょうか?

実行してみましょう。

①2468
はい、普通に計算できましたね。この結果はInt型でもあります。
あれ?$stringは""をつけて文字列としたじゃないか?ってなりますよね?
しかし、足し算してねって時に、文字ではあるけど半角だったので、PHPが気を利かして計算してくれちゃいましたwww

②Warnig:A non-numeric value encountered, 1234
エラーでましたね。それは①と違って全角にしたために、いやいやこれ数値じゃないから計算はさすがにできないよ~って言われ、結果としては$stringの値は0ではないんですが、まぁ無視というかされて、0+1234というイメージで強行されています。

③まぁ②と同じですが、エラーが追加されてますね。クオーテーションつけろっていうね。
考え方も②と同じです。今回は$stringの1234が表示されてるイメージですね。

④まぁ、もうわかりますね。全角なので数値じゃないやんと言われてます。

⑤クオーテーションつけたところで変わりません

ということで、全角なのか半角なのか?当然数字は半角でも文字が混ざってるとかもNGです。

だからこそ、データ型っていうのは実は気にしておかないと、ふとしたところでエラーが出たりとか、不具合がでたりとか、表示するだけならなんとでもなっても、いざ計算を挟みたかったり他の処理をしたりとか、変数を使いまわすとかいろいろなことをしていくと、そういう型をきちんと気にしていないと、どこが?とか、いやこれはこっちはこれでいいけど、、、、こっちはダメなら別の変数とかそういうことを考える必要があります。

今回のように思わぬところで値が0とされたりとかってことが起こるわけですね。

おわりに

今回最後は文字列と数値での話をしました。

まぁ混ざりやすい部分ですからね。しかしデータ型をいろいろあることもわかりました。

そこで、これは何型かがわかる表示の仕方を一つ記載しておきます。

<?php

 $string = "1234";
 
 var_dump($string);

var_dumpです。今回の表示結果はstring(4)"1234"となると思います。

String型であるということが書いてありますね。
これ、半角のままクオーテーション外してみたり、少数点にしてみたり全角にしてみたりいろいろ遊んでみてください。

TRUEって入れるのも良いですね。
そのTRUEにクオーテーションつけてみたりね。

いろいろ試してみてください。

データ型、、、、意外と面白いですよ^^

では!また次回!





よろしければ、サポートしていただくと、こんな記事でもより気を引き締めてしっかりとした内容をかけるようにとモチベーションが上がります! いろいろ楽しいことも書いていこうと思うので、ぜひ!サポートしてください!