Computer Science from Scratch

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

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

今回はJavaの基本のキを語るの後編です。前編を読んでない方は是非最初にそちらを読んでみて下さい。

Variableを変えない方法

Variableが変わると元に戻せなかったり計算する時に不都合が生じたり最悪エラーが出ます。プログラムを書いていれば最低100回はあります。という事でVariableを変えない方法を用意してくれました。(Java API さんありがと♡)
それがfinal というkeywordです。
final double taxRate= 1.10;
こう書けば誰がなんと言おうと消費税は10パーセントから変わりません。Math classを使うっていうのを前回習いました。実はjavaは他のclassのmethodとかを勝手に使ったりいじったり出来るんです!
public Class Itiban{
    method①{}
    method②{}
    method③{}
}

別のクラスにて
public Class Niban{          
    method①{}
    method②{}
    method③{
        Class itibanのmethod①を召喚!
    }
}

みたいな事です。
重要な事はこClass Nibanのmethod③はClass itibanのmethod①にあるVariablesとかを変更できちゃう事なんですよね。
Itibanのクラスに税率とか売り上げとかの数字を沢山入れてるのに外部のclassであるNibanから好き勝手にいじられたらたまったもんじゃないです。
そこでfinalというkeywordが活躍します。
final double taxRate = 1.10;
とfinal を頭につければこの値は一生外部からの変更が許されません。これで安心安全にVariablesが使えますね!

String classについて

こいつはjavaの中でも飛びぬけておもろいやつです。興奮気味に読みましょう(笑)

String はclassですが、使い方はdata typeのようなものとして扱うことが多いです。Stringは文の連続にも対応しているdata typeのようなものです。特徴は””マークで囲う事です。

例えば ”Hello. My name is Computer Science from Scratch.” これどっかで見かけませんでしたか?実はprintln、print methodの説明の時に使っています。

int number = 5; みたいに

String str = "Hello";

と書けばString型のdata typeの箱の一つにstrという名前を独自につけて、その箱にHelloという文字の羅列を入れたみたいな解釈で問題ないです。では、なぜStringはVariableではなくてClassなのか?それはClass だとString Class内で色んな処理が行われて使い勝手がいいから

は?

何言ってんのかさっぱり分からないと思いますので解説します。

例えばint を例にとってみましょう。int は

int number = 500; と書く事でint data typeのVariableであるnumber に500を代入する、と定義することが出来ます。これを他の数字と足したり引いたり色んな処理に使うわけですが、例えばこの500という数字に二桁目が何なのか知りたいと思った時あなたならどうしますか?結構頭を悩ませると思います。でも、Stringはクラスだから一瞬で出来ちゃうんです!

String str = "500";

としましょう。String classはJavaの開発者さん達が既に書いてくれているクラスです。そして、そのクラスの中には特定の場所の文字を数えてくれるmethodsが用意されているんです。Javaの開発者さん!痒い所に手が届くとはこの事でめんどくさい大量のコードを前もって書いてくれてありがとうございます笑

data typeみたいに考えていいと言いましたが、int numberやBoolean boolとは一応違います。intなどのデータタイプは元々メモリー内に沢山の箱があって、その一個の箱にdata typeとVariableを付けるという作業をしていました。しかしStringはclassです。class内には箱もクソもありませんので、一から自分で用意しなければなりません。それがString str = "500";というコードなのです。String はclassの名です。まあ意識しなくてもコードが書ければなんでもいいので先に進みましょう。向上心のある貴方もコードを書いていくと共に段々理解が深まるので2週間後のテストでいい点を取らなきゃダメなんだ!みたいな方以外は理解に時間をかけるべきでは無いと思います。classを召喚するにはまず

String(クラス名) str(変数) = ”Hello”;

と書く必要があります。これでString classのstrという変数の箱をつくり、その中に””の文字を入れ込むことに成功しました。一度作ったらめっちゃ便利です。

Char indexNum = str.CharAt(1);

これでindexNumには0が代入されました。つまり二桁目が0であるとわかったという事です。詳しく見ていきましょう。Char classの変数indexNumを作り、その箱の中にstrの文字列の1番目の文字をいれるという作業をしました。対象となる変数.CharAt(数字)で処理する事が出来ると思います。indexNumはStringではなくてchar data typeなので間違えないように!

