はじめに
普段はPythonしか使っていないのですが、案件の幅を広げるためにTypeScriptの勉強を始めました。
「プロを目指す人のためのTypeScript入門」を読み進めていくシリーズです。
Pythonとどう違うのかを書いていこうと思います
今回Part1は書籍の第2章「基本的な文法・基本的な型」の内容です。
型について
TypeScriptは静的型付け言語
各変数が型を持っていて、型注釈(Pythonでいう型ヒント)を書くことで型を指定する。
const num: number = 1;
num = "hello"; //エラーが発生する
この型注釈は必須なのかをChatGPTに聞きました。
TypeScriptで型注釈は常に必須ではない。 ただし、推論できない箇所や、tsconfig の厳格設定では必要になる場合がある、が正確です。
実務では、だいたい次の感覚がよくあります。
- 書くことが多い
関数の引数
外部公開する関数の戻り値
interface / type で表したいオブジェクト
ライブラリ境界、API入出力、DBレスポンス整形部分- 省略しやすい
const count = 3
const name = "Alice"
const items = users.filter(...) のように右辺から明らかなローカル変数
// これは注釈なしで十分なことが多い
const count = 3; // number と推論される
const userName = "Taro"; // string と推論される
// これは実務では書くことが多い
function greet(name: string): string {
return `Hello, ${name}`;
}
type User = {
id: number;
name: string;
};
function formatUser(user: User): string {
return `${user.id}: ${user.name}`;
}
つまり、初めからPydanticが入っていて、「必須ではないが、Pythonでも型ヒントを書くようなシーンでは型注釈を書こう。」だと理解。
比較演算子
Pythonでは一致か不一致化を評価するために「==」と「!=」を用いるが、
TypeScriptでは「===」と「!==」を用いて評価する方がよい
「==」と「===」の違いは「型の一致をみるかどうか」
const str: any = "3";
console.log(str == 3); // true
console.log(str === 3); // false
三項演算子
Pythonでは
値1 if 条件 else 値2
x = 101
s = 'odd' if x % 2 else 'even'
print(s) # odd
TypeScriptでは
条件 ? 値1 : 値2
const x = 101
const s = x % 2 ? 'odd' : 'even'
console.log(s) // odd
if文
複数の条件分岐の場合
Pythonは「elif」
TypeScriptは「else if」
for文
1~100まで繰り返す場合
Python
for i in range(1, 101):
print(i)
TypeScript
for (let i: number = 1; i <= 100; i++) {
console.log(i)
}
TypeScriptでFizzBuzzを解いてみる
for (let num = 1; num <= 100; num++) {
if (num % 3 == 0 && num % 5 == 0) {
console.log("fizzbuzz");
} else if (num % 3 == 0 ) {
console.log("fizz");
} else if (num % 5 == 0) {
console.log("buzz");
} else {
console.log(num);
}
}
おわりに
- プログラミング言語は「別言語を習得していると新しく学習する言語でも大部分はすんなり理解でき、細かな文法の違いをおさえるだけで良い」といった印象はあったが、本当にその通りだと思う
- 文末の;と、インデントではなく{}でまとめるのに慣れるまで時間がかかりそう