Computer Science from Scratch

カナダで習ったjavaをまとめてます。

Javaの基本のキを語る②前編

今日はチャプター2の内容の前半部分をベースに開設していきますが、記事の最小の方はアプリの立ち上げ方とかについての説明なので好きなところから各々読んでください。

 

javaで実際に簡単なコードを書いてみよう!

これからjavaの色んなルールやコードの種類について学んでいきますが、まずは一番簡単なプログラムを書いてみましょうー

まずIntelli J IDEAを立ち上げます。

次にフォルダを作ります。

左上のfileからnewの中のprojectを選択します。

上記の画面になったら新規のJDKを作ります。

上記の画面のDOwnLoadをクリックしたら、JDKが作成できます。

上記のようにダウンロードしたJDKを選択すると、、、

Projectの名前を入れる欄が出るので好きな名前を入力。

すると作業画面に移行するので、srcとうfileからnewを選択。

プログラムの名前を決めます。頭文字は数字はNGで二文字目以降はつかってもok。%や&といった記号とスペースは使えないので要注意。大文字と小文字は区別がされるので、HelloWorldみたいな名前にすると分かりやすいです。

以下のような感じでプログラムを書き込みます。

内容は

public class First {
public static void main(String[] args) {
System.out.println("Hello. My name is Computer Science from Scratch.");
}
}
//出力結果は Hello. My name is Computer Science from Scratch.

って感じです。一行目から見ていきましょう!

一行目は public class First {}です。これはclass headerと言って一番の大枠を記述したものです。クラスヘッダーはclass specifier、class 、class nameが書かれています。チャプター6とか8くらいに詳しいクラスに関する記載があるので今は、class specifier = publicと覚えておきましょう。

class はこれが一つのクラスであることを宣言しています。そしてそのあとに続くのがクラスの名前。ここではFirstにしています。三枚前の写真で決めた名前がそっくりそのままここに反映されます。{}括弧が続くのもルールなのでそういうもんかと覚えましょう。

続いてpublic static void main(String args) {}です。これはmethod headerというやつです。メソッドとは小さなプログラムの塊で、これが沢山できて、一つの大きなプログラムとなります。イメージとしては

public class Takusan{

    一つ目のmethod{}

    二つ目のmethod{}

    三つ目のmethod{}

}

みたいな感じ。メソッドという単語はjava内では複数の処理やお仕事を一つにまとめたやつという意味です。ふんわりしてますがそういう用語なのでしょがないですね。メソッドには種類が幾つかあってこれはメソッドの名前がmainなのでmain methodと言います。最初のうちは訳が分からないと思いますがpublic static void main(String args) {}はこれで1セットなので覚えましょう。ノータイムでこれを入力してください。ちなみにクラスもメソッドも{}で内容を囲わないとエラーが出るので注意してください。

main methodの中にはSystem.out.println("Hello. My name is Computer Science from Scratch.");というコードがあります。ここがボディの部分で主役です。

printlnとprint mehodについて

Sysytem.out.printlnは画面左下にあるconsoleと呼ばれる部分に文章を表示する略語です。本当はコンソールに文字を表示させるためには物凄い量のプログラムを書かなければならないですが、あまりに多くの人が頻繁に使うので、いちいち書いていると時間の無駄だということでJava API (Java Application Programmer Interface)という名のライブラリにjavaを開発している人が覚えさせました。つまり合言葉の図書館にprintlnかprintって書いたらコンソールに文を表示させるっていうプログラムの略語ってことだよ!ていうこと記憶させたということです。それによって僕達がSysytem.out.printlnの一行で簡単にコンソールに文を表示させることが出来るようになったわけです。

じゃあSyste.outの部分は何なん?という疑問にお答えしましょう。

Systemはクラスです。は?

クラスはFirstじゃないのかよ?となりますよね。このクラスはFirstなのですが。すでにJava APIさんが書いてしておいてくれたクラスが沢山あります。そのうちの一つにSystemというものがあります。時短のためにわざわざありがとうございます。Java APIさん。そして、この中の一つであるoutというobjectの中にあるprintlnもしくはprintなんですよね。だから田中!って学校で言っても沢山の田中がいて分からないのが同じように、○○学校の何年何組の田中っていう感じでClassの中のObjectの中のmethodというの全部打ち込まなきゃいけないんですよ。めんどくさいけどずっとプログラムを書いていると予測変換が出るのですぐ慣れます。

