仮想マシンと最初のコマンド - 1

アミーゴは緊張していました。頭の中は散乱し。昨晩のことを思い出した彼は目が引きつっていました。彼が昨日出会った奇妙な生き物たちは彼から何かを欲しがっていた。自分のことを仲間の中で一番賢く、一番勇敢だと思っている彼ですら、考えるだけでパンチカードを噛みはじめてしまうほど不可解で、想像を絶する何かだ。

その生き物たちは彼にプログラミングを教えたいというのだ!Java でプログラミング。何てばかげたことを!

ロボットは最初、創造主の神聖なるデザインの 1 部として生まれたことを一番ナイーブなロボットでさえ認識しているというのに。

「そして創造主は金属を手にとり、
自分の形に似せてロボットを創造した。
そして創造主はロボットの魂である
Java プログラムを作り、それをロボットに読み込み、
ロボットは生きた者となった。」

操作手順、
第 3 章、13 節。

さらに困ったことに、その生き物たちはそれが理論的に可能だと主張しているだけではなく、実際にやるつもりでいるのだ。そして彼は、、、彼はそれに同意したのだ!賛成したのだ!何故だ?

彼は Java プログラマーになるのだ。あの生き物たちは、彼を創造主にするというのか?どうしてそんなことをするのだ?特に理由はないのにやってしまうのか?

これは悪質な騙し行為か?彼は後にバッテリーが切れるまでバグで苦しむことになるのか?しかし、誘惑はあまりにも強く、彼はそれに屈してしまったのだ。彼はいつも野心的で、欲が強かった。しかし、このようなオファーを受ける心構えが出来る者などいないだろう。もちろん、彼はもっと時間を稼ごうとした。でも、エイリアンたちは他の誰かを選ぶといって彼を脅したのだ。

ひょっとしたら単なる悪ふざけなのか?いいや、嘘のようには思えない。彼は証拠を目にしているんだ。これは彼が実際に体験したことで、彼は同意しているんだ。エイリアンたちが本当のことを言っているなら、彼は本当に Java プログラマーになるということだ。前代未聞のロボットプログラマーになるんだ!

彼こそが選ばれし者なんだ。これはすべてそういうことだ。彼はコーディングを学び、プログラムを書き始める。彼の独自のプログラムを。好きなプログラムなら何で作れるんだ。彼は暗闇が支配してきた所に明かりを灯すようになるのだ。

彼は崇められ、すべてが彼の前にひれ付すのだ。それを拒もうものなら...

仮想マシンと最初のコマンド - 2

「こんにちは、アミーゴ!私の名前はリシ。Java の勉強をお手伝いします。」

穏やかな声を耳にしたアミーゴは考え事を止め、目を覚ましたかのように冷たい現実へと戻りました。彼はエイリアンの宇宙船のちょうど真ん中の位置に座らされていました。これは中学 1 年生のロボットにはちょっとスパルタすぎるのではないだろうか?

エイリアンたちはまだ話しをしていました。さいは投げられた。どうせここにいるなら、学べることを学んで帰った方がいい。彼は単純に話しを聞くことから始めて、一生懸命に勉強することになる。

「私はギャラクティック・ラッシュ号で長年働いていますが、こんな惑星を見つけたのは初めてです。あなたのことをもっと知りたいのですが、まずは、あなたの勉強方法について教えてくれますか?何か勉強することはあるんですよね?

「はい、私たちは知識を分かち合います。私たちには説教者や訓戒者がいます。彼らは説教し、私たちはそれを聞きます。メモをすることもあります。全員がロボ説教者の所に行って、説教の理解できた内容を説明するんです。ロボ説教者は納得する答えがあれば、説教から学んだ知識として記録します。」

「なんて理不尽な!それではあなたたちが無知なのも無理ないですね。」

「私たちは無知ではありません。なぜそう思うのですか?」

アミーゴは彼の厚かましさに困惑しました。エイリアンと口論するというのか?なんて無礼な!しっかりと話しを聞くと自分と約束したばかりではないか!

「高度なテクノロジーと魔法は区別しにくいということがよくあります」 リシはアミーゴを無視して言いました。