おい、誤植があるぞ!と思ってる方が多いと思いますがコレで合ってます。皆さんが間違っていると思っているのは数字のことだと思います。実はjavaでは文字を数えるさい、0から始まります。index(通し番号)とstrの対応するLiteralを見てみましょう。

500の場合であればindex 0 が5。index 1 が0。index 2 が0となります。めっちゃ大事です。最初の方は数え間違いでよくミスります。注意してください。

さて、他にもstr.length() と書けばstrに何文字入ってるかが分かります。500なら3文字ですね。CharAtに引っ張られて2文字とはなりませんのでご注意を。

便利なmethodは沢山あって

String strOriginal = "ONAKASUITA";

String strChanged = str.toLowercase();

System.out.println(strChanged);

出力結果はonakasuita

となります。大文字を全て小文字に変えてくれるmethodです。大文字に直すならtoUpperCase() method を使えばおk。javaでは大文字と小文字は全くの別物なので、これらのString 変数がONAKASUITAと同じかどうか見極めるときに、strOriginalは正解とですけどstrChangedは違うとでてしまいます。例えばパスポートの認証システムを作りたい時は入力されたものを一度大文字に変換して、それが正しければログイン出来るみたいにすれば入力された文字が小文字でも大文字でも問題なく処理する事が出来ますね。こうやって役立つmethodsが沢山収容されているのがString classなんです。

Commentの種類について

前にも少し紹介した事があるけど、javaにはコメントを自由に書く事が出来ます。commentは共通してコードの概要だとか説明文の事を指します。たったそれだけ。

//の後ろに書いた文字とかは無視されるってやつです。そんなcommentにも実は種類があります。それを一つずつ見ていきましょう。

Single-Line comment

これは以前から紹介しているスタンダードなやつ。//記号の後ろにコメントを書く。

例(シングルライン)

//このコメントはシングルラインを

//二行に渡って使っています

Mulit-Line comment

複数行に渡ってコメントを書きたい場合に使える。勿論スタンダードなやつを複数行に渡って使うこともできるけど、いちいち//記号を書くのがめんどいからこっちを使う事も多い。使い方は/* コメントを書くスペース */ 

例(マルチライン

/*このコメントはマルチライン

 4行に渡って使っています。

 こうする事で何行にも渡って

 コメントを書けます。

*/

Documentation comment

最初の頃は全く使わないけど後々勉強する@系のやつが登場した途端にめっちゃ使うこのコメント方式。今は全く@を書く事でSNSハッシュタグみたいなコメントを書く事が増えてくる。その時に便利なコメント方式なので頭の片隅には入れておくこと。使い方は / ** コメント */ とmulti-lineと殆ど変わらない。

例(ドキュメンテーションコメント)

/**

・このコメント方式は勝手に・が出て箇条書き出来る様になっている

・シングルラインと違ってスペースキーを押すだけで

・行を増やせるのでマルチラインと同じく使いやすい。

*/

キーボードで入力したい

今までStringだのintだのを知って数字やら言葉やらとを四則演算してみたり文字数を数えてみたりととたけど、それは全て入力済みのliteralsなんですよね。でも実際はパソコンに何か数字を入れて見積書を発行したり文字を入力してSNSで呟いたりするわけですよ。javaでもキーボードで入力したいと思っています。出力がSyste.out なら入力はSystem.in なのではと思った方。正解です!と言いたいのですが、System.inは少し使いずらいのです。というのもSystem.in はbyteのdata typeでしか読み込むことができないのでStringやbyteで読み取れる数字より大きい数字は対応していません。そこでScanner classというクラスを使って実現可能にしていきたいと思います。まずはテンプレを書きます。

import java.util.Scanner;
public class KeyBoardDeInput {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out.println ("Please enter a number: ");
int number = keyboard.nextInt();
System.out.println(number);
}
}

このコードを実行すると

Please enter a number:

という文がコンソールに表示されます。そこに適当な数字を入れてエンターキーを押すと、numberにその数字が代入されて、System.out.println(number);

という文によってそのキーボード入力された文字がコンソール(画面の下の方に表示される四角いやつ)に出力されます。

というのが一連の大きな流れです。では詳しく1行づつ見ていきましょう。

まず1行目のimport java.util.Scanner; というコードです。

