2019/03/07

今まで何故かやっていなかったjavaをやってみる

第一印象で避けていた

プログラミングをやってみようと思った当初、名前は知っていましたが、ぱっと見ややこしそうというだけで避けていたjavaですが、プログラミングに少し慣れてきた今日この頃、なんとなくやってみようかという思いになり、手をつけました。

まずはご挨拶から

/*
 * filename: Hello.java
 */
 
class Hello {
    public static void main(String[] args){
        System.out.println("Hello, world!");
    }
}

当初、この長ったらしいコードの第一印象がよろしくなかった。プログラミングをしたことがない方々にとっては、まさに暗号である。しかし、なぜか今は何とも思わない。いろんなプログラミング言語を試したので、見慣れたということだろうか。Rustのコンパイラ先生の厳しいご指導ご鞭撻のおかげだろうか。とにもかくにも、これは勉強には良い兆しである。
まだ詳しく本なども読んでいないので、正確なことは言えないが、読み解いてみるに、class?「ほほう、Pythonのクラスみたいなものか」public?「ほほう、どこででも使えるやつだな」static?「これは何かが静的なものということかな(要勉強)」void?「Cのvoidと同じ感じかな」main?「CやRustのmainと同じ感じかな」String[] args?「String型の配列かな?」System.out.println?「Python風に読み解くならSystemライブラリのoutモジュールのprintlnメソッド的なことかな?」となんとなく予想がつけられます。(正解かどうかは本格的に学ぶ必要がある)
お初なことは、ファイル名が大文字から始まること。クラス名と同じにすること。なんとなく違和感がある。
もう少し進めて、入力を受け取れるようにしてみる。

/*
 * filename: Hello2.java
 */

import java.io.*;

class Hello2 {
    public static void main(String[] args) throws IOException {
        System.out.println("Hello!");
        System.out.print("Please input your name: ");
        String name;
        BufferedReader rd =
            new BufferedReader(new InputStreamReader(System.in));
        name = rd.readLine();
        System.out.println("Hello, " + name + "!");
    }
}
throws?「なにか投げるのか?これは学ぶ必要がある」ほかはなんとなく分かる。食わず嫌いであった。むしろ長ったらしい分、読みやすいのかもしれない。書くのは面倒だけれど。

ここで、はたと気づく

一般的に、一つのプログラミング言語ができれば、他の言語の習得も容易になると言われている。結局のところ、特殊な言語でないかぎり(Brain*uck、lazy_k、Prolog、forthなど)、共通点がいくつもあるので、私のようなど素人でも上記のような大体の予想がつけられる。したがって、学ぶことも少なくて済むといったことかもしれない(勝手にそう思っている)。使いこなすには当然勉強が必要ですが。
ひょっとして外国語も同じような考え方で良いのではないか?
例えば、スペイン語・フランス語・イタリア語。大本は同じ俗ラテン語。ならば何か共通点があるはずである。一つ勉強すれば残りの言語も身につきやすいかもしれない。
語学に限らず、様々なジャンルでこのようなことが適用できる気がします。やはり勉強は楽しい。