静的型付け言語について|使用方法からメリットとデメリットについても解説
- システム
エンジニア - Haxeというプログラム言語があると聞きました。どのような特徴のある言語なのか教えてください。
- プロジェクト
マネージャー - わかりました。まず入門編として簡単に見ていきましょう。
プログラミング言語の種類
プログラミング言語の種類には、静的型付け言語と動的型付け言語があります。
それぞれの言語について、具体的な言語の種類、変数やデータ型の使用方法、メリット、デメリットについて、見ていきましょう。
静的型付け言語
静的型付け言語とは、変数の型が状況によって変わらない(静的)プログラミング言語のことです。
変数を使用する際に、型を宣言する必要があります。
例えば、
・C/C++
・C#
・Java
・Go
・Scala
・Swift
などがこの言語に相当します。
C++の場合
静的型付け言語の例として、C++の場合について例を見てみましょう。
以下は、1+2を実施し、その答えを出力するプログラム例です。
1
2
3
4
5
6
7
8
9
10
11
|
using namespace std;
int main()
{
int x = 1;
int y = 2;
cout << x + y << endl;
return 0;
}
|
変数x、yの前にintがついており、整数型が宣言されています。
動的型付け言語
動的型付け言語とは、変数の型が状況によって変わる(動的)プログラミング言語のことです。
変数を使用する際に、型を宣言する必要がありません。
例えば、
・Python
・Ruby
・JavaScript
・PHP
などがこの言語に相当します。
Pythonの場合
動的型付け言語の例として、pythonの場合について例を見てみましょう。
同様に、1+2を実施し、その答えを出力するプログラム例です。
1
2
3
4
|
x = 1
y = 2
print( x + y )
|
変数x、yについて、型を宣言する必要がありません。
静的型付け言語について3つ
プログラミング言語の種類として、静的型付け言語と動的型付け言語について説明しました。
静的型付け言語について具体的なメリット、デメリットとプログラミング言語例を説明していきます。ぜひ参考にしてみてください。
1:メリット
静的型付け言語は、型をあらかじめ宣言するため、それによるメリットがあります。
・メモリ領域の最適化ができる
・パフォーマンスの向上ができる
・コンパイル時にエラーが起きてくれる
上記の3つのメリットについて説明します。
メモリ領域の最適化ができる
静的型付け言語では、あらかじめ型宣言によりデータの型を決めておきます。それにより、メモリ領域の最適化が行えます。
例えば、整数型intは4byte、浮動小数点型floatは4byte、文字型charは1byteと決まっているため、プログラム内でどれだけ変数が使われているかを確認することで、必要なメモリ領域がわかります。
そのため、静的型付け言語では、プログラムを実行する前にメモリ領域を最適化できます。
パフォーマンスの向上ができる
静的型付け言語では、データ型を宣言することで、コンパイル時(コンピュータが実行可能な形式に変更する作業)にどれだけメモリを使用するかがわかります。
例えば、整数と整数の演算を考えてみます。
整数どうしの演算では小数が発生することはないため、小数に使用されるメモリを確保しておく必要がありません。つまり、過剰にメモリを確保しておく必要がなく、その分のメモリを他の演算に使用でき、パフォーマンスを向上できます。
コンパイル時にエラーを処理できる
動的型付け言語では、コンパイルが不要であるため、プログラム実行まで型違いのエラー処理ができません。
一方、静的型付け言語では、プログラム実行前にコンパイルする必要があり、その際に型違いのエラーを処理できます。つまり、プログラムを実行しなくても、エラー処理ができます。
2:デメリット
静的型付け言語では、あらかじめ型を宣言する必要があり、それによるデメリットもあります。
・やや固めで幅が狭まる
・必ず型名を記述しないといけない
という2つのデメリットについて説明します。
やや固めで幅が狭まる
静的型付け言語に代表される言語C++の例を、再度下記に示します。
1
2
3
4
5
6
7
8
9
10
11
|
using namespace std;
int main()
{
int x = 1;
int y = 2;
cout << x + y << endl;
return 0;
}
|
やや固い感じがし、初めてプログラミング言語を見る人にとっては、難しい印象があります。
必ず型名を記述しないといけない
静的型付け言語であるため、使用する変数すべてにおいて型名を記述しないといけません。その分、型名を記述する必要のない動的型付け言語と比べると、時間がかかります。また、コードの文字数も増加し、見た目のスマートさに欠けます。
3:プログラミング言語で有名な例
静的型付け言語の有名な例について、簡単に説明します。
・C言語
C はシステムの共通言語として様々なプラットフォームで使われています。システムに近い処理のため、高速に動作することが可能です。
・C++
C++は、Cから派生した言語で、高速に動作し、ハードウェアを直接制御できます。言語文法が複雑で習得の難易度は高いですが、様々なハードウェアを制御できるため、広く需要があります。
・Java
Javaは、多くのOSで動かせる汎用言語です。また、実行速度が早く堅牢な言語であるため、アクセスが集中しやすい大規模なWebサービスにも適しています。Androidのアプリでは多くのJava製のスマホアプリがGoogle Playに登録されています。
・C#
C#は、マイクロソフト社が開発したC系言語です。そのため、多くのWindowsアプリの開発に使用されています。
・Scala
Scalaは、2001年にスイス連邦工科大学のマーティン・オーダスキー教授が開発した比較的新しい言語です。Javaのライブラリをほぼ全て使用できるため、Javaの後継言語として注目されています。
・Swift
Swiftは、Apple社のmacOSやiOS向けアプリ開発のための言語です。iphone向けアプリを作成するエンジニアには必須の言語といえます。
動的型付け言語について3つ
静的型付け言語について理解が深まったところで、動的型付け言語について、メリット、デメリット、プログラミング言語例を説明していきます。ぜひ参考にしてみてください。
1:メリット
動的型付け言語は、型宣言が不要であるため、それによるメリットがあります。
・プログラムを比較的簡単に記述できる
・記述する量が減る
の2つのメリットについて説明します。
プログラムを比較的簡単に記述できる
動的型付け言語は、型宣言が不要であるため、静的型付け言語に比べ、プログラムを比較的簡単に記述できます。
1+2を実施し、その答えを出力するプログラム例について比較すると、動的型付け言語のPythonで記述したプログラムのほうが、端的に書けます。また、データの型の知識がなくても記述できるため、初心者でも簡単に記述できます。
記述する量が減る
上記と同様に、動的型付け言語は型宣言が不要であるため、静的型付け言語に比べ、記述量を大幅に減らせます。
型宣言のintやfloatがない分記述する量が減り、可読性に優れています。また、使用する変数の数が多い程、その効果は大きくなります。
2:デメリット
動的型付け言語は、型宣言が必要な静的型付け言語に比べ、型宣言が不要であるがゆえのデメリットがあります。
ここでは、
・余分なメモリで圧迫される
・プログラム実行時にしかバグが見つけられない
の2つのデメリットについて説明します。
余分なメモリで圧迫される
動的型付け言語は変数を宣言する時にデータ型を決める必要がありません。しかし、そのためどのような型になっても、計算ができるようメモリ領域を確保しておく必要があります。
例えば、整数型int(4byte)で確保していても、プログラムの後半で倍精度double(8byte)にする必要がある場合は、その分余分なメモリを確保しておく必要があり、メモリが圧迫される可能性があります。
プログラム実行時にしかバグが見つけられない
静的型付け言語ではプログラムの実行前にコンパイルにより、型のエラー処理ができるのに対し、動的型付け言語では、プログラム実行時にしかバグを見つけられません。
数行の簡単なプログラム動作での問題は小さいですが、大規模な計算やWebシステムなどではデバッグに時間がかかるため、コンパイル段階でできるだけバグをなくしておくことが重要となります。
3:プログラミング言語で有名な例
動的型付け言語の有名な例について、簡単に説明します。
・Python
Pythonは、AIや機械学習で脚光を浴びた言語です。インタプリンタで動作し、自動処理、統計・解析、数学系などのライブラリが豊富であり、現在人気が高まっている言語です。また、多くのWebサイトで使用方法が説明されているため、プログラム初心者に馴染みやすい言語です。
・Ruby
Ruby は、まつもとゆきひろ氏により開発された言語で、可読性を重視した構文になっています。サーバー側で実行して動的な Webサービスやアプリケーションで使用されます。
・JavaScript
JavaScriptは、Webのフロントエンドで主に活用されている言語です。言語の習得難易度は低く、WebやアプリのUI開発などに使えます。
・PHP
PHPは、Webのサーバサイドで主に活用されている言語です。世界で広く使われているコンテンツ管理システムであるWordPressは、このPHPで記載されています。ソースコードの可読性が高く、初心者にも習得しやすい言語です。
Haxe入門の使用する方法について4つ
今回は、Haxe(ヘックス)入門編です。
Haxeとは、JavaScriptやPythonなど、様々なコードを生成することができるプログラミング言語です。また、Haxeは静的型付けのオブジェクト指向言語です。マルチプラットフォーム開発に使用されることが多いです。
入門編として、Haxeの導入方法から、その使い方について紹介します。Haxe入門編に興味のある方はぜひご覧ください。
1:Haxeのインストール
入門編として、Haxeをインストールしてみましょう。以下サイトより、ご自身の環境に合ったものもダウンロード・インストールしてください。
https://haxe.org/download/
2:様々なコードを生成
Haxeは、JavaScriptやPythonなど、様々なコードを生成することができます。ここでは、入門編としてJavaScriptを生成してみましょう。
まずはTest.hxを作成し、以下のように記述します。
1
2
3
4
5
6
|
class Test {
static function main() {
trace("Hello World !");
}
}
|
Haxeでコンパイルしてみましょう。
メインのエントリポイントを指定し、-jsオプションでJavaScriptに変換します。
コンパイルすると、hello.jsが生成されます。
1
2
|
haxe.exe -main Test -js hello.js
|
hello.jsの中身は以下のようになっています。
trace()はconsole.log()に変換されています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
// Generated by Haxe 4.1.2
(function ($global) { "use strict";
var Test = function() { };
Test.main = function() {
console.log("Test.hx:3:","Hello World !");
};
var haxe_iterators_ArrayIterator = function(array) {
this.current = 0;
this.array = array;
};
haxe_iterators_ArrayIterator.prototype = {
hasNext: function() {
return this.current < this.array.length;
}
,next: function() {
return this.array[this.current++];
}
};
Test.main();
})({});
|
それではhello.jsを実行してみましょう。
ここでは、Node.jsをインストールしている前提で進めます。
1
2
3
|
> node hello.js
Test.hx:3: Hello World !
|
実行すると、Hello Worldが標準出力されることが分かります。
このように、JavaScriptのコードを生成して実行できました。
Haxeではこの他にも様々なコードを生成できます。
haxe -hコマンドを実行すると、生成可能なコードを確認できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
> haxe -h
Target:
--js <file> compile code to JavaScript file
--lua <file> compile code to Lua file
--swf <file> compile code to Flash SWF file
--neko <file> compile code to Neko Binary
--php <directory> generate PHP code into target directory
--cpp <directory> generate C++ code into target directory
--cppia <file> generate Cppia code into target file
--cs <directory> generate C# code into target directory
--java <directory> generate Java code into target directory
--jvm <directory> generate JVM bytecode into target file
--python <file> generate Python code as target file
--hl <file> compile HL code as target file
|
JavaScript以外にも多くの言語に対応しています。
1つのhxファイルから様々なコードを作成できます。
以降の章では、JavaScriptをターゲットに説明します。
3:型推論
入門編として、型推論を説明します。Haxeは静的型付け言語ですが、型推論があります。
型推論とは、型を省略すると、コンパイラが空を推測してくれることです。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class Test {
static function main() {
var i:Int = 1;
trace(i);
var j:Int;
j = 2;
trace(j);
var k = 3;
trace(k);
}
}
|
変数i,jは型(ここではInt)を指定しています。
変数kは型を指定していませんが、コンパイルは成功します。
実行すると、以下のようになります。
1
2
3
4
|
Test.hx:4: 1
Test.hx:8: 2
Test.hx:11: 3
|
型推論でIntと解釈されています。
また、型にDynamicを指定すると、何を指定してもOK(なんでもあり)になります。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Test {
static function main() {
var i:Dynamic = 5;
var f:Dynamic = 5.0;
var s:Dynamic = "abc";
var b:Dynamic = true;
trace(i);
trace(f);
trace(s);
trace(b);
}
}
|
コンパイルは成功し、実行すると以下のようになります。
1
2
3
4
5
|
Test.hx:7: 5
Test.hx:8: 5
Test.hx:9: abc
Test.hx:10: true
|
Dynamicを使うとコンパイラが型のチェックができなくなるので注意が必要です。
静的型付けがHaxeの利点なので、慣れないうちは型推論やDynamic型は使わないほうが良いです。
4:クラス
入門編として、Haxeでクラスを生成してみます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
class Test {
static function main() {
var human = new Human("Taro", 30);
trace(human.name);
trace(human.age);
}
}
class Human
{
public var name : String;
public var age : Int;
// constructor
public function new(name, age)
{
this.name = name;
this.age = age;
}
}
|
Humanクラスを生成して、クラス変数を表示します。
コンパイルして実行すると、以下のようになります。
1
2
3
|
Test.hx:4: Taro
Test.hx:5: 30
|
- システム
エンジニア - マルチプラットフォームなプログラム言語ということですね。
- プロジェクト
マネージャー - 開発者が最適なプラットフォームを選択できるように開発されたプログラム言語です。
静的型付けのオブジェクト指向言語について理解して活用しよう!
Haxe入門編、いかがでしたでしょうか。
Haxeとは、JavaScriptやPythonなど、様々なコードを生成することができるプログラミング言語です。また、Haxeは静的型付けのオブジェクト指向言語です。Haxeの導入方法から、その使い方について紹介しました。
今回紹介したものはあくまでも入門レベルなので、もっと色々なことができます。ぜひご自身でソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)