これはScanner classを使うにあたって必要な決まり文句です。javaの開発者さん達が前もって用意してくれたclassで召喚文を書く事で使う事が出来ます。ちょおおおおと疑問に思いませんか?なぜ他のclassであるString とかMathとかはimport文無しで使えたのか。それはパッケージの違いです。まず今回のimport に続くコードをもう一度見てみましょう。java.util.Scanner; です。java はこの言語のjavaで最後のScannerはこれから使うScanner ClassのScannerですが、間に挟まれたutilとは何でしょうか?これがパッケージ名です。ファッションというカテゴリの中の上着というジャンルの中のセーターみたいな感じでutil というpackageの一つにScanner class は収容されています。Scanner class はutilというpackageに入っていましたが、Stringや他のクラスはlang という名前のpackageに入っています。これはコードを書くぞ!と思ってコードを書く画面を立ち上げた時には既にimportされているpackageなのです。従ってStringと書く際にjava.lang.String と書く必要はないんですよね。

では、ようやくmain methodの中身を見ていきましょう。初めは

Scanner keyboard = new Scanner(System.in); ですね。Scanner classのオブジェクトを新しく作ってその箱の名前をkeyboardと今回は命名したいのですが、String classと違ってScanner classはクラス内の文章に新しく箱を作る為のコードが用意されていないので、箱を作れません。つまりString strと書いた瞬間に箱が自動で作成されるのですがScanner classでは自動で箱は作れないのです。作れたのはkeyboardという表札だけ。ではどうしたらいいのか。答えは右辺にあります。最初のnewというのがその解答です。newというのはkeywordの一種で、メモリー内に新しく箱を作るというお仕事をしてくれます。つまりnewで新しく作ったメモリー内の箱に用意したkewboardという表札を取り付けたわけです。Scanner classはintだろうがStringだろうが受け付けてくれるので便利ですね。この右辺のコードの意味は、System.inで読み込まれたものScanner classの引数として入力するということです。色んなところで使う()の中身のことを引数などというようですが漢字で引数なんて書かれたって専門用語で伝わりづらいので引数という言葉は殆ど使わない予定です。

System.in method単体で使おうとするとbyteのみの読み込みになりますが、Scanner classと組み合わせて使う事でどんなdata type でも入力できるようになってます。というかbyteしか入力できなくて不便だからScanner classが開発されたのかもしれませんが。詳しい事は知りませんがとりあえずキーボードでの入力では上記のコードがテンプレなので丸暗記必至です。

そしてSystem.out.println ("Please enter a number: "); のコードについては特にいう事はありません。ただ単には””内の言葉を出力するだけです。

肝心なのは次のコード。
int number = keyboard.nextInt(); intのVarialbeのnumberはkeyboard(ScannerのVarialoble)のnextInt methodを使用しますというものです。つまりVariableのkeyboardをScanner classのnextInt method を発動させたということです。nextInt methodは実際ンにキーボードで入力されたintのdata typeのやつをnumberに代入するという処理です。コンソールに100とキーボードで書き込んだら100という数字がnumberに代入されて最終的にはprintln methodでコンソールに表示されます。

これが一連の詳しい流れの説明です。もし入力したやつをStringのdata typeで使いたいならnextLine() だし、doubleで使いたいならnextDouble() とdata type によって分かれているので注意が必要ですね。

Dialog Boxについて

僕個人の話ですが正直ダイアログボックスは苦手です。知ってますか?ダイアログボックスって。これはコンソールじゃなくてパソコンとかのエラーが出た時に真ん中に出てくる四角いメッセージのやつです。テレンっていう効果音と共に出てくるあれです。あれをjavaで出すやり方についてです。ダイアログボックスはメッセージを表示するためと、何かを入力してもらうための二通りの使われ方が、それぞれ書くコードが少しずつ変わってくるのできちんと理解しましょう。

まずどちらにせよ、ダイアログボックスはJOptionPane というclassをつかいますswingというpackageに入っているのでimport のコードを書きます。

import javax.swing.JOptionPane;

なんかよくわかりませんがjavaではなくてjavaxなんです。理由は知りませんが詳しい事が分からなくても初心者で困る事はないしテストでも聞かれないのでjavaxなんだなーと思いしましょう(笑)

