Rustの本

蟹が表紙のオライリーのRust本が届いた。

Programming Rust, 2nd Edition [Book]

この蟹らしい。

Xantho hydrophilus - Wikipedia

第1版は邦訳が出ているが原著2版が出ているのにそれを選ぶのもどうかと思ったのと、 国内で出ているものはリファレンスとして見るにはやや物足りなかったのでこれを選んだ。 Japanじゃないオライリーの本を買うのは何だかんだ初めて。

で、順序がおかしいがThe Bookの12章と13章を読んだ。やはりちゃんと初めから最後までコードを再現しつつ読むと学びがある。

Chap. 12: An I/O Project: Building a Command Line Program

Chap. 13: Functional Language Features: Iterators and Closures

  • collectはだいたい型注釈が要る(印象としては知っていたがはっきり書かれていた)

    We can use the collect function to create many kinds of collections, so we explicitly annotate the type of args to specify that we want a vector of strings. Although we very rarely need to annotate types in Rust, collect is one function you do often need to annotate because Rust isn’t able to infer the kind of collection you want.

  • イテレータは「消費」されなくてはならないので、作ったまま未使用だと警告を受ける。
  • クロージャが関数と異なり引数に型注釈が要らない理由の一つは、APIとして提供されることがないこと。
  • クロージャはパフォーマンス上、素のループに劣らないためどんどん使おう。

タイムリーに読んだ文章。

例えばコレクションを map しているのをみると、私は「なるほど、ここではコレクションの要素数は変わらないんですね」と思う。filter だったら「コレクションの要素数は変わるけど、個々の要素は変わらないのか」ということを、あるいは Result を map していたら「ここではエラーのほうは触らないのね」ということを読みとっている。

こういう意図が、素朴な for ループと、if err != nil だと読みきれなくて、いや真面目に字面を追っていけばわかるんだけど、私が「map するか」と思いながら for ループを書いて、その for ループを誰かが読んで「これは map だね」と理解していることを考えると、それソースコードに map って書けたほうがいいんじゃない、と思ってしまう。

Go を2年くらい書いた感想: 意図をエンコードしきれない感じは消えず - blog.8-p.info

そうなんだよなぁ。

JSのmapのパフォーマンス問題を調べるとMapとObjectの比較が出る。

dictionary - Map vs Object in JavaScript - Stack Overflow

Performance of JavaScript .forEach, .map and .reduce vs for and for..of

PHPの配列用関数はチェインで繋げないので若干もさったいが、パフォ―マンス上のインパクトが小さめなら積極的に使いたい理由がこれである。

PHP: array_filter - Manual

array_mapにありがとう、さよなら - Qiita

React Hook Form

久々にNext.jsのチュートリアルを見た。1年近く前に見たときから大きくは変わっていない。

目的はReact Hook Formを試すことで、Reactの機能を試せる環境を作るついでの見直し。

Get Started | React Hook Form - Simple React forms validation

create-next-appで作れるサンプルも一応あるが、TS対応していない。全部TSでいいくらいな気もするけどそうなっていないんだよな。

next.js/examples/with-react-hook-form at canary · vercel/next.js

React Hook Formはuncontrolled componentにuseFormから作られる部品をはめていくスタイル。 コード量を抑えられるしバリデーションもできるし入力のリアルタイム監視もできる。

Tutorial: Intro to React – React

多少手数は増えるがontrolled compoenentsも使える。

Get Started | React Hook Form - Simple React forms validation

これが分かりやすい。

React Hook Formとは?煩雑なフォームのstate管理を楽に実装する! - stmn tech blog

これまでにReact Hook Formの基本的な機能を紹介しましたが、 実際は一つのコンポーネント内にフォームをベタに書くことはほとんど無く、 テキストフォーム、テキストエリア、チェックボックスなどの汎用コンポーネントをimportして、フォームコンポーネントを構築することがほとんどであると思います。

そのような場合に、FormProvider、useFormContextを使用して、registerをpropsとして汎用コンポーネントに渡すことで、フォームを構築することが可能です。

ドキュメントが非常によく整理されていてデファクトスタンダード化するぞという気迫を感じる。 APIリファレンスのインデックスがuseXXXでまとまっているのが面白い。

API Documentation | React Hook Form - Simple React forms validation

単純に面白そうなのでフォーム作成の例題なんかで試してみたいところだ。

Reactチュートリアル

Reactのチュートリアルがクラスコンポーネント+Hooksなしで最新の標準に追いついていない、というのは有名な話(?)だが、新ドキュメントのベータ版が公開されていた。

Tutorial: Intro to React – React

三目並べなくなっちゃった。

公式にNext.jsを推薦している。

If you’re looking to start a bigger, production-ready project, Next.js is a great place to start.

Start a New React Project