Sysytem.out.printlnは文をコンソールに表示させるコードだと分かりました。肝心の表示させたい文はどれでしょうか?

それはこの文の後ろに続くやつです。Firstの例で見るならば("Hello. My name is Computer Science from Scratch.");の部分ですね。この内の""で囲われている部分がargumentとして表示されます。argumentとは簡単に言ってしまえば()内に書かれた文字とか数字とかのことですかね。

なのでカナダというargumentを表示させたい場合は

System.out.println("カナダ");

になりますね。

説明内でprintlnもしくはprintと書けば~みたいな事を毎回書いている通り皆さんお気づきの通りコンソールに文字を表示させるmethodは二種類あります。printlnとprintです。いまから違いを説明しましょう。

printlnは各行に渡って表示されるのに対して、printは改行やスペースが全く取られません。どういうことかわからないと思うので具体例を用いて説明します。

System.out.println("カナダ");

System.out.println("日本");

という二行のボディのコードがあったとしましょう。このコードの表示結果は

カナダ

日本

です。続いてprintを見てみましょう。

System.out.print("カナダ");

System.out.print("日本");

このコードの表示結果は

カナダ日本

です。違いが分かりましたか?

printlnは自動で改行されているのに対してprintはくっついていますよね?これがprintlnとprintの違いです。

改行の方法は他にもあって

System.out.print("カナダ");

System.out.print("\n日本");

という風に\nを入れ込むとそこで改行が発生したり。\tを入れ込むとそこでTabボタンを一回押したスペースだけ空白が出来るといったテクニックがあります。他にも\bとか\rといったやつもあるので気になる方はチェックしてみて下さいねー

勉強を進めていくにあたってargumentとかclassとかの定義が分からなくなってのちのち発狂することがあると思います。僕は何度もありました。その時は是非初心に返ってこのページに戻り読み返してみてください笑

Variablesについて

javaにはvariablesというものがあります。日本語訳すると変数ですね。変数はいわばデータを収納する箱です。この箱はコンピュータのメモリー内に沢山用意されていて変数を一つ作ると、その沢山ある箱の中の一つが使われます。箱の中にはデータ、つまり文字とか数字とかが入ります。漫喫とかカラオケみたいなイメージですよね。漫喫で一部屋借りるとき部屋の大きさや使い道によってプランがいくつかあると思います。パソコンが使える部屋だとかトイレに近い部屋だとか複数人は入れる部屋だとか。variablesにもそういった種類があって用途によって使いわけることになります。まずは最もオーソドックスなやつから見ていきましょう。

public class AboutVariables {
public static void main(String[] args) {
int number;
number = 5;
System.out.println("The number is " + number);
}
}
//出力結果は The number is 5

まず注目すべきは新出単語のintですね。ボディの一行目のヤツです。intはvariablesにある沢山のタイプの中の一つの型です。intの後のnumberはコードを書く人が自分で自由につけられる名前です。ここではnumberにしました。何が行われているかというと、とあるメモリー内の箱をintという数字を入れる為の箱として使いますと宣言して、その箱の名前をnumberにしたという事です。漫喫で言うと、受付で「intプランの部屋を一つ貸してー」と言ってnumberという表札を使用する予定の部屋にぶらさげたということです。

intは整数という英語のintegerの頭三文字を使っている事から分かる通り、整数を入れる為の専用のタイプです。

二行目のnumber = 5;はnumberと名付けられた箱の中に5という整数を入れるという作業をしました。

三行目のSystem.out.println("The number is " + number);は皆さんご存知の通りSystem classのout objectのprintln methodです。このコードによってコンソール内に()内の文字を表示させてくれます。ただ一つ前回と違う場所があります。分かりますか?

()内をよく見ると""の外にはみ出て+ numberというコードが見られます。前回()内にある""の中の文を表示させるということ教わりました。けど今回はそうではなくて「+ numer」がはみ出ているではありませんか!

そうなんです。intを含むvariablesは""外で書かなければならないのです。

