タグ

型クラスに関するuehajのブックマーク (3)

  • Haskellの型クラスを活用する - モナドとわたしとコモナド

    Haskellの型クラスは、うまく使えば高いパフォーマンスと抽象度を両立できる、優れた仕組みである。その使い方のコツは、決して理解の難しいものではない。 小さな性質、大きな恩恵 プログラマは大きなものを小さく見せがちだ。オブジェクト指向プログラミングに慣れている人がやりがちなアンチパターンとして、欲しい機能と、それを分割する基準が現実に寄りすぎていて、一つ一つが巨大というものがある。 普通のプログラミングではありえない例かもしれないが、たとえば家を作りたいことを考える。「ベッド」「箪笥」「台所」「冷蔵庫」「トイレ」「風呂」のように設備ごとに分けた抽象化をしたいと考えるだろう。確かにこれは理に適っているように見える。だが、これらの設備を型クラスでまとめるのは悪手だ。 風呂やトイレには水を利用できるという性質が、冷蔵庫には電気が必要だ。部屋と部屋は壁で仕切られ、場合によっては扉があるかもしれな

    Haskellの型クラスを活用する - モナドとわたしとコモナド
    uehaj
    uehaj 2015/06/23
    "型クラスは「複雑な処理をまとめる」というよりは「特定の性質を持つ処理を最適な形で具体化する」もの"
  • 実装から学ぶ型クラス…Groovyで型クラスを実現することを例にして - uehaj's blog

    これは2014年のG*アドベントカレンダーの第23日目の記事のつもりでしたが、12時すぎてしまいましたorz。 HaskellやScalaRustには型クラスという言語機能があり、個人的感想として、理解が難しかったものの一つです。いわく、インターフェースのようなもの。いわく、オープンクラスのようなもの、など。 わからなければ作ってみるのが一番です。なのでGroovyで型クラスを実装してみました。 ソースはこちら。 ただし実用的なものではなく、学習用です。また実装したのは概念のコア部分のみで、言語によって詳細は異なることに注意ください。 型クラスとは何か 型クラスとは、多相型・ジェネリクス型の型引数(仮型引数)に対して、「ある型に対して可能な操作の集合」を、制約として与え、またそれらの操作が可能であるという保証を、「クラスの継承関係」とは無縁の方法で与えるものです。 別の言い方で言うと、「

    実装から学ぶ型クラス…Groovyで型クラスを実現することを例にして - uehaj's blog
    uehaj
    uehaj 2014/12/24
    追記 "仮想関数による多態性イラネ。原語では同じ単語で多相性とかぶってる""操作のレシーバーという概念は非対称で嫌。レシーバーと他の引数、戻り値の型に非対称性があり、数学的概念の記述などでの一般性を阻害す
  • 単一責務原則(SRP)から始まるFPとOOP

    uehaj @uehaj 単一責務の原則を疑いたい。ListにeachがあるのはSRP違反だ。で、なにがわるいのだ。クラスこなごなにして可読性理解性を悪化させる例も多い。 2014-05-16 22:37:17 uehaj @uehaj "クラスに変更が起こる理由は、一つであるべき"の意味がわからん。未来に発生するであろう仕様変更の理由を、予測し、一個になるようにしろってこと?? いや機能拡張については無数だろ。変更理由が一つにだったように事後的にクラス分割せよ? 2014-05-16 22:48:13 uehaj @uehaj 変更があったとき、"変更理由が一つにだったように事後的にクラス分割せよ?"そうならその方針はむしろ酷く激しいクラス分割を不断に引き起こすような。単一クラスの範囲内でのみ変更が起きないこと、というのを重視するが分割は変更とみなさないのかな 2014-05-16 22

    単一責務原則(SRP)から始まるFPとOOP
    uehaj
    uehaj 2014/05/19
    まとめていただきました。@gakuzzzz さんありがとう!
  • 1