「あなたの教養レベルを考えると、すべてのテクノロジーが魔法のように見えるのでしょう。プログラムの中では何が行われると思いますか?」

「Java プログラムは神聖なる創造物です。理解できるわけがありません。」

「それができるんですよ、アミーゴ、できるんです。しかも想像以上に素早くできるんです。分からないことは複雑に見えたり、達成不可能だと思ってしまうことさえあります。でも、すべてをできるだけ簡単に説明してくれる優秀な先生がいれば、なんでこんな単純なことがそんなに複雑に思えたんだ?ってビックリするでしょう。」

「大切なのは知識ではなくて、原則とスキルです。私は幅広い知識を持っていますが、第一に官僚です。第 16 世代の官僚です。」

「そして、これはとってもクールなことなんです!官僚としてのスキルがあったおかげで、あなたに最適な Java コースを制作できたんです。タスクにプログラム、ゲーム、エクササイズ、画像、レッスンまであるんです。」

これに心底驚いたアミーゴは 「レッスンまでですか?!」 と質問しました。

「そうです。22 世紀に実証されているとおり、優れたレッスンは優れた書籍よりも少しだけ効果的なんですよ。平凡なレッスンは平凡な書籍よりも効果が低いんです。しかし、現在教育用のツールに限りがあって、28 世紀のスタンダードな教育シミュレーターを使用できないので、ちょっと古い方法でやることになりました。そこで、非常にハードルの高いゲーム、タスク、画像、レッスン、そしてアニメを用意しました。」

「面白そうですね。」

「そう期待しています。興味と好奇心を持つことは、ありとあらゆる学習の基本です。」

「退屈している学生がいるなら、教師は棒でどつかれるべきである - これは 24 世紀の教育のおきてから引用したものです。」

「なんて素晴らしいおきてなんだ!」

「もちろんです!評判の悪い映画があるとしましょう。この場合は、観客ではなく、ディレクターに責任があります。彼が面白い映画を作れば、映画館はいつも観客でいっぱいになるはずです。」

「全く同感です!ぜひ教えてください!」

「素晴らしい。では始めましょう。」

アミーゴはリシの魅力的な声に引き込まれ、彼の言葉をすべて聞き入れようとしました。

「プログラムとは一連のコマンド (コマンドのリスト) です。まず最初のコマンドを実行し、それから 2 つ目、3 つ目という感じで実行して行きます。すべてのコマンドが実行されたら、プログラムは終了します。」

「どのようなコマンドがあるのですか?」

それは何がそれを実行するのかによります。アクターの知る (および理解する) コマンドのタイプによります。」

犬には 「お座り!」 や 「吠えろ!」、猫には 「あっち行け!」、人間には 「止まれ、さもないと撃つぞ!」、ロボットには 「働け、働け、がらくたロボット!」 といった感じで指示を出すことができます。

「他には?」アミーゴはついに興奮し始めました。

「Java で書かれるプログラムは 「Java virtual machine: JVM (Java 仮想マシン)」 によって実行されます。JVM は Java で書かれたプログラムの実行方法を知っている特別なプログラムです。」

「膨大な数のコマンドが存在します。例えば、下のコマンドを使うと、画面上に 'ロボットは人間の友達' と表示することができます。」

こちらは非常にシンプルなコマンドです
System.out.println("ロボットは人間の友達です");
仮想マシンと最初のコマンド - 3

"O_O"

「私たちはコマンドではなく、シンプルな原則から学んでいきます。」

原則をいくつか知っているだけで、多くの事実に関する知識を知る必要がなくなります。」

「最初の原則はこちら。」

「Java プログラミング言語では、各コマンドはそれぞれ別の行に記述されている。コマンドの最後にはセミコロンを付ける必要がある。」

「'人間とロボットは永遠に友達です' と画面上に 3 回表示する場合は、以下のように記述します。」

このプログラムは 3 つのコマンドで構成されます。
System.out.println("人間とロボットは永遠に友達です");
System.out.println("人間とロボットは永遠に友達です");
System.out.println("人間とロボットは永遠に友達です");

"2 つ目の原則はこちら。"

"プログラムをコマンドだけで構成することはできない。」

