変数の宣言
TypeScriptの場合
TypeScriptではlet
やconst
を使って変数を宣言します。
let mutableVariable = 42; // 再代入可能
const immutableVariable = "Hello, TypeScript!"; // 再代入不可
Rustの場合
Rustではlet
を使って変数を宣言します。デフォルトでは不変(immutable)ですが、再代入可能にしたい場合はmut
キーワードを使用します。
let immutable_variable = "Hello, Rust!"; // デフォルトで不変
let mut mutable_variable = 42; // 再代入可能
mutable_variable = 100; // OK
関数の宣言
TypeScriptの場合
TypeScriptではfunction
キーワードを使うか、アロー関数の形で関数を宣言します。戻り値の型はオプションですが、型を明示することが推奨されます。
// functionを使う
function add(a: number, b: number): number {
return a + b;
}
// アロー関数で書く
const greet = (name: string): string => {
return `Hello, ${name}!`;
};
Rustの場合
Rustではfn
キーワードを使って関数を宣言します。パラメータと戻り値の型を必ず指定する必要があります。
fn add(a: i32, b: i32) -> i32 {
a + b // セミコロンを省略すると値が戻り値になる
}
fn greet(name: &str) -> String {
format!("Hello, {}!", name) // Stringを生成
}
型アノテーション
TypeScriptの場合
TypeScriptでは、変数や関数のパラメータ、戻り値に型を付けることができます。型推論させることも可能です。
let count: number = 10;
let message: string = "TypeScript is fun!";
Rustの場合
Rustでも型アノテーションを使います。型推論させることも可能です。
let count: i32 = 10; // 型を明示
let message = "Rust is fun!"; // 型推論で&strと判定
オブジェクト型の宣言と生成
TypeScriptの場合
TypeScriptでは、interface
やtype
を使ってオブジェクトの型を定義します。その型に基づいてオブジェクトを生成します。
type User = {
id: number;
name: string;
};
const user: User = {
id: 1,
name: "Alice",
};
Rustの場合
Rustでは、struct
を使って構造体を定義します。インスタンスを生成する際はフィールド名を指定して値を渡します。
struct User {
id: u32,
name: String,
}
let user = User {
id: 1,
name: String::from("Alice"),
};
undefined
の可能性とOption
型
TypeScriptの場合
TypeScriptでは、型にundefined
を含めて明示することで対応します。
function findUser(id: number): User | undefined {
if (id === 1) {
return { id: 1, name: "Alice" };
}
return undefined;
}
const user = findUser(2);
if (user) {
console.log(user.name);
}
Rustの場合
Rustでは、値が存在するかどうかを安全に扱うためにOption
型を使用します。Some
で値をラップし、None
で値がないことを表現します。
fn find_user(id: u32) -> Option<User> {
if id == 1 {
Some(User {
id: 1,
name: String::from("Alice"),
})
} else {
None
}
}
let user = find_user(2);
if let Some(user) = user {
println!("{}", user.name);
}