PythonとTypeScriptを比較する

## 今日の投稿について
私は非エンジニアですが、1年ぐらい前からAIを使いながらPythonのプログラミングをしています。今週から、初めてフロントエンドの学習を始めて、まずはTypeScriptとは？どういう言語かということをUdemyで学んでいます。Udemyの動画を30分ぐらいみた段階で、Pythonとの書き方の違いが色々あることがわかってきたので、今日はPythonからとTypeScriptの違いについて調べた内容を記事にしていきます。
私の様にPythonからプログラミングを始めたビジネスパーソンは結構な数いるんじゃないかなーと思うので参考になればと思います。

## 初学者から見たPythonとTypeScriptの違い
Pythonからプログラミングを始めた非エンジニアがTypeScriptの学習を始めると、いくつかの違いや新しい概念にとまどう。

・英語っぽいPythonに比べて、TypeScriptの方がプログラムっぽい書き方な気がする
・型システムの違い（Pythonの動的型付けに慣れてると型を常に意識しなければならないことに戸惑う）
・構文がだいぶ違う。中括弧、セミコロン、変数宣言のキーワードなど、新しい構文規則に適応する必要。アロー関数、スプレッド演算子、デストラクチャリング...(まだよく分からん...)
・Pythonでは、簡潔で動的な方法で実装できるのでとっつき易いが、TypeScriptは、クラス、インターフェース、継承など、オブジェクト指向の概念に馴染みが薄いので理解するのに時間がかかりそう
・モジュールの概念やインポートの構文が違ってちょっと混乱（似てはいる）
・TypeScriptのエラーメッセージは、型に関連するものが多いらしく（まだ遭遇していない）、Pythonとは異なる内容になる。エラーメッセージを理解し、適切にデバッグするためには、TypeScriptの型システムや構文に関する知識が必要(らしい)

## 英語っぽいPythonとよりプログラムっぽいTypeScript

### Pythonになぜ英語らしさを感じるのか？

・Pythonは、可読性と簡潔さを重視して設計されていて、構文がシンプルで、英語に近い単語や表現を使用していると思う。if、for、while、def、など、キーワードが英単語に近い。インデントを使用してブロックを定義するのも文章っぽくて視覚的に見易い。

・TypeScriptは、JavaScriptをベースにしており、C++やJavaなどの伝統的なプログラミング言語の構文に似ているとのこと。中括弧（{}）を使用してブロックを定義し、セミコロン（;）で文を区切るなど、より一般的なプログラミング言語の書き方に近い。型を明示的に指定する必要があるため、変数や関数の定義がより厳密でエンジニアっぽい気がする（めっちゃ主観）

### 違いは、言語の設計思想や目的に由来。

Claudeに聞いてみると...
>Pythonは、プログラミング初心者でも学びやすく、コードの読みやすさを重視。シンプルで英語に近い構文により、コードの意図が明確になります。TypeScriptは、大規模なソフトウェア開発や型の安全性を重視する環境で使用されることを想定していて、一般的なプログラミング言語の構文を採用することで、他の言語からの移行がスムーズになり、開発者にとって親しみやすくなります。ただし、これは主観的な印象であり、個人によって受け取り方は異なります。Pythonを使い慣れた人にとっては、Pythonの構文がより自然で読みやすく感じられるかもしれません。一方、TypeScriptに慣れている人にとっては、TypeScriptの構文がより明確で理解しやすいと感じられるでしょう。

なるほどね。まあそりゃそうだ。たんに自分がPythonの書き方にある程度の時間を通して慣れただけなのかもしれない。


## 比較詳細

変数宣言と型指定
(TypeScriptは変数宣言時に型を指定するが、Pythonは動的型付けで型指定は不要。)
戸惑い度：😫😫

```TypeScript.ts
let age: number = 25;
const name: string = "John";
```


```Python.py
age = 25
name = "John"
```


関数の定義
(Pythonの方が少なくてすっきりしている気はする。)
戸惑い度：😫

```TypeScript.ts
function greet(name: string): string {
  return `Hello, ${name}!`;
}
```

```Python.py
def greet(name):
    return f"Hello, {name}!"
```


クラスの定義
戸惑い度：😫😫

```TypeScript.ts
class Person {
  private name: string;
  constructor(name: string) {
    this.name = name;
  }
  greet() {
    console.log(`Hello, my name is ${this.name}.`);
  }
}
```

```Python.py
class Person:
    def __init__(self, name):
        self.name = name
    def greet(self):
        print(f"Hello, my name is {self.name}.")
```

モジュールのインポート
(似てはいるが書き方が違う)
戸惑い度：😫

```TypeScript.ts
import { someFunction } from "./myModule";
```

```Python.py
from myModule import someFunction
```

型推論
(TypeScriptは型推論機能を持っているが、Pythonは動的型付けのため型推論は不要。)
戸惑い度：😫😫

```TypeScript.ts
let x = 10; // xはnumber型と推論される
```

```Python.py
x = 10 # xはint型
```

命名規則(個人的にはこれが一番辛い...TypeScriptはキャメルケースで、Pythonはスネークケース。なんで違うの...)
戸惑い度：😱😱😱😱😱


```TypeScript.ts
変数、関数、メソッド: キャメルケース (例: firstName, getUserId)
クラス、インターフェース: パスカルケース (例: Person, UserInterface)
定数: アッパースネークケース (例: MAX_VALUE, API_URL)
```


```Python.py
変数、関数、メソッド: スネークケース (例: first_name, get_user_id)
クラス: パスカルケース (例: Person, UserInterface)
定数: アッパースネークケース (例: MAX_VALUE, API_URL)
```


他にも色々あるけど今日はこの辺まで

## 感想
人に例えるとTypeScriptは厳密真面目タイプで、Pythonはとりあえず進めてから考えようタイプ、みたいな感じ？厳密タイプなので長くなりがちだけど、その分エラーやバグを事前に見つけやすそう。

書き方はだいぶ違うけど概念を理解しておけばCopilotを使えば細かい書き方は覚える必要はないし(覚える気ゼロ)、何とかなる気もしてきました！

明日もUdemyの視聴を続けてTypeScriptの理解を深めていこうと思います。


## 参考記事・動画
https://qiita.com/ogaoga/items/ab51db7437ffc5221d5d

https://jitera.com/ja/insights/4795

https://www.udemy.com/share/103Fxl3@UDhc2GLy--dJB8IILNoVYBzJVc0U2vvBZDSfZvL8tNjRJz3HmzZlXOVsQdxYE0qpaQ==/