08 printlnとは何かを理解する

【第8回】printlnとは何かを理解する

これまで、ずっとprintlnというものを使ってきましたね。
これは何なんでしょう?

前提: printlnを使ったことがあること

では、早速内容に入っていきましょう。

これまでのプログラムをちょっとおさらいしてみましょう。
いちばん簡単なHelloWorldプログラムがいいかな。

public class HelloWorld
{
    public static void main(String[] args)
    {
        System.out.println("Hello Java World !");
    }
}

このプログラムで、今まで
「printlnの後のカッコの中の文字列を変えたら表示するものが変わる」
とか
「printlnの後のカッコの後に変数を書くと、その変数の中身を表示してくれる」
ということをやりましたよね。
どうしてそんなことができるのでしょう?

System.out.println
が鍵である事はわかりますよね。
ではこれはなんでしょう。

結論から言いますと、これは、メソッドと呼ばれるものなのです。
メソッド? method? 「方法」ってこと?
うーん、メソッドと言われてもなかなかピンときませんね。
Javaにおいてメソッドと呼ばれるものは、
その他のコンピュータ言語(例えば、C言語)では、
関数と呼ばれているものなのです。
以降は、便宜上、メソッドではなく、関数と呼ぶことにして話を進めましょう。

じゃあ、関数って一体なんでしょう?
皆さんは「関数」と聞いて、何を思い浮かべますか?
ちょっぴり懐かしい響きかもしれませんね。
そうです。数学の授業で何度も聞いたことがあると思います。
数学という言葉を聞いた瞬間、嫌悪感を抱く人もいるかもしれませんが、ご安心を。
何も、難しい数式を解け、などという話をするわけではありませんから。

それでは、数学で出てきた関数について少し思い出してみましょう。
簡単な例として、

y = 2 * x

について考えてみてください。
* は、掛算を意味するということは、前回の講座で出てきましたよね。
上の式の右辺となる、2 * x は、
x に代入された値を2倍にする、という働きをします。
そして左辺の y は、その結果になります。

ここで先ほどの式を、ちょっと格好よく、2つに分けてみます。

f(x) = 2 * x …(1)
y = f(x) …(2)

げげっ、f(x)?
はい、あせらないあせらない。
過去の数学の苦手意識を思い出したとしてもあせらないこと。
y = 2 * x を言い換えるために使っているだけですから。
言ってしまえば、意味が通るのであれば、
f(x)の代わりに●記号や▲記号でもかまいませんし。

さて、このように式(1)は、f(x)という関数についての定義となっています。
f(x)という関数は、
x に何か値を入れてもらうと、それを2倍にする、
という働きをします。
式(2)では、式(1)で定義した関数を使って、
y の値を決めようとしています。

例えば、x = 5 の時は y の値はどうなるでしょうか?
式(1)のf(x)の働きを考えると
y = 2 * 5 となり、
y = 10 という値になることがわかりますね。

では、これまで書いてきた数学の関数について、少し整理してみましょうか。

・x(=入れるもの) に代入する値が決定すれば、y (=出るもの)
の値が決定する。
・関数は、代入された x に対し、何らかの操作を行うことで、
y の値を算出する。

実は、コンピュータ言語で出てくる関数というものも、
数学の関数と同じなのです。
この講座で、すでに何度も使っているprintln()とは、
「()の中に記述されたものを、画面に表示してくれるという働きを持つ関数」
だったのです。

このあたりの話、どこかで聞き覚えがありませんか?
Java講座の第4回に、
プログラムの3大要素として、入力・処理・出力がある
という、少し難しい話が出てきました。

println()
について、もう少し細かく説明すると、

1. println()の中に、適当な文字を代入する。 …入力
2. 文字をコンピュータが理解できる形に変換する。 …処理
3. 画面に文字が表示される。 …出力

という仕組みになっているのです。 先ほどの数学の関数についても、

1. x = 5を代入する。 …入力
2. x の値を2倍にする。 …処理
3. y に計算結果の10が入る。 …出力

というように、プログラムの3大要素に従った分類ができるのです!

ほら、数学の関数とJava言語の関数(メソッド)って同じ流れでしょ?
Java言語のメソッドのほうが、画面に文字を表示したりするなど、
もっと複雑な結果を出してくれるだけなのです。

画面に文字を表示するprintln()に限らず、
Javaには、文字の長さを知るメソッドや、
平方根(√)を求めるメソッド、ボタンを表示するメソッドなどなど、
沢山の便利なメソッドが用意されています。

Javaが用意しているメソッドは、

Java プラットフォーム API 仕様(通称:APIリファレンス)

というドキュメントを読むと知ることが出来ます。

最近では、雑誌についてきたりしますが、オンラインでも利用することが出来ます。

