どうも、はっし~だす。
先日、わたくしが非常勤講師をさせていただいている、某職業訓練施設のOB主催オンライン勉強会(という名の飲み会)へ参加しました。
その時に話した内容を少しまとめたいと思います。
※C言語からプログラミングを学んだ初級~中級向けの内容なので、あまり深いところまでは突っ込まない内容となっております。正確にはちょっと違うんじゃないか?的なところもあるかもしれませんが、ご容赦ください。明らかな間違いがある場合はご指摘お願いします。
C#・Java誕生の歴史
おいおい!そこからかい!っとお思いの方もいるでしょうが、なぜC言語からC#とJavaが学べるのかという話につなげるためには必要なところです。ただしかなりザックリとした感じでやります。
- C言語全盛期
↓ オブジェクト指向に対応とかいいよね~ - C++誕生!!!
↓ メモリ管理とか何とか色々面倒な事は別に用意したらもっと便利じゃね? - Java誕生!!!
↓ Microsoft「Javaのライセンス云々とか言われたらウチで用意するわ~」 - C#誕生!!!
ってな感じだったと思います。ちなみにC#の「#」はC言語を拡張した(インクリメントした)C++からさらに進化したC++++だとさすがに・・・なので、+を重ねた「#」にしたらしいです。
つまり、どちらも元をたどればC言語なのです!C言語の知識はC#・Javaに活かせないはずは無いのです!
※今回はC++を完全に無視して話を進めますので・・・すいません。
C言語とC#・Javaの特徴
- C言語
- メリット
- コンパイルすると、CPUが理解できるネイティブコード(マシン語)を生成する。結果として処理速度が速く、動作に必要な条件が低くて済む。
- メモリや他のハードウェア直接操作できる。
- デメリット
- すべての処理をコードで記述する必要があるし、オブジェクト指向の記述ができないので複雑になりやすく、コード量が多くなる。
- メモリ操作やデバイスの知識も必要になるので、学習範囲が広い。
- 実行構成・環境に依存する
- 組込み・OS・デバイスドライバ開発向き
- メリット
- C#・Java
- メリット
- メモリ管理・OS・ハードウェア構成を意識せずにコーディング可能。
- オブジェクト指向のプログラミングが可能。
- デメリット
- コンパイルすると中間ファイルを生成し、実行時に再度コンパイルしながら実行する。中間ファイルを実行するためには.net frameworkやJRE(Java Runtime Environment)が必要となる。
- 動作に必要な条件が高くなる。
- ソフトウェア開発向き
- メリット
C#・Javaの変数について(値型・参照型)
C#・Javaを一括りで?確かに違いはあるものの、基本的な部分は似ています。
値型一覧
型名称 | C# | Java | サイズ(byte) |
---|---|---|---|
論理型 | bool | boolean | 1 |
整数型(符号なし) | sbyte(byte) | byte(-) | 1 |
整数型(符号なし) | short(ushort) | short(-) | 2 |
整数型(符号なし) | int(uint) | int(-) | 4 |
整数型(符号なし) | long(ulong) | long(-) | 8 |
単精度浮動小数型 | float | float | 4 |
倍精度浮動小数型 | double | double | 8 |
10進数少数型 | decimal | ー | 16 |
文字型 | char | char | 2 |
構造体 | 使用可 | ー | ー |
Javaには符号なし整数が無いのとdecimal・構造体が無いという部分以外は基本的に同じです。上記以外の型は参照型になります。
参照型
型名称 | C# | Java | サイズ(byte) |
---|---|---|---|
文字列 | string | String | ー |
配列・List等 | 〇 | 〇 | ー |
その他のクラス | 〇 | 〇 | ー |
それでC言語とどう繋がるんだ?って話ですが、C言語の基本的なデータ型と構造体が値型にあることが分かると思います。
Javaに関しては符号なしが無くて論理型が増えているだけ、C#は論理型とdecimalが増えているだけです。
共通点はC言語でも変数に対して値が入っているのでそのまま=で代入できるデータ型です。
では参照型に当たるものは何か?そうポインタです。C言語で頭を悩ませたポインタに近いものが参照型になります。
C言語でもchar型の配列をポインタで操作する課題がたくさんあったと思います。
その他のクラスについてはC言語ではクラスという考え方が無いのでここでは割愛しますが、値型以外のものは参照型という認識でいいかと思います。
今回はここまでで、次回は文字列をメインに値型と参照型の振る舞いについてやりたいと思います。
ではでは
>>Next C言語から学ぶC#とJava② 文字列編 |