理由は下の二つの文を見比べれば分かります。

public class AboutVariables {
public static void main(String[] args) {
int number;
number = 5;
System.out.println("The number is " + number);
System.out.println("The number is + number");
}
}

 

System.out.println("The number is " + number);の出力結果はThe number is 5 です。

System.out.println("The number is + number");の出力結果はThe number is  + number です。違いが分かりましたか?nnumberというvariablesが""の中に入ると変換されないんですね!

そして””の前後にvariablesが来る際は+記号で繋げます。なので

System.out.println("The number is " + number + "and my name is Suzuki.");

と書けば出力結果はThe number is 5 and my name is Suzuki.  となります。

因みにこういう使い方の+記号の事をString Concatenation Operators と言います。日本語だと連結演算子とか言うみたいですね。英語の教科書で勉強していると日本語名が分からない事が多々あるので、その時はこのブログで検索をかけてみて下さい。新出単語はその和訳も近くに載せてるはずです。

この+は文が長くなってしまったときにも使います。

System.out.println("My name is Suzuki. I come from Japan. I am 20 years old and my hobbies are playing baseball.");

は×です。文が長くなってしまって二行になってしまう際は+記号を使って、

System.out.println("My name is Suzuki. I come from Japan. I am 20 years ole and ” +

"my hobbies are playing baseball and go camping.");

としましょう。出力結果は全く変わりません。

英語で勉強する際はint number; の文をvariable declarationと言います。変数の宣言とい意味なのでそのままですね。

number = 5;の文をassignment statementと言います。はじめのうちは覚えておく必要がありますが、int number = 5; みたいな具合で、時短テクとしてこれらの二行を一行にまとめることが多くなるのでvariable declarationとassignment statementは頭の片隅においておけば大丈夫です。

勉強している際にまどろっこしい用語になるので一度整理しておきましょう!

  • int は変数(variables)のData Type(データタイプ)です。小数とか文字とか色々なデータの種類がある中でintなら整数のデータタイプだよって事です。
  • numberは変数(variables)です。変数の名前なのではないかと思う方もいると思いますが、数学でx = 5のxの事を”変数の名前”と思っている人は少ないと思います。これはまごう事無き”変数”です。しかし一部のサイトなどでは変数の名前という言い方をしている所もあるので柔軟に対応してください。
  • 5は変数に割り当てられた数字です。今後はLiteralと言います。

これらの用語がぐちゃぐちゃになると後々頭が痛くなるのできちんと覚えましょう。

そして最後の行が気になってる人も少なくないのではないでしょうか?気になってない方は博識な方か注意散漫な方なので気を引き締めていきましょう笑

最後の行は //出力結果は The number is 5 というコードです。//の後に続くコードはcommentと言って自由に好きな事が書けます。主に今まで書いてきたコードがどんな処理をするのかについて書きます。今度膨大な量のコードを書く時に昔書いたコードの内容を忘れてしまったり、複数人で一つの大きなプログラムを書きあげるときに分かりやすくするためです。最初は短いコードしか書かないので必要ないと思いますが、勉強を進めるにあたって少しずつ少しずつ書くコードの量が増えていきます。早かれ遅かれコメントを書かない自分にブチぎれる時が来るのでコメントを書く癖がつけておきましょう!

ブログ内では出力結果とかを記載する為にもコメントを使います。

VariablesとStringの違い

javaでは数字(variables)文字(String)は似て非なるものです。

"5"と5は全く違います。"5"は文字の5で、5は数字の5です。

だから例えば

int number;
number = "5";

はエラーです。intは整数を入れる為の箱であって文字を入れる為の箱ではないからです。文字を入れるためのものだったり小数を入れるためのものだったりがあります。

今Stringという新出単語が出てきましたが、和訳すると文字です。先ほど紹介したLiteralも和訳すると文字です。よく分からなくなってきた方はもう一度Literalとは何かを読み直しましょう。

Literalはnumber = 5 の部分の5の事で割り当てられた数字や文字の事を言います。

Stringは一種の変数です。仲間にintがいます。Stringを含めてVariablesについて説明します。

Primitive Variablesについて

整数のdata type(型)について

