nullのRustでの代替え手段(@Rust)

Rustには例外処理もnullもありませんが、これはRustの思想そのもの。例外処理やnullが無い代わりに、その機能をサポートする手段として、enumとしてのResultOptionがあるということになります。

https://doc.rust-lang.org/std/option/

を参照すると、”Type Option represents an optional value: every Option is either Some and contains a value, or None, and does not.“であり、Rustでは標準的に使われる機能になります。

とありますが、Optionは実は、以下のようなenumになっていて要素としてはNoneとSome(T)が存在してます。

pub enum Option {
    None,
    Some(T),
}

通例では、Optionはパターンマッチングと一緒に使われて、rust-lang.orgの以下のサンプルコードを見ると、match resultでマッチング処理を行なっています。

fn main(){
   fn divide(numerator: f64, denominator: f64) -> Option {
        if denominator == 0.0 {
            None
        } else {
            Some(numerator / denominator)
        }
    }

    // The return value of the function is an option
    let result = divide(10.5, 1.5);

    // Pattern match to retrieve the value
    match result {
        // The division was valid
        Some(x) => println!("Result: {x}"),
        // The division was invalid
        None => println!("Cannot divide by 0"),
    }
}

Optionに限らずResultも類似のやり方で処理されます。

いずれにしてもRust固有の記法というように見えます。

 

admin

パーツ(その1)– ホーバークラフト

micro:bitで制御するホーバークラフト用のパーツとして、まずドローン用のモーターとプロペラを購入。

https://www.amazon.co.jp/gp/product/B078GM6PRN/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1

ブラシモーターですが、まあ寿命とか気にするわけではないので。

cwとccwの識別は配線の色、もしくはキャップ部分の色で識別可能です。

PWM制御用のレギュレーターは中国本国から出荷のようで来週になるでしょう。

https://www.amazon.co.jp/gp/product/B07P2TL2SF/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1

見たところ、パワー系の部品が見当たらないので、これでPWM制御で使えるのかと思いますが、事例を見る限りは問題なさそうです。

 

admin

 

ホーバークラフトの進行制御

Maker Faireで見た人が乗れるホーバークラフトですが、

ドローンに比較すると相対的には少ないエネルギーで浮上できるし、落下の危険性もないから安全だと思うのでmicro:bit使って制御する模型を作ろうかと思っていますが、進行制御はどうするのか?

シンプルに考えれば、ファンを4個持つドローンのような制御方法を考えれば、反転方向の回転速度を落とせば時計方向、半時計方向のターンができるし、片側2個の回転速度を上げれば反対方向に進むように思うけれどもこれでうまくいくのか。

まあ、やってみるしかないからドローン用のモーターを買ってみようと思う。

電池はLi-ionでなくともNiMH使っても重量増加は、これも問題ないように思う。

 

admin