ラベル Hello World の投稿を表示しています。 すべての投稿を表示
ラベル Hello World の投稿を表示しています。 すべての投稿を表示

2018年2月15日木曜日

なぜやることになったのか、のご挨拶からの、Hello World

まずはご挨拶

はじまりは・・・


とある半導体メーカーを49歳で退職してから、しばらくの間子育てと家事を引き受けて数年。

ちょっとしたつながりで、とある国立大学の研究プロジェクトの一環としてFORTRANのソースコードの改変が必要ということで、その改変をアルバイトを頼まれて、なんとなく引き受け、NIの開発プラットフォーム、LabVIEWを使った小規模なソフトウエアコーディングを頼まれて引き受け・・・

これらの案件は、持っている知識と経験で乗り越えることができました。

ただし、FORTRANの改変のお仕事に関しては、変更点は3箇所ほど、数値を書き換えるだけでしたが、その改変が他の部分に悪さをして計算結果がおかしくならないかどうかの検証方法がわからず、エンドユーザーさんもわからず、随分辛い思いをしたものでした。

なぜC#なのか


2017年12月、久しぶりに開発の打診を頂いた案件は、一筋縄ではいかなそうな案件でした。内容は、空間で測定した磁界の強さを3次元的にプロットできないか、というもの。

「開発言語はC#で」、とのご指定。

これが、なぜC#か?という問いの答えなのです。しかしC#は触ったことがない、という現実が・・・

1980年代後半、パソコンブームに乗って8ビットパソコンを購入、BASICとMC6809のアセンブラ、そして整数型のCコンパイラでソフトを書くことを趣味としていたので、Cはそれなりに知ってますが、その後awkやperlを仕事を楽にする為に勉強したもののC++には乗り遅れ、それ以来新しい言語には触れていないのです。

しかしながら、C#は使ったことがないからNGです、と即答するのもシャクなので、出来そうかどうか、少し時間を頂いて検討させていただけないでしょうか?と打診を下さった方にお願いし、C#の短期集中学習を開始したのでした。2018年1月の中旬のことでした。

結局僕がマゴマゴと検討に時間を要している間に、打診を下さった方の会社の事業判断として、そのお話はエンドユーザーさんにはお断りを入れて、お仕事はなくなったのですが、久しぶりの新しい言語の学習ですから、何をやったのかはどこかに記録しておきたいと思い、このサイトを始めたというわけです。

あまり役に立たない記事かもしれませんが、ある程度歳を取ってからC#を初めてみようかな、という方がいらっしゃったら、少しは参考になるかもしれません。

さて、Hello World


プログラミング言語の入門書の一番最初に出てくる例題、それは"Hello World"を出力することと、まるで世の中の決まり事のようになっています。

これはカーニハン&リッチーの「プログラミング言語C」からなんでしょうか。若い頃から、もう少しマシなセリフはないのかね、と思いながら色んな本を読んでいたものです。中学の英語の教科書に出てくる"This is a pen."よりはマシかもしれませんけど。

Wikipedaを紐解くと、C言語に関しては、やはり1978年の「プログラミング言語C」からと言われている、と書いてあります。

この本の第1章「やさしい入門」の最初の方に、Cでの書き方が出て来ますね。

main()
{
    printf( "hello, world¥n" );
}

これをC#で書くとどうなるかというのが、やはり入門書の一番最初に出て来ます。マイクロソフトのC#プログラミングガイドに出てくる「最初のプログラム」は、以下のような感じです。

using System;
namespace HelloWorld
{
    class Hello
    {
        static void Main()
        {
            Console.WriteLine("Hello World!");
            // 画面が消えてしまわないように、キーボード入力待ちを入れる
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
}

Cの記述ですが、この頃のCはまだ高級マクロアセンブラのようなもので、各種整合性のチェックはそれほどうるさくなかったようです。今だと、mainに型を定義してあげないといけないとか、プリプロセッサでstdio.hを読んで型のチェックをさせないと怒られそうですが、当時はこれでもコンパイルは通っていたんだと思います。現代のCコンパイラーにそのまま通すと、僕の環境では

MacBook-Pro:~ gustav$ gcc test.c
test.c:1:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^
test.c:3:1: warning: implicitly declaring library function 'printf' with type
      'int (const char *, ...)' [-Wimplicit-function-declaration]
printf( "hello, world\n" );
^
test.c:3:1: note: include the header  or explicitly provide a
      declaration for 'printf'
2 warnings generated.

と、騒々しいワーニングメッセージを出してくれますね。あくまでもワーニングなので、オブジェクトは出力してくれてはいます。

C#の記述は、今のところはこんなもんだということで。ただ、Cとの大きな違いは、Cではmainは関数として定義されるのに対して、C#ではHelloクラスのmainメソッドとして定義されます。

クラスというのはCにはない概念で、僕がC++の理解を諦めた大きな要因です。何が嬉しいのか今も全然理解出ていません。

言ってみれば、変数やプログラムを一つにまとめたものをクラスと言うんだそうですが、そのクラスに含まれるプログラム部分のことをメソッドと呼んでいるのです。マイクロソフトのC#プログラミングガイドでの記載はこちら

と言うわけで、第1回目はこんなところでおしまいにします。