Skip to content

Instantly share code, notes, and snippets.

@nurse
Last active February 23, 2017 06:00
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save nurse/3015253 to your computer and use it in GitHub Desktop.
Save nurse/3015253 to your computer and use it in GitHub Desktop.
プログラミングを悟るための公案集

プログラミング公案集

「公案」とは禅で用いられ、なんたら かんたら。 この公案を考えることでオブジェクト指向プログラミングの悟りをなんたらかんたら。

変数

  • Q: 変数とは何か?
  • A: 箱である
  • B: ラベルである
  • C: ラベルを入れた箱である

代入

  • i = 1 の i を答えよ
  • i = i + 1 の i を答えよ

nil

  • Q: nil とは何か。
  • A: 何もない
  • B: 「何もない」がある
  • C: なにものでもない
  • D: error (maker or sentinel)

同一性と同値性

  • 1+23 は同じか?
  • 1==1true は同じか?
  • objobj.dup は同じか?
  • "abc""abc" は同じか?

演算

  • 1 + 2 を答えよ
  • "a" + "b" を答えよ
  • 1 + "a" を答えよ
  • "a" + 1 を答えよ

ポインタ

  • Q: ポインタとは何か
  • A: メモリ上の位置である
  • B: アドレスを入れた変数である
  • C: 参照である
  • D: オブジェクトである

オブジェクト指向

オブジェクト

  • Q: オブジェクトとは何か?
  • A: データとそれに対する手続きをまとめたもの
  • B: 「もの」
  • C: 「あれ以外の何か」

NULL

  • Q: NULL はオブジェクトか?
  • A: 否。
  • Q: nil はオブジェクトか?
  • A: 是。

オブジェクト指向

  • Q: オブジェクト指向とは何か?
  • カプセル化
  • 継承
  • ポリモーフィズム
  • foo.barと書けること

整数

  • 有理数というものは(概念的には)ObjectSpace内に常に存在している [ruby-dev:33832]
  • true, false, nil, Symbol, Fixnum は原初から存在している

カプセル化

  • カプセル化されていないものはオブジェクトか?

継承

  • 何も継承していないものはオブジェクトか?

  • 動物を継承しているのか?

  • Q: 「継承」は何を継承するのか?

  • A: そのものの分類

  • B: 仕様である

  • C: 実装である

多態性

  • Q: ポリモーフィズムとは何か?
  • A: レシーバによって、同じ名のメソッドの挙動が変わること
  • B: 異なる種類のオブジェクトなのに、同じメッセージを送ることができ、同じように振る舞うこと
  • C: 異なるオブジェクトを同じように扱えること

  • Q: 型とは何か?
  • A: 変数の型のこと
  • B: オブジェクトのクラスのこと
  • C: インターフェイスのこと
  • D: あるオブジェクトの持つ一連の振る舞い

クラス

  • Q: クラスとは何か?
  • A: オブジェクトの分類である
  • B: オブジェクトの型である
  • C: オブジェクトの鋳型である
  • D: イデア
  • E: Factory

レシーバ

  • io.print objobj.display io のどちらが「よい」か
  • ary.join(sep)sep.join(ary) のどちらが「よい」か
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment