Rust the book - 第13章

Posted by johtani on Thursday, June 4, 2020

目次

前回の記事はこちら。自分用のメモなので、読みにくいかもです。

11章、12章はちょっと飛ばして、13章です。

第13章

イテレータ、クロージャです。 12章の話もちょっと出てくるのか。

クロージャ

基本的に、「変数には値が束縛されている」という固定観念がずっと頭にこびりついたままなので、クロージャに慣れないんだろうなぁ。そろそろこの固定概念をどうにかしないと。

  • 匿名関数で、変数に保存したり引数に渡せる
  • ちょっと面白い話(ワークアウト)で実際に考えられる手法の説明がいくつか行われる
  1. 関数でリファクタリング
    • これが自分がよくやるパターンかなぁ。クロージャになれてないので。。。
  2. クロージャーを変数に束縛
    • 呼び出しは関数みたいな感じ(ここで少し混乱)
    • これだと、結局呼び出されたタイミングが複数回あるよね? -> あはりそうだった

ここで、閑話休題で、クロージャの型推論とか注釈の話。 クロージャは狭い文脈だし、外に公開しているものでもないので、戻り値なども定義してなくてもいいよねとのこと。書くことも可能?なので、書いてわかりやすくするのもありなんだろうな。

推論についてはこれまで通りで、2回異なる型の変数で呼び出すと、2回目で怒られていた。

  1. 遅延評価(クロージャを保持する構造体!?)
    • Fnトレイト
    • トレイトとMatchの組み合わせだからこのへんで説明する形になるのか。
    • これを真似すれば、いくつか処理を簡素化できるかもしれないなぁ、たしかに。
    • なければ実行するみたいな処理を書きたいことがよくあるし。Javaだとnullで定義しといて、nullだったらみたいなのがあるから。
  • Cacherはサンプルだからこの名前でいいけど、自分だと、どんな名前にするかなぁ?

  • 振る舞いは難しくなるのか。Cacher実装の限界を読むと。

  • 関数にするとスコープが変わるのでアクセスできなくなると。。。コンパイラが教えてくれるのは便利だな。

  • 環境から値をキャプチャする3つの方法

    • 多分この話が一番クロージャに意味がある話なんだと思う。

イテレータ

回しましょう。

  • 便利。ただ、こういう書き方に自分が慣れてないので、そっちを補正しないとなぁ。
  • どれがイテレータ?っていうのを判別するのがちょっとむずかしい(慣れの問題かなぁ)
  • イテレータアダプタ便利。どんなのがあるのか?とかがやっとわかってきた。
  • パフォーマンスに関しては、うーん、どうなんだろう?という感想だった。

comments powered by Disqus

See Also by Hugo


Related by prelims-cli