たなしょのメモ

日々勉強していることをつらつらと

Rust勉強してみた 3日目

学んだ細かいこと

タプルをで引数を渡す場合は(タプル名: (型, 型))みたくするといい感じ。

fn area(dimensions: (u32, u32)) -> u32 {
    dimensions.0 * dimensions.1
}

渡すときはタプルを使って渡してあげればよい。

let a = (30, 50);

let b = area(a);

構造体の使い方

昨日も少し学習した構造体をさらに勉強した。

struct Rectangle {
    width: u32,
    height: u32,
}

このような構造体があったら、下記のように宣言して使う。

let rect1 = Rectangle { width: 30, height: 50 };

構造体の中身を扱う関数は「所有権を借用するため」に 引数が参照型になる。

fn area(rectangle: &Rectangle) -> u32 {
    rectangle.width * rectangle.height
}

関数に代入する際も&を付ける。

let a = area(&rect1);

構造体の中身を直にみたいならDebugトレイトを使用し、{:?}すると見れるようになる。

#[derive(Debug)]

fn main() {
    let rect1 = Rectangle { width: 30, height: 50 };

    println!("rect1 is {:?}", rect1);
}

メソッド

メソッドの書き方はimplをつけることでメソッドとして機能するようになるらしい。

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

selfは自分自身の構造体の値を表している。 要は下記の構造体をしようしている。

struct Rectangle {
    width: u32,
    height: u32,
}

enum

enumはCやGoの同じような感じで宣言できるみたい。 ただし各値に代入したい場合は::を付ける必要がある。

enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter,
}

fn value_in_cents(coin: Coin) -> u32 {
    match coin {
        Coin::Penny => 1,
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter => 25,
    }
}

ろぐ

https://github.com/jacoloves/lab/commit/245e23bf1c529734e6ef24e7253238de096fb54e