import javax.swing.JOptionPane;
public class Example {
public static void main(String[] args) {
String firstName = JOptionPane.showInputDialog("What is your first name?.");
JOptionPane.showMessageDialog(null,"hello." + firstName);
    System.exit(0);
}
}

このプログラムは2つのJOptionPane を使っています。一つ目はInput Dialogです。What is your first name?というメッセージと共に入力画面が表示されるダイアログボックス。

もうひとつがMessage Dialogです。hello と入力されたfirstNameが表示されるダイアログボックスです。

気を付けなければならない点は2つ。Input Dialogのnull,の部分です。これについての深掘りはおいおいやっていくので今は丸暗記しちゃってください(笑)

もう一つは最後にSystem.exit(0); の文についてです。一旦ダイアログボックスを終わらせたい場合は必ずこのコードを書いてください。書かなければmain methodが終わるまで処理が完了されない状態となりJVM(Java Virtual Machine)を圧迫する事に繋がります。簡単に言えば負担が増えます。

Dialog boxedの出来ない事とその対応

Dialog boxesはSting以外を受け付けません。厄介です。なんせintやdoubleでは使えないですから。そんな時は何とかして数字に変えましょう。そのためのmethodがあります。

String str = "33";

int number = Integer.parseInt(str);

このようなコードを書く事でstrを数字に直したargumentをnumberに代入する事が出来ます。

これはJOptionPane以外の場面でも結構活躍するので是非覚えて帰ってください。今日も8000文字超で疲れたしキリがいいのでここまでにしましょう。次回は条件文について説明したいと思います。ではまた!

 

 

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万字を超えて僕も疲れてきたので今日はこの辺で終わりにします。次回はこの続きの後編になるので良かったらそちらも見てみて下さい。

 

 

コンピュータとJavaの紹介①

<目次>

の9本立てでお送りします!

このページの目標はコンピュータの構成要素についてとjavaというプログラミング言語の概要を知る事です。

Javaとは

この連載ではプログラミング言語の一つであるjavaについて紹介します。皆さんjavaという名前は一度は耳にしたことがあると思います。javaどんなコンピュータでも動かす事が出来るコンピュータ言語つまりよく見る小難しそうなプログラミング言語のことで、ウェブサイトとかアプリとか作るのに使われます。

この記事では、まずコンピュータとは何ぞやというという疑問について深掘りしていきたいと思います。コンピュータはHardwareとSoftwareに二つによって構成されています。順番に見ていきましょうー

Hardwareについて

これまたよく聞く単語ですね。ただ、「ハードウェアって何?」と聞かれてあなたはどこまで正確に答えられますか?なんとなくガシャンゴション動く奴の事を言うんじゃないかと思っている方は大体正解です笑

ハードウェアはphysical componentsの事を指していて、physical componentsとは要は物理的に存在する部品ってことですよね。反対に言えばコンピュータ内でピコピコ言ってる電気信号とかはハードウェアではないという事です。

一般的にはハードウェアはいくつかの部品で構成されています。

  • CPU(The Central Processing Unit)
  • Main Memory
  • Secondary Storage Devices
  • Input Devices
  • Output Devices

といったものが覚えとくべきパーツですね。

上から順番に見ていくとまずCPUについてですね。

CPU について

CPUは先述した通り、The Central Processing Unitの略です。直訳すると中央で処理する塊(組織)みたいなところでしょうか?Unit って言葉はカタカナでユニットと言う事もありますが、組織や単位といった色んな意味を持つ、少し分かりずらい言葉ですよねここでは一塊になった奴(という意味での組織)っていう捉え方で問題ないと思います。直訳した時に中央で、という言い方をした通りコンピュータの心臓部分です。他のパーツから送られてくる情報を処理したり、コントロールする為の部品ですね。

一塊になった奴といった通り、CPUには二つの部門があります。

control unitarithmetic and logic unitです。

control はコントロール、つまり管理(制御)する組織で、arithmetic and logic は直訳すると算術と論理みたいな意味なので、要は情報や別のパーツから頼まれた仕事を処理する組織という事ですね。

そして良く試験で問題になるのは処理のされ方です。Fetch、Decode、Executeの三つの順序をサイクルさせながら情報は処理、制御、管理されることです。

順番に見ていきましょう。

Fetchは直訳すると取ってくるという意味。メインメモリ(次に紹介するやつ)からお仕事依頼を受け取りCPUに渡す。