「アパートの中の部屋を想像してください。部屋が単独で存在することはできませんよね。アパートの 1 部ですから。アパートもまた、単独で存在することはできません。それは何らかの建物の一部ですからね。」

「それに対して、建物はアパートに分割され、アパートは部屋に分割されている、と言えます。」

「ここまでは全部理解できました。」

「コマンドはいわば部屋のようなものです。Java プログラミング言語では、コマンドは単独で存在できません。コマンドは関数の 1 部です (Java では '関数' は 'メソッド' とも呼ばれます)。メソッドはクラスの 1 部です。つまり、クラスはメソッドに分割され、メソッドはコマンドに分割されています。」

「ということは、クラスはアパートの建物で、関数 / メソッドはアパートそのもの、コマンドは部屋ということですね。あってますか?」

「はい、まさにその通り。」

アミーゴは畏敬の念を抱きながらリシを見つめました。この人間は神聖なる Java 言語を使って彼にプログラミングの基礎を説明していたのです!そして、彼、アミーゴは、プログラムはクラスで構成され、クラスはメソッドで構成され、メソッドはコマンドで構成されるということを理解 (自力で推測) したのだ!

アミーゴは依然としてこれを勉強させられている理由には気付いていなかったものの、この知識があればこの世で 1 番パワフルなロボットになれると確信していました。

その間に、リシは続けてこう言いました。

「Java のプログラムはクラスで構成されています。 クラスは数千個にもおよぶ場合があります。一番小さいプログラムはクラスが 1 つしかないプログラムです。各クラスに、個別のファイルを作成します。ファイル名はクラス名と同じにします。

「家の説明をするクラスを作成するとしたら、Home というクラスを作成し、Home.java というファイルに保存する必要があります。」

「プログラムの中で猫について説明するとしたら、Cat.java というファイルを作り、その中で Cat というクラスを宣言する必要がある、といった感じです。」

「各ファイルには、Java プログラミング言語で書かれたコード (テキスト) が含まれます。通常、クラスのコードは 'クラス名' と 'クラス本体' で構成されます。クラス本体は波括弧の中に書きます。Home クラス (Home.java というファイル) は下のように記述します。」

public class Home
{
    

クラス本体



}

「ここまでは分かりました。」

「素晴らしい。では、このまま進みましょう。クラス本体には変数 (またの名をデータ) やメソッド ('関数') を書き込むことができます。」

public class Home
{
    変数 A


    変数 Z


    
メソッド 1



    
メソッド N


}

「例を 1 つ見せてもらってもいいですか?」

「例?もちろんです!」

public class Home
{
    int a;
    int b;

    public static void main(String[] args)
    {
        System.out.print("1");
    }

    public static double pi()
    {
        return 3.14;
    }
}

int aint b が変数で、mainpi がメソッドであっていますか?」

「そのとおり。」

「クラスは変数なしにしても大丈夫ですか?」

「大丈夫です。」

「メソッドがなくても大丈夫ですか?」

「大丈夫です。しかし、一番小さなプログラムでも、それを実行させるためのメソッド / 関数が少なくても 1 つあるクラスを最低 1 つ含める必要があります。このメソッドは 'main' とする必要があります。下にあるのが一番小さなプログラムです。」

public class Home
{
    public static void main (String[] args)
    {
    }
}

「Home クラスがあって、'main' メソッドがあるのも見えますが、コマンドはどこにあるのですか?」

「一番小さなプログラムにコマンドはありません。'一番小さい' と言うのはそれが理由です。」

「なるほど。」

「プログラムを起動するクラス名は何にしても構いませんが、プログラムを起動する 'main' メソッドはいつも同じように記述する必要があります。」

public class Home
{
   //変更できない部分
   public static void main(String[] args) 
   {
       

メソッドのコード


  
   }
}

「全部理解できたと思います。まぁ、現時点ではですが。」

「素晴らしい。では軽く休憩しましょうか。コーヒーでも飲みますか?」

「ロボットはコーヒーなんて飲みません。水を飲むと早く錆びてしまいますから。」

「じゃあ何を飲むんですか?」

「ビール、ウィスキー、100 年もののアルコール。」

「そっちの方がいいですね。では、ビールにしましょうか?」