LoginSignup
2
1

動的型付けと静的型付けの違い

Last updated at Posted at 2023-08-09

何度ドキュメントを読んでも頭に入ってこないこのテーマ。
基礎中の基礎だと思うのですが、なんで理解できないかなーというと私はjs以外の言語を扱えないからな気がします。動と静の違いがわからない。

今日はchatGPTを使いながら、調べたことをまとめてみます🐥

▼「動的型付け」とは

変数を使うときに、その中身のデータ型(数字や文字列などのデータの種類)をあとから決めることができることを意味します。
最初はどんなデータでも入れられて、その後でデータの種類を変えることもできます。(変換で手間はかかるかもしれませんが…)

=======8/11 0:27追記=======

下記のように教えていただきましたー!

Pythonの場合:
値はすべて参照型オブジェクトです。
変数に型はなく、変数は値(オブジェクト)への参照を保持するだけです。
参照先の値が型情報を持っています。
別の型の値を代入すると保持する参照が変わるだけで、何も変換しません。

=======追記ここまで=======

※動的型付けのプログラム言語
 JavaScript / Python / Ruby / PHP など

柔軟さ:新しいデータ型を試したり、プログラムの変更が簡単
迅速な開発:データ型を気にせずに書け、直感的な開発ができる
簡単さ:勉強コストが低く、初心者でも学びやすい

バグ発見の遅延:型エラーがコードの実行時に発見されるので、バグの発見が難しくなるかも
無駄なメモリの発生:必要なメモリ数が把握できないため余分なメモリ領域が必要になる(pythonならメモリ数が把握できるらしいとのこと)

▼「静的型付け」とは

変数を使うときに最初からその中身のデータ型を指定しなければならないタイプの型付けです。
つまり、変数を作るときに「これは数字」とか「これは文字列」と宣言する必要があります。
その後に変数の中身を変える際も、同じ種類のデータを入れる必要があります。

※静的型付けのプログラム言語
 TypeScript / C/C++ / C# / Java など

安全性:プログラムの実行前にエラーが発見されるので、安全なプログラム作成ができる
厳密さ:型が明確なので大人数での開発でも堅牢で、人によって書き方がばらつきにくい

少し複雑:ある程度知見が必要で初学者には敷居が高くい
柔軟性の低下:ひとつひとつ型を指定し、それに従う必要がある(データ型を変更するのも少し時間がかかる)

▼余談:chatGPTにも聞いてみました

質問文に「中学生でもわかるように教えて!」と付け加えるだけで、めちゃくちゃ易しい文章になるのでよくやります。
(たまに小学生レベルにしてもらうことも🎒🌷)

今回はねこちゃんを使って説明してくれました…!やさしい
↓↓動的型付けについて

例えば、ねこちゃんを表す変数を考えてみましょう。最初はそのねこちゃんが何かはわからなくても大丈夫です。その変数にはいつでも数字や文字列、他のものを入れることができます。

let neko = "にゃーん";  // 最初は文字列を入れてみる
console.log(neko);

neko = 3.14;  // その後、数字を入れてみる
console.log(neko);

↓↓静的型付けについて

変数を使うときに最初からその中身のデータの種類(数字や文字列など)を指定しなければならないタイプの型付けです。つまり、変数を作るときに「これは数字だよ」とか「これは文字列だよ」と宣言する必要があります。その後、変数の中身を変える際も、同じ種類のデータを入れる必要があります。
例えば、次のような感じです。

let age: number = 10;  // 変数ageは数字だよと宣言
console.log(age);

age = "こんにちは";  // エラーが出る!数字じゃないものを入れようとしたから

(ねこちゃんは…?:cat:

▼最後に

動的型付けと静的型付けの違い、メリットやデメリットについて学びました。
プロジェクトや状況によってもどちらが最適か変わるようですね。
TypeScriptなどの開発をしてみると、より深く理解できそうです!

関連してデータ型についても理解が深まったので良かったです:ok_woman_tone1:

こんな感じでのろのろと記事を更新していこうと思いますー!

▼参考

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1