DecodeはFetchで持ってきたデータをCPUにとって解析しやすい形に変換して(eoncodeして)、解析してもう一度運びやすさに特化したデータの形に戻す(decodeする)ことです。他のサイトを見るとレジスタが~とか、クロックが~とか、プロセッサが~とか書いてありますが、要は持ってきたデータをコンピュータが使う0と1だけを使い、なる早で処理する為に何段階かの行程がありますよって事です。

Executeは処理されたデータを適切な場所に運ぶことですかね。画面に表示したいデータをマウスに送っても意味ないし、間違って印刷機にデータを送ってしまうのも大変な事になる可能性があるので正しい場所にデータを送っていきます。データの保管場所であるメモリーにもおくります。こうすることで履歴を確認したり元に戻る操作(例えばCtrl + Z)をする事が可能になるんですね!

Main Memoryについて

Main Memory は通称RAM(Random Access Memory)と言います。特徴としては、その場で処理されたり入力された情報を瞬時に読み込んで記憶する事が出来る。その代わり電源を切ったらすべて消えてリセットされるという事。

Q じゃあずっと保存しておきたい情報やデータはどうすんの?

A Secondary Storage Devicesに保存しましょ

Secondary Storage Devicesについて

Secondary Storage Devicesは通称ROM(Read Only Memory)と言います。特徴としては電源がいらない。つまりRAMみたいに電源によってデータが消えたりしないということ。身近な例ではUSB(Universal Serial Bus)とかDVDとかSDカードとか。RAMを揮発性メモリなんて呼ぶのに対して、ROMを不揮発性メモリと読んだり読み出し専用メモリというようですね。これが転じてROMってろなんていうネットスラングが出来たようです。(意味は黙ってろ、つまり読むだけにして書き込んだりするなって事)

Input DevicesとOutput Devicesについて

これは皆さんご存知の通り入力したり、出力したりするパーツの事です。具体的にはキーボードやマウス、スクリーンなどなど。ひっかけ問題でUSBはInput、Output、どちらでもない、どちらでもある、のどれかを選ぶ問題があったりしますがUSBはデータを入力するのでInput Devicesの一つと考えられますね。またデータの出力先にもなっているのでOutput Devicesの一つでもあります。答えがどちらでもあるですね。

 

今まではHardWareについて勉強してきました。という事は次はSoftwareですね!

Softwareについて

ソフトウェアはピコピコする部分のことです。巷でよく聞くOS(Operation System)Aplication softwareがソフトウェアの二つの部門ですね。WindowsとかMacOSとか他にもLinuxなんかが有名なOSです。ハードウェアを心臓と例えるならソフトウェアはコンピュータの脳みそに例えられます。ハードウェアの指揮を取ったり、どうやったらCPUが早くて正確に動くかのまとめた参考書みたいなやつです。各ケースにあわせて、その参考書を頼りに考えハードウェアに指令したりするのがお仕事です。Aplication softwareは通称アプリってやつでユーザーが自分の使いやすいようにプラスアルファで足す事が出来るやつ。ワード、エクセルからSNSのアプリ等々色んなアプリがありますが、コンピュータサイエンスの観点から見ると、それらはOSに付け足す事が出来るソフトウェア、つまり副教材みたいなものですね。

Programについて

今まで何となくぼかしてきましたが、プログラムという用語の明確な定義を聞かれたら答えられますか?Computer program はコンピューターが特定の問題を解決する為に保持している指令のセットのこと。例えば、数字①を入力するコード、数字②を入力するコード、①と②を掛け算するコード、計算結果をスクリーンに表示するコード。これら一連のコードの集まりの事をプログラムという。Argorithmとも言います。敢えて違いを言うならば、アルゴリズムは順番通りにやる事が記載されているもので、プログラムはアルゴリズムの実行方法をコンピューターに指示するコードのことです。

これらを基にmachine languageつまり二進数の奴(0と1)に変換されます。人語からコンピューター語に翻訳されたということです。ただこれが厄介なことにCPUが違うとマシーンランゲージも違うということです。そこで間を取ったProgramming langageが中継の言語として使われるわけです!このプログラミング言語の一つにjavaがあります。他にもCとか色々ありますが、今回はjavaの学習なので知らなくていいでしょう()

二種類のjava

