プログラミング考え方講座「変数と特殊文字」

プログラミング考え方講座

どんなプログラミング言語でも大体使われる変数

これがないと、世にあるほぼ全てのシステムが作れなくなってしまう

それほど、重要なポイント。それなのに、奥が深い

今回は、そんな変数を扱おう。文字列を扱う際に重要な要素である特殊文字についても解説する。

また、ここで解説するもの以外にも、変数に関連するものとして、あとで解説するポインタも重要な考え方だ。

その時のためにも、ここで基礎を抑えてしまおう。

スポンサーリンク

今回の説明内容

まず、どこからどこまでを解説するかを決めておこう。

今回は、変数とは何かからその使い方までを扱う。

また、という概念も説明する。以前JavaScriptでは解説しなかったのだが、これにも隠れた形で使われている。

ここも理解しておくことで、より組みやすくなるので、挑戦して欲しい。

また、主に出力部分に絡んでくるのだが、文字列の中に特殊な文字を使う考え方も紹介する。

これも言語問わず頻出する内容なので、覚えておきたい。

変数

変数とは

プログラミング自体が初めてという方向けに、改めて説明しておこう。

そもそも変数とは何だろうか

恐らく、中学や高校の数学でやった\(x\)とか\(y\)とかを思い浮かべる人が多いと思う。

イメージはそれで問題ない

プログラミングにおける変数とは、数字や文字列など、様々なデータを格納しておくことができる箱だ。

変数の使い方

さて、変数を使用する場合には、基本的には同じ方法で使うことになる。以下の方法だ。

  1. 使用する変数をあらかじめ定義する。(=変数宣言)
  2. 変数の中にデータを入れる。(=代入)
  3. 変数を実際に使う。

言語によっては一つ目の変数宣言が不要なものもあるが、今回解説している3言語は全て必要になる。

一つずつ見ていこう。

変数宣言

JavaとC言語の変数宣言

まずはJavaで…といきたいところだが、実はJavaとC言語の変数宣言は全く同じ

なので、同時に解説してしまおう。

変数の型 変数名;

このように、後述するというものと、実際に使用する変数の名前を半角スペース区切りで書く。

そうすると、その変数名を書くだけで、その箱を呼び出すことができる。

では、このについて。

プログラミングにおいて、扱うデータは数字文字列など、色々なものがある。

数字の中でも、整数小数…と種類が分かれている。

この、どんなデータを変数に入れるか、というのがだ。

今回は整数を扱いたいので、整数を表すint型というものを使う。

なので、例えばxという整数を入れる変数を用意したければ…

int x;

と書けば用意できる。

JavaScriptの変数宣言

なぜJavaScriptだけ別枠なのか…もちろん、異なる部分があるから。

というわけで、JavaScriptの場合の変数宣言は以下のようになる。

var 変数名;

型のところが固定でvarとなる。

…そう、JavaScriptでは、型の考え方は表面上には出てきていない。あくまで、これが変数だよというものだけで定義できてしまう。

これには、メリットデメリット両方ある。

メリットは、型を考えなくていい。入れるものによらず、常に一定の書き方で問題なくなる。

デメリットは…実際に何のデータが入っているかが分かりづらい

表面上に出てこないというだけで、実際は型の考え方は使われている

だから、それを意識しておかないと、例えば「数字に対する操作のはずなのに、なぜか文字列になっちゃってる…」ということがそこそこ起きてしまう。

見た目に出てこないからといって、まったく考えなくていいわけでもないのだ。

変数への代入

次は、変数にデータを代入してみよう。

これは…3言語とも書き方まで共通だ。

代入する場合は、以下のように書く。

変数名 = 代入する内容;

イコール1個で挟み、右側の内容を、左側に書いた変数に入れることができる。

Java、C言語の場合は、宣言時に書いた型と一致していないとエラーになるので注意しよう。

で、代入する内容のところには数字文字列はもちろん、別の変数や、計算式なんかも書ける。

このうち、直接書く数字や文字列のことを、リテラルと呼ぶ。

本講座では多分そこそこ出てくる単語なので、ちょっと覚えておいて欲しい。

ちなみに、前回出力した際に、処理に渡した"Hello World!"というやつ。これもリテラルだ。

このように、文字列の場合にはダブルクォーテーションで囲ってあげる必要がある。

また、毎回いちいち変数を宣言する文を書いて、その後に代入して…というのも面倒だ。

そこで、宣言と代入を同時に行うことができる。

(変数の型もしくはvar) 変数名 = リテラルなど;

こうすることで、中身にデータが入った変数を用意する、ということが一度にできるのだ。

変数の使用

では、これを実際に使ってみよう。今回、例として…

二つの変数に数字を入れ、それを足して表示する

ということをしてみよう。

Javaの変数使用

まずはJavaから。

class Sample02 {
    public static void main(String args[]){
        int num1 = 10;
        int num2 = 20;
        int sum = num1 + num2;
        System.out.print(sum);
    }
}

3行目、4行目で二つの数字を用意して、それをint型変数に代入

5行目で、さらにその合計を計算して、新しいint型変数に代入している。

それを、出力している、という流れだ。

