プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

『オブジェクト指向プログラマが次に読む本 -Scalaで学ぶ関数脳入門』を読んで

ブクログからの感想移行記事です。

※ 感想移行の経緯はこちらの記事をご覧ください。

基本データ

  • 対象

  • 感想を書いた時期: 2012/10/15
  • 当時の評価: ★★★☆☆

感想

関数型言語の勉強をしてみたいと思い、言語にScalaを選んでみたので、この本を読んでみました。 書籍としては読みやすく解説も丁寧なので入門書として良いと思います。 ただ、私が関数型言語の理解不足なのか、どのあたりが関数型言語特有の話なのか、今一つつかみにくかったのもあります。私の捉え方では、クロージャやパターンマッチといった機能も関数型言語で多用されても、それは関数型言語の本質ではないように思えました(その意味では、さらなる勉強が必要なのでしょう)。 この部分がもうちょっと欲しかったと感じたので、評価は辛めにさせていただきました。

『リーン・スタートアップ』を読んで

ずいぶんとブクログを使っていなくて、自分がいくつか感想を書いていたことも忘れてましたが、先日ふとしたきっかけで存在を思い出しました。

さて、今後も使うかな?と考えたところ、何か書きたくなったらこのブログに書くだろうからたぶん使わないだろうな、という結論に至りました。

ブクログさんいままで、ありがとうございました。

そこで、まあ、過去の至らぬものになりますが、せっかくなので以前ブクログに書いていたものをこちらに移行しておきました。

ということで、内容的には昔々のものになりますので、ご容赦ください。

基本データ

  • 対象

  • 感想を書いた時期: 2012/7/30
  • 当時の評価: ★★★★☆

感想

新しいサービスや製品開発を始める前に読んでおくのがおすすめ。個人的に新しいことをするときは小さく始めてフィードバックを得て・・・と漠然と思っていたのですが、こういった考え方を、もっと科学的に検証できると教えてくれた本です。全部をきちんと理解できているわけではないですが、こういった考え方があることを知っておくと、行き詰まったときの一助になると思います。

Dart の const construtor について

Flutter を使いたいと思い、 Dart 始めました。

リファレンス読んだり、本読んだりして、ある程度概要はつかめたのですが、いまひとつよくわからないのが、 const constructor (定数コンストラクタ)です。

疑問点

公式の説明にあるように、コンパイル時に定数にすることができる、ということなんですが、

class A {
  final number;
  const A(this.number);
}
void main() {
  const a = A(10);  // 定数オブジェクト
  var b = A(20);      // 定数オブジェクトではない

  print(identical(a,b));
}

とすると、

false

となるところまでは理解できるのですが、クラスAのフィールドは final なので、変数 b の中身はどうせ変更できないし、『定数オブジェクトではない』といっても、どういう意味があるんだろうか?もっといえば、 const constructor に対しては常に定数オブジェクトが生成される、というのでいいんじゃないか?と思っていました。

解決

いろいろと調べているうちに、 const constructor の引数として変数を渡すときがあることに気が付きました。 つまり、

  var v = 20;
  // var b = const A(v);  // コンパイルエラー

となるということです。この場合は、

  var b = A(v);

とする必要があります。

なるほど!そういうことなんですね。

普通の constructor と const constructor の両方を定義できないので、 const constructor が定数オブジェクトを生成しない形で使うことも許されている、ということなんですね。

あー、すっきりした。

参考

上記についての直接の言及はないですが、こちらの記事を読んでいるうちに気が付きました。

dart - How does the const constructor actually work? - Stack Overflow