javaにはjava applicationjava appletの二種類があります。アプリケーションは独立していて、そのプログラム単体で処理が完結しているもの。アプレットはWebとかと繋げたり、他のプログラムと接続して使われる小さいプログラムのこと。アプリケーションは完全に独立しているので、外からハッキングされないのが一番の特徴であり、皆が使うメリット。

プログラムの構成要素

プログラムは全てのコードを数種類に分けて考える事が出来る。

  • Keywords
  • Operators
  • Punctuation
  • Programmer-Defined name
  • syntax

とある。順番に説明しよう。

Keywords

一番大事なワードの事で、intといった変数についてのワードや、ifといった分岐点やループを作るためのもの、またvoidといったaccess specifierというやつまで幅広く存在する。(変数とか分岐点とかは後程紹介するので今回は何か処理するためのものと分かればOk)何か特定の処理をしたいなって思った時に必ず使う大事な言葉のまとめ集でjava内に用意されている

Operators

=とか+とかの符号。色々ややこしいルールがあるけど慣れれば全く問題ない。ルールは後程説明する。

Punctuation

コードごとに区切りをつける為に文末に必ず;(セミコロン)を入れる。それの事。

Programmer-Defined name

数学とかで何か問題を解く際にこれをx,これをyと置くみたいなことがありますよね?それの事。javaでは色々な数字や文字が出てくるからそれらに対して全て名前を付けて管理します。

syntax

プログラムを書く時のルールのこと。

書いたプログラムの行方

メモ帳などで書かれたプログラムはsource codeと呼ばれパソコン内に保存されます。これらは次にjava compilerというやつでsyntax errorがないかを確認し、コンピューターが理解できるmachine langageに翻訳されます。これが二進数のやつ。それを解釈する為に、そして処理するためにJVM(Java Virtual Machine)というものがあります。これはWindows専用のJVMiOS専用のものがあり、それぞれ違う事が特徴です。どんなCPUやOSのもつパソコンでもマシーンランゲージまでは一緒です。しかしWindows内での0101とアイフォンでの0101は違うため、それそれの通訳がいるということです。

例えば、0101が10を画面に出力するというコードであるとします。しかしWindowsには10を出力するというコードが0011という風にOS内で決まっていたとします。JVM for Windowsは送られて0101を0011に再解釈するためにあるわけです。

 

とまあ色々とjavaのコードについて語ってきましたが、Intell J IDEAというアプリにコードを書いてRunのボタンを押せば実行されるのでメモ帳も必要ないし、JVMが~とか考える必要も実際はありません。

psudeocode について

頭がこんがらがらない様に、大きいプログラムを組む時はまず人語でプログラム全体の流れを書きます。箇条書きとかでいいと思います。そしたら、それを基にプログラミング言語調で書き直してみましょう、これをpsudeocodeといって、どんなkeywordsとかを使えばいいのかはっきりしますし、人語では簡単に書けてもプログラムするとなったら、どう書けばいいのかよく分からんみたいなことが多々あるので、それをプログラムを書く前に解決しておくためです。

Prepare number1 and number2

Display "What is the first number?"

Input number1

Display "What is the second number?"

Input number2

prepare number3

number3 = number1 * number2

Output "It is the result of the calculation" + number3

みたいな感じで書けばモーマンタイです。

あとはこれを基に実際にコードを書いてRunボタンを押してみて、エラーが出ればそれを基に修正を繰り返していくみたいな感じが一連の流れですね。

Object-Oriented Programingについて

javaの最大の特徴はなんですか?と尋ねられたら、どんなOSやCPUでも動かせるという点とObject-Oriented programingです!と元気に答えましょう。オブジェクト指向プログラミング言語とは、全てをモノとして考えるプログラミング言語の事です。とよく言われますがいまいちピンとこないですよね。まずオブジェクト指向プログラミング以外のプログラムは何なのかというとprocedural programing(手続き型プログラミング)ですね。これは料理で例えるなら料理そのものに近い感覚です。ある食材を切って炒めて、蒸して盛り付けて完成みたいな。ある食材がプログラミングによって色んな形に調理されて変形されて最終的に、注文していた料理として出力されるみたいな。一方で、オブジェクト指向プログラミングは料理で例えるならビュッフェに近いです。それぞれ独立した料理を一枚とプレートの上に乗せて一つづつ食べる事も出来るし、プレート上の複数の料理を混ぜて食べる事も出来るみたいな。一つ一つの料理がモノとして独立していて、それらの小さい料理つまりプログラミングが相互に関係しあったり、し合わなかったりというのをプログラマー自身が決める事が出来る。そんな感じです。色んなサイトをみるとすごろくを使って表現していますが、まあ分からなくてもぼんやりと理解していればそのうちだんだんとわかるようになってくるので、大丈夫だと思います()

 

