【Rust】Rust練習問題集に問題を追加しました
ものにするぞー
Q4
fn main() {
let a = { 10 + 20; };
println!("a is {}", a);
}
はエラーが起きます。正しくなおして、原因を教えてください
A4
ブロック内にセミコロンを入れると文になります。
()と言う値が変数aに入ってしまう
このaはprintln!マクロで表示ができないのでコンパイルエラーになります
関数を式として扱った場合
fn main() {
// 関数は式になる
let a = add(10, 20);
println!("a is {}", a);
}
Q5
for文を使って1から10まで加算し、合計が代入されているsumを表示してください
A5
fn main() {
let mut sum = 0;
for i in 0..10 {
sum += i ;
}
println!("sum is {}", sum);
//sum is 45
}
Q6
このエラーを解決してください
error[E0384]: cannot assign twice to immutable variable `sum`
--> src/main.rs:4:9
|
2 | let sum = 0;
| ---
| |
| first assignment to `sum`
| help: make this binding mutable: `mut sum`
3 | for i in 0..10 {
4 | sum += i;
| ^^^^^^^^ cannot assign twice to immutable variable
error: aborting due to previous error
For more information about this error, try `rustc --explain E0384`.
error: could not compile `hello`.
A6
fn main() {
let sum = 0;
for i in 0..10 {
sum += i;
}
println!("sum is {}", sum);
}
Q7
ビット演算子とはなんですか?
A7
コンピューターの0と1のビット単位を計算するための特別な演算子
- CPUは主に8ビット(1バイト)の単位で計算を行う(0と1の8桁でで表現すること8ビットを1バイトとする)
Q8
”hello”をprintするだけの関数no_paramをmain関数の中で呼び出してください。
A8
fn main() {
no_param();
}
fn no_param () {
println!("hello");
}
Q9
1と2を引数x, yとして渡してそれらを出力する関数を定義して実行してください
A9
fn main() {
tow_param(1, 2);
}
fn tow_param (x:i32, y:i32) {
println!("x is {}, y is {}", x, y);
}
Q10
1と2を引数x, yとして渡し、それを合計した数を返す関数を定義して、実行、受け取った値を出力してください
fn main() {
let xy = add_param(1, 2);
println!("xy is {}", xy)
}
fn add_param (x:i32, y:i32) -> i32 {
println!("x is {}, y is {}", x, y);
x + y
}
Q11
i32型のxフィールドを持つSampleを作り、
Sampleが持つメソッド、int(xに1を加算した値を返す)、add(引数を取り、xに引数と加算した値を返す)の2つ定義して呼び出してください
A11
- main関数の中でコンストラクタでxを初期化し、
- int関数xを引数にとり、1を足したi32型の値を返す
- add関数 xを引数にとりxフィールドにxを足した値を返す
- 呼び出し時の値はなんでもよい
struct Sample {
x: i32
}
impl Sample {
fn new (x: i32) -> Sample {
Sample{x: x}
}
fn int(&self) -> i32 {
self.x + 1
}
fn add(&self, x: i32) -> i32 {
self.x + x
}
}
fn main() {
let a = Sample::new(1);
let ans = a.int();
println!("ans is {}", ans);
let ans2 = a.add(30);
println!("ans2 is {}", ans2);
}
Q12
xを引数にとって、mainブロック内に定義されたi32型のnumと加算するクロージャー(関数内で定義された関数)を実行して出力してください
A12
fn main() {
let num = 1;
let add = |x|{num + x};
let ans = add(2);
println!("x is {}", ans);
}
Q13
こちらはコンパイルエラーになります
fn main() {
let x = String::from("a");
let y = x;
println!("x is {}, y is {}", x, y);
}
xの値をyに束縛、その後xを表示しようとしています。
何故だか教えてください。また正しく書いてください
A13
xの所有権はyに移っているためxは参照するものがありません。
もしxの参照先を渡したい場合
&xとします
fn main() {
let x = String::from("a");
let y = &x;
println!("x is {}, y is {}", x, y);
}
こちら
fn main() {
let x = String::from("a”); // ここは_xとする必要がありますが問題の伝え易さのためそうしています
let x = String::from("b");
println!("x is {}", x);
}
のように同じ変数名で定義し直すことをなんと言いますか。
A14
シャドーイング
後から値を変更できる
最初のlet xの定義を覆い隠すシャドーイングすることができる
最初のxと次のxは別物
束縛する方は数値でも文字列でも可能
Q15
こちらはコンパイルエラーになります
fn main() {
let x = String::from("a”);
println!("x is {}", x);
x = String::from("b");
println!("x is {}", x);
}
何故ですか、またxが再束縛なように修正してください
A15
Rustではletで宣言された変数は再束縛できません。(変数なのに)
後から再束縛する必要がある場合、宣言時mutをつける必要があります
fn main() {
let mut x = String::from("a");
println!("x is {}", x);
x = String::from("b");
println!("x is {}", x);
}
「武骨日記の」プライバシーポリシーに関して
・プライバシーポリシー
・個人情報取り扱いに関して
・サイトTOP
・私は何者か
・29歳よしもと芸人がWebデザイナー未経験で学校に通い5年後フリーランスのフロントエンドエンジニアになるためにやった9つのこと
・フロント記事
・フロントエンドエンジニア
・フロントエンド記事(タグ)
・TypeScript
・TypeScript練習問題集
・【TypeScript】TypeSript中級者になる為に知っておくと良い108個のこと
・JavaScript練習問題
・styled-componentsの使い方
・SCSS問題集
・GraphQL「Apollo x Relay-Style-Cursor-Pagination(リレースタイルカーソルページネーション)」
・recomposeと仲良くなりたい
・機動戦士FlowType
・初めてReactNativeWebを触ってみて
・Ramda.jsシグネチャの読み方
・環境変数の話
・いちごタルトの作り方
・フロントエンドエンジニア豚汁の作り方
「武骨日記の」プライバシーポリシーに関して
プライバシーポリシー
株式会社TerraceTechについて
最近起業しました。
・株式会社TerraceTech
SNS
・しずかなインターネット kenjimorita
・インド旅 instagram
・適当な日常写真 instagram
・シュールさーん instagram
・シュールさーん LINEスタンプ
・もりたけんじTwitter
・ネタ帳Twitter
・note
※わたしが結成しているWebチームではWeb未経験者、フリーランスの方へのお仕事を紹介しています。
また個人レッスンしてほしい生徒も募集中です。
もしご興味ある方はチャットからご連絡ください。
※業務連絡やお久しぶり連絡もチャットからお願いします。