Open15
Rustをちゃんと勉強してわかったことまとめ
Option<T>
Option<T>
は、
as
キーワード
as
キーワードは、TypeScriptのas
と同じで、型キャストを行う構文
unsafe
キーワード
メモリの安全性を損なうコードを記述した際にコンパイラがエラーを出すことを回避するためのもの。
ゆえに un safe
整数型
uとつく型が符号なし(unsigned)整数
iとつく型が符号あり(signed)整数
整数リテラル
バイナリリテラル
文字列変換
ポインタ型
メモリの直接操作をする
- Raw Pointer型
- アドレスそのものを扱う
- そのアドレスが有効な領域を参照していることや有効なデータが格納されていることが保証されないことを考慮する必要がある
- C/C++で利用するメモリアドレスを操作するポインタと同様
- Reference型
- 任意の方の値へのアドレスを参照するために使用
- 生のポインタとは違い、参照先アドレスが有効な領域であり、データが格納されていることが保証されている
- 任意の方の値へのアドレスを参照するために使用
宣言
ポインタを扱う変数を宣言するためには、*const
のキーワードを利用して変数宣言する
let 変数名: *const 型名 = &変数名
ポインタが指し示す値を変更可能にするには、*mut
キーワードを利用して変数宣言し
ポインタを渡す場合は、&mut
キーワードを利用する
let 変数名: *mut 型名 = &mut 変数名
可変ポインタ
ポインタを使う変数もmut
キーワードを利用し、別のポインタを代入して利用できる
unsafe
ブロック内でポインタを利用したデータアクセスのことを参照外しという
制御式
条件分岐
if-else
式
if 条件式 {}
if 条件式 {} else {}
if-else-if
式
if 条件式 {} else if 条件式 {} else {}
/* else-if と elseの間にはいくらでもelse-ifを置ける */
if-let
式
三項演算子みたいな使い方をする
let 変数名 = if 条件式 {[条件があった時の処理;] 返す値} else if 条件式{ [条件があった時の処理;] 返す値} else {[どの条件にも合わなかったときの処理;] 返す値}
/* else-if と elseの間にはいくらでもelse-ifを置ける */
パターンマッチング
match
式 (switch
文みたいなもの)
match 式 {
パターン => {処理;},
パターン => {処理;},
パターン => {処理;},
_ => {どのパターンに一致しなかったときの処理;}
}
match-let
式 (switch
と三項演算子を足したみたいなもの)
RangeとOR演算子
これまでのmatch式は
1つのパターンを評価した結果で処理をする形式
分岐評価は以下のことが可能
- Rangeを利用した範囲指定
- OR演算子を利用した複数式の評価で分岐
OR演算子の利用は、「パターンm | パターンn」のような記述ができ、範囲指定とOR演算子を組み合わせることもできる
繰り返し
for
ループ
- カウンタを利用して決まった回数のループ処理をする方法
for カウンタ処理名 in カウンタ変数がとりうる範囲 { 繰り返す処理 }
- 配列、スライスなどの多数の要素を先頭から順番に取り出す方法
for 1つの要素を受け取る変数 in 配列やスライスなど { 繰り返す処理 }
while
式
while-let
式
loop
式
ちょっと脇道にそれて
勉強も兼ねて、RustでNotion APIを扱うための
notion
crateを使おうと思ったが、それを使って実装した記事が見当たらんくてぴえん。
そのため、自分で実装していくために、学んでいくことにした。
今回読むもの
notion::NotionApi::new(api_token: String)
に対して、
Notion APIを使う上で作成したTokenを渡して、インスタンスを作成する
use notion::NotionApi;
#[tokio::main]
async fn main(){
dotenvy::dotenv().expect(".env file not found");
let client = NotionApi::new(dotenvy::var("NOTION_KEY").unwrap()).expect("取得に失敗しました");
}