2026年3月6日

動的型付け vs 静的型付け

プログラミングの中では、必ず某かの「変数」を使用しますが、その変数使用には予めその変数の属性(変数の長さや属性(タイプ))を定義して使用する「静的型付け変数(Static Typing Variable)」 と、特にそう言う属性を事前に定義せずに、プログラミングの中でその変数が使用されるときに都合良く解釈して使用する「動的型付け変数(Dynamic Typing Variable)」が大きく分けて有りますが、その動的型付け変数を無くそうというブログ

私が最初に使ったプログラミング言語は「アセンブラー(Assembler)」で、その後Basicはお遊び程度で、「パスカル(Pascal)」を弄った後「C/C++」で卒論のコーディング(並列処理言語のコンパイラー)を書いたかな。修飾して、仕事ではアセンブラーでしたが、会社のシステムではFORTRANとかお遊び程度で触れたことも。一番使ったのはその社内システムで自由に使える環境に合った「レックス/REXX(eXtended eXecutor)/再構造化言語」があって、これが初めて触れた「動的型付け変数」をサポートする処理系でした。

例えば、最初に文字列様として定義した変数に、間違って数値データを入れようとすると、コンパイラーならコンパイル中にタイプエラーが表示されるし、インタープリター系だと実行時にやはりタイプエラーとなります。例えば身長体重を入力してBMIを計算するプログラムを作ろうとすると、身長体重の入力表示はテキストデータである必要が有りますが、計算するときには数値データにしないと計算出来ない。だからテキストデータを数値データに変換する関数なんかを一度通して別変数に入れて使用しないといけない。でも動的型付け言語だと、テキストデータとして保存された変数を、そのまま数値データ変数として計算出来るので、コーディングが非常に楽になります。ただし、どの様にタイプ変換されるかはその処理系や状況にもよるので、思わぬバグになる事もあるわけで、結構使うにしても「慣れ」が必要な気がします。

個人的には、小規模なツールみたいなプログラミングなら良いけれど、大規模なシステム開発となると、筆者も書いているように「その変数の役割」が不明だったり曖昧だったりするわけで、保守作業が非常に面倒。また、バージョンアップで処理系のタイプ変換ルールが変わる場合なんかも有って、そうすると以前は問題無かったのに突然暴走するようなったりして大騒ぎに。じゃあ静的型付け変数に全部すれば良いのではといわれるけれど、これも途中で属性とか変更すると突然意図しない動作になったりするので、そうするとデバッグするのも大変。中々難しい所ですよね。この辺り上手くAIを利用してどういう使い方をしたら効率的か事前に判定できるような仕組みがあると良いのだけれど、それならAIに最初からコーディングさせたらということになるだろうし。ちょっと昔を思いだし懐かしさを感じさせる記事でした。

0 件のコメント:

コメントを投稿