~静と動~
空手・柔道・合気道などの武術
書道・華道・茶道・絵画などの芸術
そして神髄は「禅」にあり!
今回、まさかの精神論…
ということではなくて、「静的」「動的」というのはなんなのか?という回です。
staticとdynamic
まず始めに、静的、動的という言葉ですが、
「静的」はスタティック(static)という言い方もします。
対して「動的」はダイナミック(dynamic)という言い方もします。
まあそもそも英語のstatic/dynamicを日本語に訳した時に静的、動的になったということですけどね。
そして、まずここを押さえておいて欲しいのですが、ソフトウェアの世界では
スタティック:(プログラム等の)実行前
ダイナミック:(プログラム等の)実行時(実行中)
という意味があるのです。実行前か実行時かで分けているのです。
はい。以上!
え、もう終わりですか?
うん。言いたいことはこれだけ。
ですが、それだけだと寂しいので、一応、静的・動的の例をお示ししたいと思います。
いろいろな静的 vs 動的
以下、あまり詳細な説明は行わず、静的・動的の違いにフォーカスを当てることにします。
コンパイラ言語 vs インタプリタ言語(スクリプティング言語)
ソフトウェアの勉強をされている方は何らかのプログラミング言語を勉強されていると思いますが、
プログラミング言語は大きく2つに分かれます:
「コンパイラ言語」と「インタプリタ言語(スクリプティング言語)」
コンパイラ言語(静的言語)
C言語、C++、Java、C#なんかはこちらですね。
プログラムを実行前にコンピューターが実行できる状態まで変換するタイプ。
変換するタイミングでプログラムのエラー(記述ミス)の検出ができるので、比較的不具合が入り込みにくい。また、先に変換するので実行速度が速い。
インタプリタ言語(スクリプティング言語)(動的言語)
JavaScript、Python、Ruby、PHPなどはこちらに含まれます。
プログラムは実行するタイミングで解釈される。そのため実行速度はコンパイラ言語に比べて遅いが、プログラムが簡潔に記述できることを志向する言語が多く、またプログラムの変更を即時反映することができる、というメリットがある。
スタティックメソッド vs インスタンスメソッド
スタティックメソッド(静的メソッド)
クラスメソッド、という言い方の方馴染みのある方も多いでしょうか。インスタンスの生成をしなくても実行可能なメソッドのこと。
インスタンスメソッド(動的メソッド)
初学者の方は単に「メソッド」という言い方で覚えているかもしれません。
インスタンスを生成した後、そのインスタンスに対して使用できるメソッド。
スタティックライブラリ vs ダイナミックライブラリ
スタティックライブラリ(静的ライブラリ)
プログラムの作成時(実行前)にリンクされているライブラリ(ファイル)。
Linuxなら拡張子は .a(Archive)。Windowsなら .lib(library)。
ダイナミックライブラリ(動的ライブラリ)
プログラム実行時、あるいは実行中にリンクされるライブラリ(ファイル)。
Linuxなら拡張子は .so(Shared Object)Windowsなら .DLL(Dynamic Linking Library)というファイル。
まとめ
今回一番言いたかったのは
- 静的:実行前
- 動的:実行時(および実行中)
というこの2つの区別です。
いろいろなところに出てはくるものの、静的・動的の説明を見ることは少ないと思いますので、ここに説明させていただきました。