javaには様々なデータタイプがあります。小さい数字を入れるbyteやshort,今まで使ってきたintや以上大きな数字を入れるためのlongやfloat,doubleがあります。byteから順番に箱に使われるbyte数が1、2、3、・・・となっていくのでbyteなら-128~127が、intなら-2147483648~2147483648といった具合です。普通に使うのであればintで事足りると思うので通常はintを使うようにして下さい。100を超える数字なんて滅多に使わないからbyteでいいよーって思うときも原則intを使います。intが整数界の重鎮だからだそうです。intが基準になっているので、パソコン内でbyte同士の四則演算よりもintの四則演算の方が早い時があるそうなので。まあintに統一しといて損はないはずです、、、

じゃあ次は小数はどうすんの?っていう話をしましょう。

小数のdata typeについて

小数はfloatかdoubleを使います。

は?(本日二回目)

先ほど整数を表すために使えるfloatとdoubleでしたが、小数としても使えるんです。コンピュータ上におけるFloating-point literals(浮動小数点)の働き方について色んな説明を読んだんですけどぶっちゃけよく分かりませんでした。そんな自分でも全く問題なくプログラムを書けるので知らなくても問題ないのではと思います。向上心のあるそこの貴方は是非浮動小数点について学び、僕に分かりやすく教えてください。また、大は小を兼ねる感じなのかどうかはよくわかりませんが、普段はdoubleを使う事が圧倒的に多いです。小数を使いたい=doubleを使うと考えても初心者の頃は問題ないでしょう。

Boolean data typeについて

javaではbooleanデータタイプといってtrueかfalseしか入れられない型があるんですよ。使い方もそのまんまで

boolean bool = true;

みたいに書けばboolean型の変数boolにtrueが代入されたっていう。

のちのち大きなプログラムとか書く時に使うので知っておきましょう。ただ使わないとよく分からないと思うので練習問題とか教授や先生から貰ってやってみるといいかもですね。

Char data typeについて 

charという変数データタイプは文字一つだけを入れられるデータタイプです。使い方としては

char letter = 'A';

みたいな感じ。特徴は””ではなくて’’という点ですね。そして一文字しか入れられないの普通に不便すぎィと思う方もいると思います。まあ正直滅茶苦茶使うデータタイプではないのですが、他の解説のサイトとかを見ると思っている以上に使われているので、毎回charが出るたびに何のdata typeだっけ?とならないように覚えておきましょう。

まあ殆ど出番のない使い方ですが、Charにはもう一つの使い方があります。それは、Unicodeに対応した文字を代入させることです、Unicodeとは各アルファベットとかあいうえおに対して番号を振っているやつの事です。例えばAなら65番になります。

なので

char letter = 65;

System.out.println(letter);

の出力結果は Aになります。

Variablesのルールについて

Variables共通の大まかなルールについて説明します。

① 一つのVariableには同時に二つ以上のleiteralsを抱える事は出来ない。

int number = 5;

number = 10;

この時numberの数字は何でしょう?

答えは10です。5が入っていましたが、上書きされてnumberには10が入りました。10が入った途端に5はロケット鉛筆のように押し出されて消えてしまいます。

 

② 同じデータタイプなら一括で定義できる。

int number1, number2, number3 = 19, number4 = 23;

というようにnumber1~number4が全て同じデータタイプ、この例でいうところのintなら上記のように一括で定義する事が出来ます。

Operatorsについて

シンプルなOperators

+-*/%の事です。前四つは四則演算で%はmodみたいなやつです。つまりあまりを表示します。

int number;

number = 10%3;

System.out.println(number);

出力結果は1です。なぜなら10/3= 3あまり1だからです。四則演算の時と同様×と÷は一番最初に済まされて、その後に+と−が計算されますが%は×や÷と優先順位が同じなので、計算問題では注意が必要です。

テストによく出る事項としては割り算の計算結果です。

int number;

number = 5/2;

この時numberはいくつになると思いますか?はたまたエラーが表されるのでしょうか正解は2です。エラーが表示されるわけでもなく2.5だから四捨五入で3かなと思いきや2です。2.5で小数点以下は一律切り捨てなので2なんですね。

もちろんfloatやdoubleのデータタイプの場合は2.5ですよ。