なお、前回は文字列を渡した表示用出力に数字を渡しているが、JavaとJavaScriptはこれで問題ない

C言語の変数使用

なんとなく想像はできると思うが、変数部分はJavaとほとんど何も変わらない

ただ、出力がかなり変化する

#include<stdio.h>

int main(){
        int num1 = 10;
        int num2 = 20;
        int sum = num1 + num2;
        printf("%d", sum);
        return 0;
}

4~6行目はJavaと全く同じなので大丈夫だと思う。問題は7行目。

前回はそのまま文字列を書いていたが、今回はコンマで区切って二つ渡している。

一つ目は、出力する内容…なのだが、%dとか書いてあるのにこれを実行するとしっかり30と表示される

この%dというやつはフォーマット指定子と呼ばれるもので、文字列リテラルの中に変数や別のリテラルなどを埋め込む場合に用いられる。

%dと書いた部分には、整数が入れられる。これを、文字列の中で出てきた順に、後ろに何を入れるか指定するのだ。

例えば、10, 20, 30という三つの数字を出力する場合は、以下のようになる。

printf("%d, %d, %d", 10, 20, 30);

他にも、文字列を入れる場合には%sというものを使ったりする。

このフォーマット指定子はC言語特有の内容ではあるが、Javaでも関数によっては使うこともできる。覚えておこう。

JavaScriptの変数使用

最後に、JavaScriptだ。

var num1 = 10;
var num2 = 20;
var sum = num1 + num2;
console.log(sum);

これまで解説した内容で全部理解できると思う。

ここまでよろしいだろうか。

補足:JavaとJavaScriptにおける文字列連結

さて、C言語では文字列の中に数字を埋め込む話をした。

では、JavaとJavaScriptはどうなのか。これ、とても簡単にできる

そのまま、文字列と他のものを足せば、それが文字列として連結されることになる。

どういうことかというと、例えば表示を合計は○○ですというように変えたいとしよう。

この○○のところに変数の値を入れたい。

その時、両者とも以下のように書ける。数字は上のサンプルと同じくsumに入っているとしよう。

"合計は" + sum + "です"

合計はという文字列sumに入っている数字ですという文字列を足し算でくっつける。

こうすることで、この全体を一つの文字列とすることができる。

あとは、これ全体を出力部分に渡せばOKだ。

なお、C言語ではこれはできない。

文字列を連結するときの考え方もある、ということを意識しておこう。

特殊文字

さて、ここまでのJavaやC言語の内容を、特にLinux環境などでコンソール実行してもらっている方、何か気にならないだろうか。

…出力の後、改行もされずにそのまま次のコマンド入力が表示されてしまっている

つまり、最後に改行したい

そこで、文字列を以下のように直してみる。

System.out.print("合計は" + sum + "です
");
printf("合計は%dです
", sum);

さあ、これで実行…できれば楽だったのだが

実は、これではエラーが発生してしまう改行をただ単にダブルクォーテーションの中に入れるだけでは、改行を出力できないのだ。

ではどうするか。これには、特殊な書き方が用意されている。

エスケープシーケンスと呼ばれるものだ。

特殊な文字を、特定の意味を持たせた文字列で書き表すことができる。

考え方としては、改行などを、一つの塊で他の文字と同じように扱うイメージ。

改行は、文字列の中で、Windows環境なら\r\n、Linux環境なら\nと書く決まりになっている。

なので、Winodws環境なら…

System.out.print("合計は" + sum + "です\r\n");
printf("合計は%dです\r\n", sum);

このように書くことで、それぞれ出力の最後に改行させることができるのだ。

JavaScriptも、今回まではコンソールに出力している。

ここでは1回の出力ごとに勝手に改行されていたので気にならなかったが、このエスケープシーケンスは使える

例えば…

console.log("合計は\r\n" + sum + "\r\nです");

というふうに書けば、

合計は
(sumの中身)
です

と、3行で一つの出力ができる。

このほかにも、タブスペースを表す\t\マーク自身を表す\\などがある。

このエスケープシーケンスは言語によらない考え方だ。是非覚えておきたい。

まとめ:変数と特殊文字

今回は、プログラミングで最も重要とも言える変数を扱った。

変数とは、データを保管しておくための箱という考え方だ。

そして、そのデータがどんなものかを指定するのが、型という考え方。

また、変数を使う時の考え方は、もう一度書くと以下の通りだ。

  • 変数を(この使い方をするよという型と共に)定義する
  • その変数に、実際に値を代入する
  • それを使う

今は、この考え方で問題ない。この文の意味は、ポインタの時に話そう。

また、もう一つ、特殊な文字を他の文字と同じように扱えるエスケープシーケンスというものも紹介した。

今回紹介した改行\r\n(Linux環境は\n)、タブスペース\t\マーク\\以外にも色々ある。

今後も、出てきたら随時解説していこう

次回は、条件分岐を扱う。

また、この時に非常に密接に関係してくる真偽値というリテラルも紹介しよう。

更新情報はTwitterでも呟いている。よかったら、ページ下部のTwitterアイコンから覗いていってほしい。

それでは。

コメント

タイトルとURLをコピーしました