Lv777

Lv777

github
twitter
jike
playstation
xiaoyuzhou

データ型

変数#

Rust では、変数は可変と不変に分けられ、それぞれ JS のletconst宣言に対応しています。なぜ変数と呼ばれているのに可変と不変に分けるのか、理解できません。馬は馬ですよね?

// 不変な変数の宣言
let x = 1;
// 可変な変数の宣言
let mut y = 1;

mutmutable(可変)の略語です。文法を学ぶ際には、まずキーワードの英語の意味を理解することが重要です(中国語の開発者にとっては)。覚えることもできますが、すぐに忘れてしまうこともあります。私の英語力は浅いので、この単語の略語は chatGPT に尋ねて初めて知りました。DeepL はおそらくこれがマイナーな単語だと考えているので、中国語から英語への翻訳では結果を返してくれませんでした。

定数#

Rust では、JS とはあまり対応しない定数がありますが、無理に対応させるとすれば、Node.js の環境変数に似ているかもしれません。計算時にランタイムの値を使用することはできず、通常はグローバルスコープで使用されます。

// これはconstですが、あれとは別物です
const SOME_CONSTANT = 10 * 20;

隠蔽#

この機能は個別に定義することもできますが、実際の効果は変数名の再利用です。ただし、隠された変数が現在のスコープで不要になる場合に限ります。JS でも同じような挙動があります(間違えました、JS ではletで変数を再宣言するとエラーが発生します)。私はこれを書くのが混乱しやすいと感じています。

let x = 1;
// このブロックではxは1です
{
	// このブロックでもxは1です
	let x = x + 1;
	// このブロックではxは2ですが、前のブロックのxにアクセスすることはできません
}
// このブロックを抜けると、xは再び1になります

これは代入ではなく、新しい宣言です。ただし、変数名が同じであるだけです。

スカラー#

_スカラー_は、JS のプリミティブ型に似たもので、単独の値を表します。対照的に、複合概念があります。

4 つの基本的なスカラー型は、整数、浮動小数点数、ブール値、文字です。これらの概念については特に説明する必要はありませんが、スカラーとしての文字はchar型を指し、Unicodeの値を表します。つまり、文字、空白文字、漢字、絵文字などです。また、整数の加算、減算、乗算、除算は小数部を切り捨てた結果になるという、私の認識とは異なる点もあります。

複合#

タプル#

_タプル_は、異なる型の複数の値を組み合わせることができ、関数の戻り値などによく使用されます。要素数が 0 のタプルはユニットタプル(?? これはゼロタプルではない)と呼ばれ、JS のvoidに似ています。Rust では、値を返さない式は暗黙的にユニットタプルを返します。

let tup = (1, 'f', true);
let num = tup.0;
// 分解もできます
let (num, str, bool) = tup;

配列#

Rust の配列は、JS の配列とは異なり、[]以外の要件があります。まず、固定長である必要があります。また、すべての要素は同じ型でなければなりません。使用する場合、基本的には 12 の月と 1 週間の 7 日など、列挙可能な同じ種類の定数の組み合わせを宣言します。

let arr = [1, 2, 3];
let first = arr[0];
let last = arr[2];

列挙型#

_列挙型_は、可能な値のすべてをリストアップすることができる型です。Rust の列挙型は、任意の型の値を含むことができます。また、列挙型に関連関数を定義することもできます。これにより、コードの柔軟性が大幅に向上すると感じています。

enum Message { 
	Quit,
	Move { x: i32, y: i32 },
	Write(String),
	ChangeColor(i32, i32, i32),
}

impl Message {
	fn call(&self) {}
}

let move = Message::Move { x: 1,y: 2 }
move.call()

構造体#

_構造体_は、クラスclassの概念に近く、関連する複数のフィールドの集合です。

// 定義
struct User {
	name: String,
	age: u8,
};

// インスタンス化
let user1 = User {
	name: String::from("name"),
	age: 18,
};
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。