m-eye blog

ノンプログラマによるVBAとPythonの学習記録

動的型付け言語ってなんだ

f:id:m-eye:20181010190201j:plain

 

はじめに

初心者にとって、難しい定義はわかりずらいですね。

ですので、VBAとPythonの比較で動的型付け言語について考えてみたいと思います

 

VBAの静的型付けってなんだ

値や変数の型が プログラムの実行より前にあらかじめ決まっている という性質です。

 

Pythonの動的型付けってなんだ

値や変数の型が プログラムの実行時にはじめて決まる という性質です。

 

型付けってむずかしい

言葉で言うとむずかしいですね。

実例でみてみましょう。

VBAのケース

' VBAの場合
Sub Sample()
    Dim a As Integer
    a = 0
    MsgBox a
End Sub

このプログラムを実行しようと思ったら、エクセルファイル上で、Alt + F8からSampleを実行します。

VBAでは、ふつうはOption Explictで変数宣言を強制して、まず変数の型を宣言しますよね。

ここでは変数aの型をInteger(整数型)として宣言して、その次に変数a0を代入しています。

変数の宣言・型付けをおこなったのちに変数に値を代入しているので、エラーは発生せず、メッセージボックスにはきちん0という数値が表示されるはずです。

a = 0という命令文の実行前にDim a As Integerという変数の宣言と型付けをプログラム内でおこなっているので、プログラムの実行前に変数の型が決まっているということがわかるりますよね。

Pythonのケース

# Pythonの場合
a = 0
print(a)

このプログラムを実行しようと思ったら、PythonはWindowsならコマンドプロンプト上、Macならターミナル上で命令文を実行します。

Pythonは先に変数の宣言・型付けをおこなう必要はないので、いきなりa = 0という命令文を実行していいんです。

ここではPythonがaを変数、0を値と判断して代入処理をおこない、コマンドプロンプト(またはターミナル)上に0という数値を表示するというしくみになっています。

 

くらべてみると

変数への数値の代入と、その数値の表示という機能には違いがないことがわかります。

違いが出たのは、変数を宣言したかしていないか だけです。

だから、むずかしいことは考えずに、「プログラムの実行前か後かうんぬん」を考えるよりも、変数を宣言するかどうかだけを考えるのが、静的・動的型付けを理解する第一歩でしょう。

 

おわりに

CJavaなどの大規模開発の主流となっている言語は、静的型付け言語です。

PythonJavaScriptなどのスクリプト言語は、動的型付け言語です。

VBAは静的型付け言語なので、どちらかというと、CJavaに近いですが、VBAにはVariant型というある意味「ずるい」データ型があります。

バリアント型はすべてのデータを格納できる型だから、もしもVBAで変数の宣言をしない場合は、変数はすべてバリアント型というデータ型になるんです。

勝手にバリアント型になってくれるので、データ型を考えるのが面倒な初心者にはもってこいの言語がVBAですね。

しかし、学習していくうちに、VBAでも変数宣言を強制することを覚え、その上でVariant型をうまく使うことを覚えていくでしょう。

また、Pythonは、わたし自身、まだまだこれから学習していくので、早く動的型付けに慣れたいと思います。

これを読んだみなさんには、データ型を意識してほしいと願っています。

 

Copyright 2018 m-eye blog All Rights Reserved.