※注意! とっても大きなファイルです。
雑誌や書籍、ダウンロードをするなどして、なんとか入手してください。
今後、必ず必要になってくるものです。

→Java SE API ドキュメント

http://www.oracle.com/technetwork/jp/java/javase/documentation/api-jsp-316041-ja.html

→Java SE のAPI 仕様ドキュメントをダウンロードできるページ。
http://www.oracle.com/technetwork/jp/java/java-sun-1440465-ja.html

上記の「Java SE API ドキュメント」をクリックすると
このページが表示されます。
Java SE 8 までの ドキュメントの「ダウンロード」からAPIをダウンロードすることができます。
API 仕様ドキュメントのダウンロード場所

API 仕様を覗いてみると、なんだか細切れのフレーム構成だし、
リンクばかりで、圧倒されてしまいますね。
書いてあることも難しそうだし。

とはいっても、これは辞書のように使うものなので(APIリファレンスというくらいですからね)
ここに書いてあることを1から覚えていかなければならない、
なんてことはありませんので、ご安心を。

プロだって、全部を覚えるなんてことはしません。
実際に、APIリファレンスを片手にプログラミングをしますから。

初めて見た人は、一体どうやって使えば良いのかわからないと思います。
自在に使いこなすには、
知っておかなければならないキーワードがいくつかあります。
これは、Java講座が進むにつれて、使い方もわかってきますよ。

とはいっても、このまま何もしないで終わるのももったいないので、
せっかくですから、以前から使っていた
System.out.println()について調べてみましょうか。

ブラウザでAPIリファレンスを開いてみると、
3分割されている中で、左下のフレームに、
すべてのクラスと書かれているのがわかると思います。

APIリファレンス

その中から、System を見つけてクリックしてください。
すると、右側の大きなフレームに、
「クラス System」 と称して、
Systemというものについての説明が出てきます。

Systemクラス

ここだけでなく、APIリファレンスを見てみると、
頻繁にクラスという耳慣れない言葉が出てきますね。
今は、
これはとても重要なキーワードなんだ、
ということだけ覚えておいてください。

さらに、調べてみましょう。
「フィールドの概要」と書かれたテーブルの中に、
outを見つけることができると思います。
さらにoutをクリックしてみましょう。

フィールドの概要

すると、「標準」出力ストリームです。
このストリームはすでに開いていて、…
といった説明文のあるところに移動しますね。
これが、System.out.println()の中の、System.outの説明です。

よし、println()までもう少し!

outの説明の最初に、
public static final PrintStream out
と書かれた文がありますね。
PrintStreamをクリックしてみましょう。

PrintStream

今度は 「クラス PrintStream」 というページに移りました。

う~ん、今は一体何をやっているのだろう?
と不安になるかもしれませんね。
繰り返しになりますが、今回は、何はともあれ、
リファレンスを使ってみるという段階ですから、
そんなに悩まないで下さい。

さて、PrintStreamのページにある、
「メソッドの概要」テーブルを覗いてみると、
見慣れたprintln()がたくさんありますね。

println(String x)と書かれた行の
printlnをクリックしてください。
println()についての説明部に移動します。

println

説明には、

String を出力して、行を終了します。
このメソッドは、print(String) を呼び出してから 
println() を呼び出すのと同じように動作します 

と書いてありますね。
これだけだと、今はまだ何を言われているのか分らないかもしれませんが、
これこそが、System.out.printlnの説明なのです!

ここまで辿ってきたように、
APIリファレンスには、関連する情報がいたるところに散りばめられています。
この説明文にしても、関連するprint(String)や
println()についてのリンクが張られていますね。
それらを読むことで、様々な関連知識を得ることが出来るのです。

Javaを利用していく中で、
このメソッド(関数)はちょっと使い方が分らないな、と思った時に、
APIリファレンスを使って調べる、というのが基本スタイルです。
これさえ覚えておいてくれれば、今は大丈夫!

では、ここで今回の講座のおさらいをしましょう。
ちょっとボリュームがあったから大変だったかな?

~ まとめ ~

1.System.out.println というおまじないは、メソッドであるということがわかった
2.メソッドは、数学の関数と同じように、入力したものに対して、
何か処理を行い、結果を出力する
3.Javaがあらかじめ用意しているメソッドはAPIリファレンスに記載されている。
(今はまだリファレンスをすらすらと使えなくても大丈夫!)
4.APIリファレンスを入手しておこう(雑誌or書籍orダウンロード)
5.System.out.println について調べてみる(まずは辿りつこう!)

今回の講座で、メソッド(関数)という、おまじないの謎が解けましたか?
今後も、少しずつその他のおまじないについても解説していきますので、お楽しみに。

→ 次へ(第9回:クラスを理解する(前編))