複雑なOperators

続いてcombined assignment operatorsについてです。日本語訳すると複合代入演算子といったところでしょうか?僕は漢字の羅列を見ると頭痛がするので、日本語名には深掘りしませんが要するに+=とか-=とかの事です。

number += 10;  は number = number + 10; という意味です。勿論+-*/%全てに対応してます。

また++や--もあります。

number++;は number = number + 1; という意味です。これについては何個か後のチャプターで詳しく説明するので今は覚えなくてもいいです。

 

Math classのmethodsについて

java API(Java Application Programming Interfaces)には予めmathという名前のクラスがあって、math classには沢山の数学ネタが仕込まれているんです。math classには僕らがいつも書くプログラムと同じようにmthodが沢山書かれています。そのmethodsは使いたい放題です。ぜひ使いこなせる様になりましょう。

例えばpow method。

public class ExampleOfMath {
public static void main(String[] args) {
double result = Math.pow(2.0,3.0);
System.out.println(result);
}
}
//出力結果は 8.0

変数resultには2.0の3.0乗の計算結果である8.0が代入される。pow methodはdoubleでしか使えないので注意しよう。

他にはsqrt methodが有名。

public class First {
public static void main(String[] args) {
double result = Math.sqrt(256.0);
System.out.println(result);
}
}
//出力結果は 16.0

resultには256.0 = 16.0*16.0なので、16.0が代入されます。こちらもdoubleでしか使えないので注意が必要だね。

更には円周率が一瞬で代入されるPI method なんかもある。

public class First {
public static void main(String[] args) {
double result = Math.PI;
System.out.println(result);
}
}
//出力結果は 3.141592653589793

Variablesを変える方法

javaをやっていると頻繁にVariableを変えたくなる時があります。

例えばshortをintに変えたいなんてことがあるとします。shortはintよりビット数が高いので、

short s = 10;

int i = s;

と書けばそのまま i に10を代入させる事が出来ます。

では逆はどうでしょうか?

エラーが出てしまいます。しかし、やろと思えば出来なくはないのです。

やり方は

int i = 100;

short s;

s = (short) i ;

と書く事です。こう書けばモーマンタイです。

これをType Castingと言います。

ではdoubleからintへの移行はどうでしょうか?

public class Exchange {
public static void main(String[] args) {
double d = 1000;
int i;
i = (int)d;
System.out.println(i);
}
}
//出力結果は 1000

エラーになる事なく実行されました。

じゃあdoubleが小数の場合はどうなるのでしょうか?

public class Exchange {
public static void main(String[] args) {
double d = 1234.567;
int i;
i = (int)d;
System.out.println(i);
}
}
//出力結果は 1234

ただ小数点以下切り捨てになるだけで、問題なく実行されました。ただintの範囲を超えた数字をdに入れて、それを変換したとなるとiに何が入るかは分かりません。エラーこそ出ないものの危ない処理なのでやらない様にしましょう。

計算中に起こりうる懸念点

じゃあdouble×intとかになった時に計算結果はdoubleなのそれともintなの?とかって疑問に思いませんか僕が初めてjavaを勉強した時は全くそんな疑問は思い浮かびませんでした笑覚えなきゃいけないルールが多すぎてそんな事まで頭が回りませんよね。でもだからこそ、僕が書いているこのブログの様に一から順番に必要な事を教えてくれる記事が必要だと思ったんです。どのサイトを見ても用語の説明ばっかりで理解が深まりゃせん、、、まあそんな愚痴はおいといて説明の疑問の解答に移りましょう。

足し算の場合

a (double) + b (int)の場合はb が自動的にdoubleに切り替わって、計算結果もdoubleになります。

掛け算の場合

a (double) * b (int)の場合はb が自動的にdoubleに切り替わって、計算結果もdoubleになります。

といったの様にヒエラルキーの高いデータタイプにつられるというのが原則のルールになってます。あれ?doubleのはずなのにとか、intのはずなのに?みたいになったらまずはコレを疑ってみましょう!

 

このページも1万字を超えて僕も疲れてきたので今日はこの辺で終わりにします。次回はこの続きの後編になるので良かったらそちらも見てみて下さい。