<style>
/* basic design */
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6,
.reveal section, .reveal table, .reveal li, .reveal blockquote, .reveal th, .reveal td, .reveal p {
font-family: 'Meiryo UI', 'Source Sans Pro', Helvetica, sans-serif, 'Helvetica Neue', 'Helvetica', 'Arial', 'Hiragino Sans', 'ヒラギノ角ゴシック', YuGothic, 'Yu Gothic';
text-align: left;
line-height: 1.6;
letter-spacing: normal;
text-shadow: none;
word-wrap: break-word;
color: #444;
}
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {font-weight: bold;}
.reveal h1, .reveal h2, .reveal h3 {color: #2980b9;}
.reveal th {background: #DDD;}
.reveal section img {background:none; border:none; box-shadow:none; max-width: 95%; max-height: 95%;}
.reveal blockquote {width: 90%; padding: 0.5vw 3.0vw;}
.reveal table {margin: 1.0vw auto;}
.reveal code {line-height: 1.2;}
.reveal p, .reveal li {padding: 0vw; margin: 0vw;}
.reveal .box {margin: -0.5vw 1.5vw 2.0vw -1.5vw; padding: 0.5vw 1.5vw 0.5vw 1.5vw; background: #EEE; border-radius: 1.5vw;}
/* table design */
.reveal table {background: #f5f5f5;}
.reveal th {background: #444; color: #fff;}
.reveal td {position: relative; transition: all 300ms;}
.reveal tbody:hover td { color: transparent; text-shadow: 0 0 3px #aaa;}
.reveal tbody:hover tr:hover td {color: #444; text-shadow: 0 1px 0 #fff;}
/* blockquote design */
.reveal blockquote {
width: 90%;
padding: 0.5vw 0 0.5vw 6.0vw;
font-style: italic;
background: #f5f5f5;
}
.reveal blockquote:before{
position: absolute;
top: 0.1vw;
left: 1vw;
content: "\f10d";
font-family: FontAwesome;
color: #2980b9;
font-size: 3.0vw;
}
/* font size */
.reveal h1 {font-size: 5.0vw;}
.reveal h2 {font-size: 4.0vw;}
.reveal h3 {font-size: 2.8vw;}
.reveal h4 {font-size: 2.6vw;}
.reveal h5 {font-size: 2.4vw;}
.reveal h6 {font-size: 2.2vw;}
.reveal section, .reveal table, .reveal li, .reveal blockquote, .reveal th, .reveal td, .reveal p {font-size: 2.2vw;}
.reveal code {font-size: 1.6vw;}
/* new color */
.red {color: #EE6557;}
.blue {color: #16A6B6;}
/* split slide */
#right {left: -18.33%; text-align: left; float: left; width: 50%; z-index: -10;}
#left {left: 31.25%; text-align: left; float: left; width: 50%; z-index: -10;}
</style>
<style>
/* specific design */
.reveal h2 {
padding: 0 1.5vw;
margin: 0.0vw 0 2.0vw -2.0vw;
border-left: solid 1.2vw #2980b9;
border-bottom: solid 0.8vw #d7d7d7;
}
</style>
<!-- --------------------------------------------------------------------------------------- -->
# Rust勉強会 第1回
## 3章 普遍的なプログラミング概念
### 2020/7/31 岡本拓海
---
## 本日のメニュー
1. 変数と可変性
1. データ型
1. 関数の動作法
1. コメント
1. 制御フロー
プレゼン20分くらい+議論10分位で18:30前後終了を目指します。
---
## 変数と可変性
変数の宣言には```let```を使用します
リテラルを代入する場合には型推論により自動的に型が決定します
```rust
let a = 10;
```
---
## 変数と可変性
Rustの変数宣言はイミュータブル(=不変)です
```rust
fn main() {
let x = 5;
println!("The value of x is: {}", x);
x = 6; // この行はエラーになる
println!("The value of x is: {}", x);
}
```
---
## 変数と可変性
可変の変数には```mut```を付けます
```rust
fn main() {
let mut x = 5;
println!("The value of x is: {}", x);
x = 6;
println!("The value of x is: {}", x);
}
```
---
## 変数と可変性
***const***キーワードで定数を定義可能
***const***で宣言された変数にmutをつけて可変にすることはできません
```rust
const MAX_SPEED = 120 //km/s
```
---
## 変数と可変性
シャドーイング:変数名は同じまま新しい変数としてメモリ確保する
```rust
fn main() {
let x = 5;
let x = x + 1; // 5 + 1 = 6がxに代入
let x = x * 2; // 6 * 2 = 12がxに代入
println!("The value of x is: {}", x);
}
```
- mut -> 変数そのものが可変・再代入できる
- シャドーイング -> letの式の後は再代入不可
---
## データ型
Rustは**静的型付け**言語です。
型は変数名の後に:を付けて記述します。
```rust
let 変数名:型 = 代入する値
```
例えばこんな感じです
```rust
let some_var: u32 = "42".parse().expect("Not a number");
```
---
## データ型
プリミティブなデータ型はいくつか有ります
(プログラム書いてると覚えるので詳細は略)
| 型 | 記述 |
| -------- | -------- | -------- |
| 整数型符号有 | i8,i16,i32,i64,isize |
| 整数型 符号無 | u8,u16,u32,u64,usize |
| 不動点小数 | f32,**f64** |
| 論理値 | bool |
| 文字 | '' | |
| タプル | (i32, f64, u8) |
| 配列 | [1,2,3,4] |
配列は固定長です
「**文字列**無いな」と思った方、文字列は少々複雑なので8章でやります。
---
## データ型
数値リテラルは以下の記述ができます
| 数値リテラル | 例 |
| ------------ | --- |
| 10進数 | 98_222 |
| 16進数 | 0xff |
| 8進数 | 0o77|
| 2進数 | 0b1111_0000|
| バイト(u8だけ) | b'A'|
---
## 関数の動作法
一番基本的な関数定義
```rust=
fn plus_f(x: i32 , y: i32) -> i32 {
x + y // セミコロンが無い場合戻値扱い
}
```
---
## 関数の動作法
一番基本的な関数定義
```rust=
fn 関数名(変数: 型) -> 戻値の型 {
(略)
}
```
---
## コメント
- // がコメントです
- docコメントもあるけど、それは14章で。。。
---
## 制御フロー
if式 ~~カッコが無いのがカッコイイ!~~
```rust=
fn main() {
let number = 3;
if number < 5 {
println!("condition was true"); // 条件は真でした
} else {
println!("condition was false"); // 条件は偽でした
}
}
```
---
## 制御フロー
if**式**です
式なのでlet文中で使える
```rust=
fn main() {
let condition = true;
let number = if condition {
5// 戻値を代入できる
} else {
6
};
println!("The value of number is: {}", number);
}
```
---
## 制御フロー
↓はエラー出てしまいます。型は一致させる!
```rust=
fn main() {
let condition = true;
let number = if condition {
5// 戻値
} else {
"six"
};
println!("The value of number is: {}", number);
}
```
----
## 制御フロー
```else if```も可能ですが、6章のテーマであるmatch式を使ったほうがスマートです
```rust
if number % 4 == 0 {
// 数値は4で割り切れます
println!("number is divisible by 4");
} else if number % 3 == 0 {
// 数値は3で割り切れます
println!("number is divisible by 3");
} else if number % 2 == 0 {
// 数値は2で割り切れます
println!("number is divisible by 2");
} else ....(略)
```
---
## 制御フロー
ループは以下の3つ
| | |
| -------- | -------- |
| loop | 無限ループ |
| while | 条件でループ |
| for | イテレータ回す |
---
## 制御フロー
loop
```rust=
loop {
//無限ループ
}
```
---
## 制御フロー
while
```rust
fn main() {
let a = [10, 20, 30, 40, 50];
let mut index = 0;
while index < 5 {
println!("the value is: {}", a[index]);
index = index + 1;
}
}
```
---
## 制御フロー
for
```rust
fn main() {
let a = [10, 20, 30, 40, 50];
for element in a.iter() {
println!("the value is: {}", element);
}
}
```
---
## 課題
習うより慣れろ!
以下の課題やってみましょう。
- 温度を華氏と摂氏で変換する。
- フィボナッチ数列のn番目を生成する。
- クリスマスキャロルの定番、"The Twelve Days of Christmas"の歌詞を、 曲の反復性を利用して出力する。
参考までに僕が書いたプログラムを置いておきます
[ココからどうぞ](https://github.com/MrBearing/TheRustProgrammingLanguage/tree/master/projects/ch03/excercise)
---
## 参考資料
https://doc.rust-jp.rs/book/second-edition/ch03-00-common-programming-concepts.html
---
# ご清聴ありがとうございました
{"metaMigratedAt":"2023-06-15T11:13:19.743Z","metaMigratedFrom":"YAML","title":"第1回 3章普遍的なプログラミング概念","breaks":true,"description":"Rust勉強会第1回のスライド","slideOptions":"{\"theme\":\"white\",\"slideNumber\":\"c/t\",\"center\":false,\"transition\":\"none\",\"keyboard\":true}","contributors":"[{\"id\":\"610cfd52-ad2b-46e8-81e2-a79a85a7f06f\",\"add\":8385,\"del\":1622}]"}