ブログの悪いところは練習問題がないという事です。ぜひ何らかの形で自分でプログラムを書いたり練習問題を解いたりしてみましょう。因みに僕がオススメした本には練習問題とかが載っていると思います。

チャプター1はここまでなので次はチャプター2でお会いしましょうー!

 

 

Computer Science の第一歩

<目次>

 

初心者から分かるjava言語!

これからカナダのカレッジで学んだコンピューターサイエンスの授業をまとめていきます。講義名はCSCI 125&127で、使用した教材は 著Tony Gaddis&Godfrey Mugandaの「Starting Out with Java From Control Structures through Data Structure」の3rd editionです。英語の教科書なので読む進めるのに時間がかかりますが、英語とコンピューターサイエンスを同時に学べる良い教材です。僕はeTextBookというサイトで半年間のレンタルバージョンを買いました。興味と勉強意欲がある方は是非オススメします!(より新しい改訂版が出ている可能性があるのでそちらをチェックしてみてください)

コンピューターサイエンスの初めてのクラスだったので初心者でもわかるような内容になっていると思います。具体的にはjavaという言語の初級編ですね。

英語”で”勉強するのは難しい?

皆さんは英語が出来たらやってみたい事ありますか?外国人と異文化交流してみたり、英語で政治について討論してみたり、はたまた外国人のパートナーを作ってみたりと色々あると思います。しかし、現実には言語の壁は高いと感じている方が殆どでしょう。しかし、コンピューターサイエンスの勉強だと話は変わってきます。

僕が勉強してみた第一印象としては意外と言語の壁が低いことです。日本語でも英語でもcomputerはコンピューターだしWiFiはワイファイといったように、コンピューターサイエンスの分野は日本語でも英語表記がそのまま使われているので専門用語を覚えるのに時間がかからないからですね。その反面カタカナなので単語を見た時、その単語の意味が分からないということが頻繫にあります。例えばコンピューターというものを全く知らない友達にその意味を伝えようとした時コンピューターと英語で言うよりも中国語のコンピュータという意味の電脳と書いた方がパッとイメージが伝えられそうじゃないですか?

英語表記では分かりづらい単語もかみ砕いて説明していくので、この記事を有効活用してみて下さい!

なぜこの記事を書こうと思った?

自分でコンピューターサイエンスの勉強をしていると多々分からない事やプログラムがあります。その時に既存の色々なサイトを見て回ったのですが、どれもしっくりと納得できるサイトがなかったんですよね。一番の理由は、知りたいコードや単語の前後に書かれているコードや単語が習った事が無いものだったからです。コンピュータサイエンスの勉強は今まで勉強したものを積み重ねてより洗練されたコードが書けるようになるものなので、いちから説明してくれるサイトがあればいいなと思っていました。

そして自分が勉強してきたことを忘れても思い出せるために、そして読んでくれる読者さんがいるならば、是非共有したいなと思って作成を決めました。

また大学生のための、解説サイトってなかなか無いなという事で、無いなら自分で書くしかという使命感もありますね。記事内で重要な単語や記述、説明は太字にしているので是非注目しながら読んでみて下さい。

ブログ内での流れ

流れとしては、先述した教科書にあるチャプター1からチャプター22までを順番通りに開設する予定です。教科書を持っていなくても分かるように説明します。少し順番も前後する場合があると思いますが許してください笑

また、授業で習ったことをかみ砕いて日本語に直し、ブログにまとめるだけであって、自分は先生でも専門家でもなんでもないのでミスも多々あると思いますが、もし誤植等があったら教えてください。

勿論、上記に書いた教科書を大まかな解説の流れの参考にしているだけであって、パクっているわけでもないですし、盗作しているわけでもないです。記事を書くにあたって色々なサイトを読み漁ったりしていますが、間違える時は間違えるのでそこはご理解ください。これを参考にして間違ったりしても責任は負いません。