And now, a friendly message from your local Tell, don’t ask Department. Example 1 Not so good: <% if current_user.admin? %> <%= current_user.admin_welcome_message %> <% else %> <%= current_user.user_welcome_message %> <% end %>
![Tell, Don't Ask](https://cdn-ak-scissors.b.st-hatena.com/image/square/beac31a4be8e4962e2fefc94fd70b667eb3e9cec/height=288;version=1;width=512/https%3A%2F%2Fimages.thoughtbot.com%2Fblog-images%2Fsocial-share-default.png)
1. 分からない。いくら説明を読んでも分からない。 ● 1.1. 未だに分からない Java 的オブジェクト指向 今日び Java 的オブジェクト指向の説明なんて星の数ほどあるような気がしますが、それでもなお「これで分かった!」という説明に辿りつけない不運な人がいるようですね。まぁこんだけ色々な説明が溢れていたら逆にどれを読めば良いのかワケ分からなくなってしまうのかもしれません。じっくり読んでも理解できなかったのであれば、きっとその説明と読者の相性が悪かったんでしょう。… というわけで、僕も Java 的オブジェクト指向が全っっっっ然これっぽっちも分からないという人に向けて説明する記事を書こうと思います。そうでない人には無価値な記事ですのでブラウザの「戻る」をクリックしましょう。 ● 1.2. 「オブジェクト指向」という名の南の島がある オブジェクト指向にはいくつもの専門用語があって、学習
1日空いてしまいましたが、引き続きふつーのオブジェクト指向言語 としてのScalaを説明していきます。 高階関数:ただのメソッド これはジョークではなく、本当にただのメソッドなのです。とりあえず、説明は後にして、代表的な高階関数である、mapのScala実装を見てみましょう*1。 def map[A, B](list: List[A], fun: A => B): List[B] = { val newList = new ArrayList[B] val it = list.iterator() while(it.hasNext()) { newList.add(fun.apply(it.next())) } newList } 利用例は以下のようになります。 val a = new ArrayList[String]{ add("A"); add("B") } println(map(
Rubyにはコード片を表すオブジェクトが複数ある。 Method , UnboundMethod , Proc である。 Continuation は少し違うけど、実行コンテキストを記憶しているオブジェクトという意味では近いものがあるか。『 Ruby Way 』にはこういういろいろがあることについて「驚くほどのことではありません」と書いてあるけれども私は驚いた。で、これらが微妙に違うのだ。困ったもんだ。いや、便利なのかもしれないが。 それで今回はこれらの概要を眺めてみたいと思う。 普通のメソッド defでメソッドを定義するのが一番普通だやな。 class C def greeting(arg) puts "C#greeting reveived #{arg}" end def iterator yield 'iterator 1st' yield 'iterator 2nd' yield
Subject: [ruby-dev:11450] Re: Ruby I18N From: Tanaka Akira <akr@ 7 o > Date: Thu, 9 Nov 2000 12:24:06 +0900 References: 11380 11382 11393 11396 11397 11398 11399 11401 11423 11426 11427 11428 In-reply-to: 11428 In article <E13tNkT-00030l-00 / ev.netlab.zetabits.co.jp>, matz / zetabits.com (Yukihiro Matsumoto) writes: > じゃあ、なんで文字オブジェクトでなく整数(コードポイント)に固 > 執するのかというと、やはり互換性とメリットが見えないからなん > ですね。というわけで、[
ポリモーフィズム ポリモーフィズム(Polymorphism)とは,複数を意味する接頭語「poly-」と形態を意味する「morph」との合成に,接尾語「-ism」が付いたものです。つまり「複数の形態であること」という意味です。和訳して「多態」と呼ばれることもあります。 別の言い方をすれば,多態とは複数の種類のものをあたかも同じものであるかのように扱うことができることを言います。 これだけだと,なんのことだか分からないかもしれないので,一つのたとえを使いましょう。 ここに3つの箱があります。箱にはそれぞれふたがあり,ふたが乗せてあるだけのもの,鍵が付いたもの,リボンで結んであるものに分かれます。箱自体が非常に高価なので,それぞれの箱には専任のオペレータが付いていて,箱に対してなにかしたいときには,オペレータに命令します(図1[拡大表示])。 3種類の箱はそれぞれ開け方が違っています。しかし「
Scalaのジェネリックスを少し学んでみました。(なんか違うんじゃね?とかあれば、ツッコミお願いしますm(_ _)m) Javaのジェネリックスでは、型パラメータは共変/反変ではない Javaでこんなコードを書いてコンパイラに怒られたことないですか。 public interface Animal { } public class Dog implements Animal{ } public class App { public static void main(String[] args) { ArrayList<Animal> animals = new ArrayList<Dog>(); } } ArrayList<Animal> animals = new ArrayList<Dog>(); とすると、型がミスマッチとなります。 つまり、ArrayListのサブ型として、Arra
いわゆるGenericsのメカニズムについては、ごく基本的な部分についてはJavaと同じように見える。型パラメータの境界(親の型としてXXXを持ってないといけないとか、子の型としてXXXを持ってないといけないとか)についても同じ。大きく違うのは、型パラメータの継承関係と、パラメータバウンドされた総称クラス(以下、面倒なので"総称クラス"と書く)自体の継承関係との関係、すなわち共変(Co-Variant)に関する部分。 といっても、共変自体にあまり詳しくないので、しばらく共変について勉強してみる。 共変 調べても定義らしい定義が出てこなくて困った。とりあえずは関連ありそうな記事として以下のようなものがあった。 Javaの理論と実践: Generics、了解! Javaの理論と実践: Genericsのワイルドカードを使いこなす、第1回 Javaの理論と実践: Genericsのワイルドカード
パラメータ境界 型パラメータには以下の3つの境界が設定できる。 上限境界(upper bound) 例 hoge[A <: T] A が T のサブタイプでなければならない 下限境界(lower bound) 例 hoge[A >: T] A は T のスーパータイプでなければならない 可視境界(view bound) 例 hoge[A <% T] A が T として扱える(暗黙の型変換により変換可能または A が T のサブタイプ) 通常の型パラメータ 普通の型パラメータからおさらい。以下の Holder を考える。 class Holder[A] { private var contents:A = _ def set(value:A) {contents = value} def get:A = contents } 以下のように型パラメータとしてIntを指定した場合、当然 Doub
某所のチャットで話題になって、流れ去りそうだったのでもったいないから転載しておいた。事後承諾で。 MIYAMOTO Daisuke: 型の継承と実装の継承を区別する方法がないんだよな。 西尾泰和(nishio.hirokazu): 型を継承させずに実装を継承させたい→それ移譲で ってことかな? MIYAMOTO Daisuke: そそ。そもそも、クラスに「型としての役割」と「実装としての役割」という複数の責務があることに、俺は長い間気づかなかった。これに気づかないと、型継承と実装継承が頭の中で整理できない。 西尾泰和(nishio.hirokazu): 僕が最近気づいたことも加えると、クラスには「ユーザ定義型」「インスタンスを作成する道具」「実装の再利用の単位」という3つの役割がある。 MIYAMOTO Daisuke: あぁ、インスタンスの生成器ね。 西尾泰和(nishio.hiroka
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く