オブジェクト指向は愚かな考え。この世は計算式 [転載禁止]©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2015/11/20(金) 12:32:59.15ID:eVIjgJkQ東京大学 大学院医学系研究科 代謝生理化学の栗原 裕基 教授、
杉原 圭 学部生(現東京大学附属病院 臨床研修医)らの
研究グループは、血管新生注において血管が伸長する際の血管内皮細胞注運動を制御するしくみを、生物学と数理モデル・
コンピュータシミュレーションを融合させた先端的な研究手法により明らかにしました。
生物は、最小の機能単位である細胞が寄り集まった多細胞体です。しかし、細胞の集まりが、組織や器官といった
秩序ある形態や構造をつくり機能するしくみはほとんど分かっていません。中でも血管は、体中の全組織に十分な
酸素や栄養源を効率よく供給するため、組織や組織の間に入り込み、血管外の環境との相互作用により、巧妙な
枝分かれ構造をとっています。
これまでに本研究グループは、新しく血管がつくられる(血管新生)際の細胞の動きに着目し、特に血管内皮細胞の
動きをリアルタイムで可視化し、定量的に捉えることを可能にしてきました。
今回さらに、血管の伸長を制御するしくみについて、細胞が自発的に自らを制御して動く過程(自律的過程)と、
隣接した細胞から適宜影響を受けて動く過程(協調的過程)がうまく共存することで、全体の動きが巧みに統制
されていることを世界に先駆けて実証しました。
興味深いことに、血管内皮細胞が前後したり、お互いに追い抜きあったりという血管新生で見られる複雑な細胞集団の
動きを制御している中枢部分は、細胞一つ一つの動き(スピードと方向性)の「確率的な変化」として十分説明できる
ことをコンピュータシミュレーションで実証しました。
対して、血管の伸長に重要な先端細胞注の動きは、一つ一つの細胞の確率的な動きのみでは十分説明できず、
後続の茎細胞注との相互作用により、より厳密に制御されていることも新しく分かってきました。
http://www.jst.go.jp/pr/announce/20151120-2/#YOUGO3
オブジェクト指向は愚かな考え。排便メソッドを実装した人間クラスから美少女クラスが作れない。
https://twitter.com/ProgrammingMono/status/665702678006140928
0002デフォルトの名無しさん
2015/11/20(金) 12:36:06.03ID:eOOBU9L/インスタンス変数やプロパティの値で動きが変わるメソッドはプロジェクトが小さいうちはいいが肥大化すると昔ながらのグローバル変数となんら変わらんからな。
0003uy ◆Qawu9.2l1E
2015/11/20(金) 12:54:57.40ID:QlSu2hgW0004デフォルトの名無しさん
2015/11/20(金) 14:15:39.74ID:Wts0ZYH4> 関数は肥大化すると昔ながらのグローバル変数となんら変わらんからな
うむ。そのとおりだと思うが。オブジェクト指向と何か関係あるのか?
0005デフォルトの名無しさん
2015/11/20(金) 15:25:25.91ID:Ki8Q89YZ純粋関数は副作用がないのが売りだろ?
0006デフォルトの名無しさん
2015/11/20(金) 15:27:20.37ID:PQKonL9c関数型は2次元の建造物。
0007デフォルトの名無しさん
2015/11/20(金) 15:30:06.83ID:hg0nWx/i仮説の間違いでの手戻りも少なく、後世で解明された事実も簡単に実装できる。
オブジェクト指向は積み上げる一方なので根幹に誤りがあると総崩れになる。
Smalltalkの本来のオブジェクト指向であれば掘り下げる方向への改良もできる。
残念なことにC++やJavaなどの誤ったオブジェクト指向が広まってしまった。
0008デフォルトの名無しさん
2015/11/20(金) 15:52:58.95ID:Wts0ZYH4純粋じゃない関数は?
0009デフォルトの名無しさん
2015/11/20(金) 16:17:36.93ID:AihHZrPe不良関数
0010デフォルトの名無しさん
2015/11/20(金) 16:18:05.96ID:4XBGvvmH不順関数
0011デフォルトの名無しさん
2015/11/20(金) 16:18:35.43ID:XsuuLzWL不純関数
0012デフォルトの名無しさん
2015/11/20(金) 16:19:43.53ID:XcKIoIaZ不純異性交遊
0013デフォルトの名無しさん
2015/11/20(金) 16:21:03.58ID:OhmGz24D淫行関数
0014デフォルトの名無しさん
2015/11/20(金) 16:40:53.16ID:jk/0Ka+T0015デフォルトの名無しさん
2015/11/20(金) 17:31:29.95ID:kZGuPtHC0016uy ◆Qawu9.2l1E
2015/11/20(金) 20:35:47.09ID:QlSu2hgWスコープを最小限にしても
生成するインスタンスに画像や大きなファイルが含まれたりするだろ
で、そのオーバーヘッドはどう解決するか
まさか、まとめてグローバル変数に格納(笑)?
>>1
の設計はそこら辺で現実的な速度から離脱して理想しか見てないコードになっていく
0017デフォルトの名無しさん
2015/11/20(金) 20:48:09.98ID:+xrFJJW/「純粋なコードで構成するのが Haskell らしいプログラムであり、IOはHaskellらしくない」
という発言をよく耳にします。
確かに、命令プログラミングの世界から関数プログラミングの世界にやってきたとしたら、
不変データを使った永続データプログラミング
部品プログラミング
純粋なコードに対する性質テスト
などには、衝撃を受けることでしょう。
でも、純粋なコードは、Haskell の世界の半分でしかありません。
そこは、コンパイラーという保護者に守られた未成年の世界です。
Simon Peyton Jones さんの言葉を借りれば、象牙の塔の中とも言えるでしょう。
http://d.hatena.ne.jp/kazu-yamamoto/20131225/1387938629
0018デフォルトの名無しさん
2015/11/21(土) 09:22:15.33ID:qnrvdEs+時には宗教戦争の様相を呈することがあるものの、プログラミング言語がコーディングプロセスだけでなく完成した製品の
特性にも影響することは多くの方が同意するところだろう。
これについてカリフォルニア大学デイビス校のコンピューターサイエンス研究者らが、プログラミング言語のソフトウェア
品質に与える影響(PDF)に関する調査結果を発表した。
研究ではGitHubの729プロジェクト(17言語、29,000人が書いた8,000万行のソースコード、150万コミット)を分析。
大きなサンプルサイズを利して混合研究法のアプローチをとり、複数の回帰的モデリングやテキスト解析を組み合わせて
静的型付けと動的型付け、型付けの強弱といったプログラミング言語の特徴がソフトウェアの品質に与える影響を調べた。
異なる手法による調査結果を組み合わせ、チームの大きさやプロジェクトの大きさ、プロジェクトの歴史といった影響を
与える要素を調整することで、言語設計がソフトウェア品質に及ぼす影響は、大きくはないが有意なものであることが
明らかになったとのこと。
論文によれば、
最も明らかなのは、強い型付けは弱い型付けよりもそれなりに優れており、関数型言語では静的型付けが動的型付けよりも
やや優れている点だ。また、関数型言語は手続き型言語よりもやや優れていることもわかった。
言語設計による影響は、プロジェクトやチーム、コミットの大きさといった要素に大きく支配されている点も注目に値する。
ただし、関数型で静的かつ強い型付けを持つ言語を好む性格、といった識別困難な要素が影響している可能性が高い点にも注意が必要だ。
とのことだ。
https://twitter.com/ProgrammingMono/status/665427558683574272
0019デフォルトの名無しさん
2015/11/21(土) 09:59:45.46ID:lO8t8nHT0020デフォルトの名無しさん
2015/11/21(土) 10:34:20.65ID:tpVicDIN0021デフォルトの名無しさん
2015/11/21(土) 10:39:26.57ID:lIhuN8aWなぜクラスが単なるハッシュテーブルではダメなのか正直理解できない
private変数がとかインスタンスメソッドがどうとか言うのかね
ゲッターセッターつけてprivate変数にアクセスするのは
本当に情報遮蔽できてるの?むしろデータ構造にアクセスするのになぜ(関数)が必要なんだい
0022デフォルトの名無しさん
2015/11/21(土) 11:20:29.19ID:HbP98col大規模なものを作るとわかるよ。
タイプミスで、あれ?値が入っていない?値が取れない?
というケアレスミスで、どれだけ時間を無駄にしたか。
修正自体は簡単だけど、問題に気づくまでに
どこでミスしたんだ?って探しまわるのに時間がかかる。
0023デフォルトの名無しさん
2015/11/21(土) 11:22:51.08ID:HbP98col> 本当に情報遮蔽できてるの?むしろデータ構造にアクセスするのになぜ(関数)が必要なんだい
うん。だからC#のように、プロパティと呼ばれる、
変数と同じように使えるけど、後から関数に変更できて、
それでもまったく使い方が変わらない。という便利な機能がある。
0024デフォルトの名無しさん
2015/11/21(土) 11:44:04.40ID:PKr4CHye0025デフォルトの名無しさん
2015/11/21(土) 12:36:07.20ID:0ocHuz5N0026uy ◆Qawu9.2l1E
2015/11/21(土) 15:32:42.51ID:uVehkYL0逆に言えばゲッターセッターなくても
a = 1
で、変化あったときに、外からでもこのコードの処理をキャッチして
"a = 1 src:srccode.rb : line:num"
とかログ出力やっていけるなら無くて良い機能
つまり、ゲッターセッターとは
デバッグ用コードをソースコード中に混在させてるものだからいずれ廃れる文化でしょう
0027デフォルトの名無しさん
2015/11/21(土) 15:58:51.00ID:OdQC06wn>>26
Observerとかあるだろアホなのか
0028デフォルトの名無しさん
2015/11/21(土) 16:41:47.58ID:10IsCnzuおまえは本当にバカだなあw
0029uy ◆Qawu9.2l1E
2015/11/22(日) 02:08:16.67ID:+n9aAbt6アルゴリズムを記述している知恵遅れがいる事は把握している
「デザパタ」とかいうゴミがゴミを作ったような概念を
「本に書いてあったからw」という理由で間に受けるドアホがいる事もまた把握している
0030デフォルトの名無しさん
2015/11/22(日) 02:21:29.68ID:3kzs1pKz自由に書かれすぎたクソコードと直面してみろ。嫌って程解る
getter/setterが必要なのは、アクセス手段を制御可能にするためだ。
クラスなんてものを用意するのは、実装意図を明確にし、そぐわないものを機械的に弾けるようにすることで実装者の負担を減らすことができるからだ。
ソフトウエアの規模が大きくなってくると、この差が複雑さの制御可否を分けるようになる
0031uy ◆Qawu9.2l1E
2015/11/22(日) 02:22:50.09ID:+n9aAbt6↓ メンバ変数を宣言し、使用した時点で、他言語でいうゲッターセッターを定義して使っているのと同じ
↓ なのでrubyコード上で
x.getter_func( var )
↑ こういうのは書く必要がない
x = var
↑ これで良い
↑ これで既に
def x=(n)
@x = n
end
↑ セッターが呼ばれてしまう
↑ 意味分かるかな?
↑ プログラマがgetter、setter関数を宣言する事自体が、冗長and冗長
↑ そんなものの定義は必要ないんですよ
↑ こんなの言語側でカバーできる話 = 通常は隠ぺいされていて、必要に応じてトレースする時だけ展開すれば良いデバッグ機能 = getter & setter
0032uy ◆Qawu9.2l1E
2015/11/22(日) 02:26:33.97ID:+n9aAbt6理想では「環境側」
0033デフォルトの名無しさん
2015/11/22(日) 05:27:57.11ID:PUPqVJFy0034デフォルトの名無しさん
2015/11/22(日) 07:06:33.14ID:LiruJHlu0035デフォルトの名無しさん
2015/11/22(日) 08:40:11.86ID:DDbKY7qA> プログラマがgetter、setter関数を宣言する事自体が
お前、オブジェクト指向言語って言ったらJavaしか知らんの?
0036デフォルトの名無しさん
2015/11/22(日) 10:48:53.45ID:V6CRtxukアクセッサへの批判があったから
設計上の批判かと思ったら実装上の手間の話だったでござる の巻
0037uy ◆Qawu9.2l1E
2015/11/22(日) 11:38:38.78ID:hFpqZnLDソースコード上に自分でgetter,setter書いて使う奴はアホって事でFAな
0038デフォルトの名無しさん
2015/11/22(日) 11:57:49.17ID:+9yGsSZo0039デフォルトの名無しさん
2015/11/22(日) 11:58:35.95ID:TE9fVwTNそのようだね
0040uy ◆Qawu9.2l1E
2015/11/22(日) 12:33:21.65ID:hFpqZnLD値の参照と変更時に、何らかのログ集計が
どこかでされれば良い
追加処理を書けるよう機能を入れたとしてもそれを推奨すべきじゃないし
セッターやゲッターに処理書いて
double.x = 4 # => 8
とか本当にこれが便利だと思ってる?
= の記号の意味を書き換えるオーバーライドだ
そもそも = 使った時点で副作用作ってるのにさらにバグを混入しやすくしてる
またセッターには書かずゲッターに書いた場合
double.x = 4 # => 4
double.x # => 8
↑ wwwwwwwww
こんな事をアルゴリズムに普通に混ぜていくと
ソースコード中のすべての = 記号に疑心を以て立ち向かわないといけなくなるね
0041デフォルトの名無しさん
2015/11/22(日) 12:45:50.77ID:V6ng9nqz0042uy ◆Qawu9.2l1E
2015/11/22(日) 12:52:11.26ID:hFpqZnLDdouble.f(4);
カッコが省略できないからだろ
double.f 4
と
double.x = 4
は、
rubyの場合、「f」メソッド呼び出しのほうがタイプ数少ないよ(ここ重要)
だからわざわざ
def x=(n)
... ← ここに実装コードを書くような事をしない
@x = n
end
そこに入るのは、デバッグコードだけ
0043uy ◆Qawu9.2l1E
2015/11/22(日) 12:55:15.12ID:hFpqZnLD根底からして間違っているから
論破されそうになると
「じゃあこれもオブジェクト指向な!」
を続けてきた結果
0044デフォルトの名無しさん
2015/11/22(日) 13:30:01.65ID:+9yGsSZo0045デフォルトの名無しさん
2015/11/22(日) 13:44:45.76ID:QRD2Q6hy疑心というかオブジェクトが公開しているインタフェースについて
オブジェクトに責任を持たせるわけなんだから、オブジェクトが4を8として
扱いたいならば、オブジェクトが4を8に置き換えることは自然なことだと思うが。
0046uy ◆Qawu9.2l1E
2015/11/22(日) 13:47:24.76ID:hFpqZnLDどこからイコール記号のオーバーロードの話になったんですか?
たまに居るけどオーバーライドとオーバーロードを混ぜて考えるゴミクズは死んでくださいね
0047uy ◆Qawu9.2l1E
2015/11/22(日) 13:51:06.62ID:hFpqZnLDそれがメソッドだったら普通だけど
セッターの戻り値はどうするの? C#に規約とかあるの?
0048デフォルトの名無しさん
2015/11/22(日) 13:54:36.12ID:hFpqZnLDてかrubyで
double.x = 4 # => 8
これ書けなかったから無し
セッターに何書いても戻り値は4固定だった
0049デフォルトの名無しさん
2015/11/22(日) 13:57:27.60ID:/G9D5sfyデザパタ語が嫌いなら内部状態の変化でイベント駆動やりたいときどうすんだよ
このクソコテまともなシステムの設計したこと無いだろ
0050デフォルトの名無しさん
2015/11/22(日) 13:58:00.10ID:hPpTOXHBIDC Japanは、日本国内におけるクライアントPC市場出荷実績値について発表した。これによると、2015年第3四半期(7月〜9月)の
国内クライアントPC出荷台数は、ビジネス市場が、147万台、前年同期比 23.0%減、家庭市場は90万台、同比20.0%減、計237万台、
同比21.9%減となった。
Windows 10は、2015年7月にリリースされたが、今期の需要喚起に関しては限定的なものになり、2015年第3四半期の
国内クライアントPC市場は、前期(2015年4月〜6月)に引き続き、出荷台数が大きく落ち込んだ。
Windows XPのサービスサポート終了による特需や、消費税増税前の駆け込み需要があった2014年の第1四半期(1月〜3月)
以降、ビジネス市場、家庭市場供に、需要が戻る気配がない。家庭市場の出荷台数が100万台を下回るのは、過去の集計から
みると、1998年まで遡ることになる。
ベンダー上位5社の出荷台数は、Windows XPのサービスサポート終了による特需と消費税増税前の駆け込み需要の反動で
大きく落ち込んだ2014年第3四半期からさらに、2割減となる大きなマイナス幅になった。
その中では、NECレノボ グループは、前期より4.7ポイントシェアを伸ばし1位を維持した。 NECレノボグループは、
ビジネス市場で前年同期比比26.2%減、家庭市場では同比12.8%減となり、全体では21.1%減となった。
富士通は、利益重視の戦略から、ビジネス市場で同比26.9%減、家庭市場では同比7.0%減となり、全体では 22.6%減であった。
東芝は、ビジネス市場で同比28.0%減、家庭市場では同比15.8%減となり、全体では23.1%減となった。
HPは、ビジネス市場で同比8.1%増と他のベンダーがマイナス成長の中、プラス成長を達成し、家庭市場では
同比34.3%減となったが、全体では、他のベンダーと比べてマイナス幅が小さい0.4%減となった。
Dellは、ビジネス市場では、中堅中小企業の不調が響き、同比31.9%減、家庭市場では同比23.9%減となり、全体では30.3%減だった。
(後略)
http://enterprisezine.jp/article/detail/7465
0051デフォルトの名無しさん
2015/11/22(日) 14:09:49.06ID:QRD2Q6hyセッターは値を設定するものだから戻り値なしだよ。
値を取得するならゲッターを使ってくだせえ。
0052uy ◆Qawu9.2l1E
2015/11/22(日) 14:10:41.77ID:hFpqZnLDObserverって全く関係ないワードを2回もこのスレに書き込んでるけど
どういう関連性があると思ってるのか
http://peace.2ch.net/test/read.cgi/tech/1445516998/633-638
こいつに似てるよなお前の論調って
# -- Double class --
class Double
attr_accessor :x
def x= n
@x = n * 2
end
end
double = Double.new
p double.x = 4
p double.x
0053uy ◆Qawu9.2l1E
2015/11/22(日) 14:16:33.32ID:hFpqZnLD最近頻繁に使われてしまってるget set という仕組みの本質は
参照時 と 代入時に 何らかのフックをかける事を可能にした機能であり、
アルゴリズム・実装部分からは分離すべき概念
0054デフォルトの名無しさん
2015/11/22(日) 14:20:06.33ID:/G9D5sfyクソコテくんが知ってるのは実装だけ
getter/setterの必要性は設計に起因するし、典型例としてObserver挙げてんだよ
まあ後でぐぐっとけよ
0055uy ◆Qawu9.2l1E
2015/11/22(日) 14:25:41.40ID:hFpqZnLD0056デフォルトの名無しさん
2015/11/22(日) 14:31:48.22ID:QRD2Q6hyわからん。お前が言ってることはわからん。
0057uy ◆Qawu9.2l1E
2015/11/22(日) 14:32:06.80ID:hFpqZnLDデバッグ機能としても使えるけど、実装としても使える多態化とかいらないんだよ
分離が出来ていないよ
その分離の出来ていないアホ機能で、砂上の楼閣を立てたデザインパターンの一例としてObserverを挙げたカスがいるけど
そもそもこれって初心者がゲームプログラムを記述するとき以外に使いどころあったっけ?
初心者用に作られた三輪車みたいな概念をハイレベルな議論してるスレで3度も描きこまれても正直ちょっと反応に困ってるところ
0058デフォルトの名無しさん
2015/11/22(日) 14:45:48.38ID:DDbKY7qAgetter / setter 使っても何の意味もない!
読み取り専用にしたくても書込みできちゃう!
↑ だったらsetter書くなよw
何も考えずに、getter と setter を書くからいかんのだろ。
setterに値チェック機能を入れると、特定の値しか入れられない
フィールドができて便利だぞ。
0059デフォルトの名無しさん
2015/11/22(日) 14:47:25.76ID:DDbKY7qA大規模プログラムを作ると、誰がどこで
どういうミスをしてしまうかわからない。
だから不正な状態を作らないような仕組みを作れる。
0060デフォルトの名無しさん
2015/11/22(日) 14:52:02.26ID:+9yGsSZo0061デフォルトの名無しさん
2015/11/22(日) 15:00:43.56ID:QRD2Q6hyいやそれアクセサいらなくね?
オイルマッチは息を吹きかけると火を消せるから安全と
言ってるようなもの。そもそも使わないのが一番安全。
アクセサ厨はお部屋丸焼きおじさん。
0062デフォルトの名無しさん
2015/11/22(日) 15:10:07.98ID:DDbKY7qA> いやそれアクセサいらなくね?
むしろパブリック変数が要らないと思うよ?
だって関数経由で書き込み、取得すればいいからね。
君の理屈だと、こういうことになる。
0063デフォルトの名無しさん
2015/11/22(日) 15:16:23.71ID:QRD2Q6hyパブリック変数はいらないよ。そしてアクセサもいらないよ。
僕の理屈は正しく伝わっているようだ。僕のコミュニケーション能力も捨てたものじゃない。
0064デフォルトの名無しさん
2015/11/22(日) 15:23:24.36ID:DDbKY7qAclass Test {
int field;
public int Field {
get { return field; }
set { field = value; }
}
}
これが setter / getter。
これの素晴らしい所はパブリックフィールドと全く同じように扱えること。
Test t = new Test();
t.Field = 20;
最初はパブリックフィールドにしておいて、あとから変えることもできる。
さて、ここからわかることは、実は関数と変数(フィールド)っていうのは等価であるということ。
変数への読み書き時に、setter / getter を定義 できたり、PHPの__get、__setのようなフックを仕込めたり
Object.observe() のようなオブジェクトの変更を監視できる機能があるのが前提だが、
関数と変数は等価である。これを強く言いたい。
言い換えると、どちらか一つあれば十分なのである。
コンピュータから見ればね(笑)
俺らは人間なんで、関数と変数を分けて考えてる。関数は処理、変数は属性。
つまり、等価であるから、片方だけあれば十分とは考えずに、
オブジェクト指向としてオブジェクトには処理と属性があると認識してるので両方共必要なんだ。
0065デフォルトの名無しさん
2015/11/22(日) 15:24:28.60ID:DDbKY7qA俺のに皮肉を理解できなかったから、
お前のコミュニケーションはアウトだよw
0066デフォルトの名無しさん
2015/11/22(日) 15:25:48.01ID:QRD2Q6hy皮肉をわかったうえで皮肉で返したつもりだったのだけど・・・(ドヤ
0067デフォルトの名無しさん
2015/11/22(日) 15:28:38.17ID:QRD2Q6hygetter / setter の本質は堅牢性にあることの説明にはなっていないようだけど。
アクセサはCOMやそれを真似て作ったJavaBeansのレガシー技術の名残でしかないからねえ!!!そこんとこよろしくねえ!!!
0068デフォルトの名無しさん
2015/11/22(日) 15:33:40.27ID:QRD2Q6hyアクセサの時代ももう終わったのだよ!!
これからはWebアプリを中心にしたクロージャと非同期の時代。
アクセサなんていらない。
0069uy ◆Qawu9.2l1E
2015/11/22(日) 15:37:34.74ID:hFpqZnLDget setにありがたみを持つ事がまずズレてる
そこまで使用頻度は高くないはずだよ
普通はインスタンス生成時に全ての初期化が終わってる
0070デフォルトの名無しさん
2015/11/22(日) 15:39:13.90ID:QRD2Q6hy俺もそれに賛成だわ。初期化のタイミングが違うものが一つの
オブジェクトにあるなら、設計が間違ってる。
0071デフォルトの名無しさん
2015/11/22(日) 15:51:44.93ID:KDgQ57Yeそしてgetter / setterで逆にバグが増える。睡眠不足のためだ。
比べてみよ、この歴然とした差を。
class Test {
int field;
public int Field {
get { return field; }
set { field = value; }
}
}
class Test {
public int Field;
}
0072デフォルトの名無しさん
2015/11/22(日) 15:57:48.72ID:NW0PnoYA普通にpublic変数でいいと思うしな
オブジェクト指向つまり名詞指向、レコード指向の概念ならな
ClassInstance.memberVarでアクセスすればいいじゃん
情報遮蔽もポリモーフィズムもイベントドリブンも全て
(クロージャー、マルチメソッド、コールバック)といった関数で表現できますから
オブジェクト指向にあるのは、特定のデータ型にのみ有効な
再利用性の極めて少ない特定のオブジェクトに対する関数、すなわちメソッドだけだろう
重要なのはオブジェクト指向ならぬ、オブジェクト強要言語は
それが思考の規定にあるということだ、これではオブジェクト指向のメリットらしい
再利用性の実装のためにコードがより多く必要になる
つまりオブジェクト指向というのは営業トーク先行で、
いかにコード数を増やして、いかに単純なシステムも複雑怪奇なシステムだと
でっちあげることによって予算と工数を獲得する在りし日のビジネススタイルだというわけだ
0073デフォルトの名無しさん
2015/11/22(日) 16:01:08.04ID:NW0PnoYAところがオブジェクトの初期化というものを積極的に行うと
コンストラクタの引数の個数やその型(<-これなんか特有の言い方があった気がするけど忘れた)
が、そのそれぞれのオブジェクトによって異なってくるでしょう
そうなるとインターフェースの宣言とその実装時に困ったことになるから
インターフェース指向のプログラムだと
結局オブジェクトをコンストラクタで初期化しないという設計になってると思うよ
0074uy ◆Qawu9.2l1E
2015/11/22(日) 16:11:15.38ID:hFpqZnLD自分は書いた事ないんだけど
obj.field = "A"
これが
obj.field # => "B"
こうなって嬉しいケースを教えてほしい
上でdouble書いたけど、こんなクラスは実際書きませんし
0075デフォルトの名無しさん
2015/11/22(日) 16:11:45.11ID:DDbKY7qA> getter / setter の本質は堅牢性にあることの説明にはなっていないようだけど。
堅牢性の話をしたのは>>59。
その>>59に説明は書いてある。
59 自分:デフォルトの名無しさん[sage] 投稿日:2015/11/22(日) 14:47:25.76 ID:DDbKY7qA [3/6]
getter / setter の本質は堅牢性にある。
大規模プログラムを作ると、誰がどこで
どういうミスをしてしまうかわからない。
だから不正な状態を作らないような仕組みを作れる。
0076デフォルトの名無しさん
2015/11/22(日) 16:13:24.33ID:DDbKY7qA> 普通にpublic変数でいいと思うしな
それは、gotoだとなんでもできるから、
gotoがあれば、ループや例外入らないと言ってるのと同じだよ。
それの代替となるなんでもできるものがあるのは知っている。
なんでもできるのは、問題があるから、用途ごとに特殊なものがあると便利。
そうやって、アセンブラの時代から、高級言語へと進化してるんだぞ。
アセンブラはなんでもできることの究極系。
0077デフォルトの名無しさん
2015/11/22(日) 16:15:13.89ID:NW0PnoYAでもゲッターセッター通してアクセスできるんでしょ?
クロージャーとかだったらスコープでアクセス範囲が決まるから堅牢だとは思うけど
private変数に対して「public」メソッドでアクセスできることに
どれだけの堅牢性があるの?もちろんpublicセッターは実装しないという方法でいけば
副作用は抑えられるけど、
コンストラクタでのみ初期化できるというのは
結局のところインターフェースの宣言の柔軟性が損なわれることで
実際にpublicセッターを実装しないっていうのは特有の事情を除いて考えにくいんだけど
0078デフォルトの名無しさん
2015/11/22(日) 16:16:21.77ID:NW0PnoYAそれはセッターゲッターが必要な理由を何一つ語っていないよね
それはクラスがあればなんでもできるから
クラスがあればクロージャーはいらないと言ってるのと同じことだよ
0079デフォルトの名無しさん
2015/11/22(日) 16:18:10.68ID:DDbKY7qA> でもゲッターセッター通してアクセスできるんでしょ?
できなくすることもできるし、制限もかけられる。
面白い使い方の一つとしては、オブジェクトのインスタンスを生成する時に
自分のアクセス権を渡す。
権限があれば、プロパティから値を取得できるし、
権限がなければ、取得できない。
といったこともできるし、
あとからそうしたいと、仕様が変更になっても
利用側には一切修正する必要が無いようにもできる。
0080デフォルトの名無しさん
2015/11/22(日) 16:19:04.94ID:KDgQ57Ye単体テスト、機能テスト一通りすれば、運用で誤ったデータはセットされない。つまりその実行時チェックコードはもういらないわけだ。
チェックは完全な外用のフィールドだけでよい。
0081デフォルトの名無しさん
2015/11/22(日) 16:19:58.87ID:DDbKY7qA> それはセッターゲッターが必要な理由を何一つ語っていないよね
書いてるぞ? ○は問題がある=問題をなくした△が必要。
いや、俺は、問題があるとだけ主張して、代替案をださない
キチガイアンチじゃねぇからw
0082デフォルトの名無しさん
2015/11/22(日) 16:21:35.16ID:DDbKY7qA中で何も処理しないで値返しているだけで、
セッターとゲッターの両方がある場合だけを想定してるんだ。
なるほどねw
使い方がわかってなかったのね。
0083デフォルトの名無しさん
2015/11/22(日) 16:25:36.59ID:NW0PnoYAようやくセッターとゲッターが両方ある場合は
public type memberVar;
って宣言してもいいということに合意していただけましたか
0084デフォルトの名無しさん
2015/11/22(日) 16:29:20.60ID:DDbKY7qAいやだからね。
C#では、public type memberVar は、
これと全く一緒なんだって。
class Test {
int field;
public int memberVar {
get { return field; }
set { field = value; }
}
}
Test t = new Test();
t.memberVar = 20;
所詮、セッターゲッターの省略形にすぎない。
0085デフォルトの名無しさん
2015/11/22(日) 16:30:08.55ID:KDgQ57Ye他にもたとえば生年月日をsetすると年齢が自動計算するとしよう。しかし、
public int age; でいいではないか。このageに勝手にマイナスや誤った設定する馬鹿がいてもテストでそのバグは見つかる。
0086デフォルトの名無しさん
2015/11/22(日) 16:31:20.93ID:DDbKY7qAセッターゲッターは要らないって言ってるのがおかしい。
だってパブリックフィールドはセッターゲッターの
機能の代替にはならないんだから。
「関数があればセッターゲッターは要らない」って言い直せ!
0087デフォルトの名無しさん
2015/11/22(日) 16:32:55.60ID:DDbKY7qA> 何かを処理する必要があるならそのときに関数を容易すればいい。それは必要なのだから。
関数に書き換えるってことは、パブリックフィールドはセッターゲッターの
代替にならないと認めているようなもん。
パブリックフィールドはセッターゲッターの
機能の代替にはならないんだから、
「関数があればセッターゲッターは要らない」って言い直せ!
0088デフォルトの名無しさん
2015/11/22(日) 16:35:29.08ID:NW0PnoYAC#での(自動)プロパティ宣言は
public type memberVar{get;set;}であって
public type memberVarと同じではないんだよな
もちろん我々は関数教徒であるので、(アクセサ)メソッドの柔軟性というものはわかりますね
だが、多くの場合において必要でないメソッドまで宣言させられるということに対して
違和感を覚えないのでしょうか
0089デフォルトの名無しさん
2015/11/22(日) 16:37:25.82ID:KDgQ57Yeパブリックフィールド
メリット:高速、楽
デメリット:バグが入るかも
セッターゲッター
メリット:バグの排除、コード量が増えてお金をふんだくれる。
デメリット:遅い、手間、コードが増えて読むのが面倒。
処理内容は同じ。
0090デフォルトの名無しさん
2015/11/22(日) 16:37:38.80ID:DDbKY7qA> だが、多くの場合において必要でないメソッドまで宣言させられるということに対して
必要ないものがあるからって、
必要な事例が無くなったわけじゃないしw
それにセッターゲッターを使うことを強制されているわけじゃないだろ。
なぜ、パブリックフィールド "も" 使えると思ってるんだ?
必要なければ使わず、必要なときだけ使えばいいだろ。
お前に宣言を強制しているのは、お前の会社だろ。
0091デフォルトの名無しさん
2015/11/22(日) 16:40:07.61ID:DDbKY7qA> 処理内容は同じ。
違うぞ。だからパブリックフィールドでは出来ない問題があって
>>85みたいに
> 何かを処理する必要があるならそのときに関数を容易すればいい。それは必要なのだから。
パブリックフィールドでは出来ない! 関数を用意しなけりゃ!って
話になってるんだろ。
お前が言ってるのは、関数と同等のセッターゲッターの使い方のうち
パブリックフィールドでも実装可能な場合に限定して、同じだと言ってるに過ぎない。
セッターゲッターと比較するならば、それは関数だ。
「関数があればセッターゲッターは要らない」って言い直せ!
0092デフォルトの名無しさん
2015/11/22(日) 16:44:08.34ID:NW0PnoYA> 普通にpublic変数でいいと思うしな
それは、gotoだとなんでもできるから、
gotoがあれば、ループや例外入らないと言ってるのと同じだよ。
それの代替となるなんでもできるものがあるのは知っている。
なんでもできるのは、問題があるから、用途ごとに特殊なものがあると便利。
そうやって、アセンブラの時代から、高級言語へと進化してるんだぞ。
アクセサメソッドがあればなんでもできるのは知っている
なんでも出来るのは問題(冗長性、可読性の低下)があるから用途ごとに特殊なものがあると便利
そうやって高級言語へと進化してきた
なぜアクセサメソッドにこだわるのですか?
これはあなたが言ってるgotoと同じですが
ちなみに多重ネストしたメソッドからぬけ出すのにgotoを使うのをためらうのですかね
ならなぜC#はgoto文を廃止しなかったのでしょうか?
0093デフォルトの名無しさん
2015/11/22(日) 16:44:38.19ID:KDgQ57Ye原理主義者は関数の必要のないフィールドにも今後の仕様変更のためにもゲッターセッターで記述しろという主張でしょう?
0094デフォルトの名無しさん
2015/11/22(日) 16:46:28.22ID:DDbKY7qA> ならなぜC#はgoto文を廃止しなかったのでしょうか?
なんでもできるgotoを
なんでもできるわけじゃないgotoに変えたから
0095デフォルトの名無しさん
2015/11/22(日) 16:49:11.39ID:KDgQ57Ye0096デフォルトの名無しさん
2015/11/22(日) 16:49:54.97ID:nE/Af/g5> これと全く一緒なんだって。
ダウト
struct Point {int x, y;}
class Test {
public Point a;
public Point {get; set;}
}
Test t = new Test();
t.a.x = 1; // できる
t.b.x = 1; // できない
0097デフォルトの名無しさん
2015/11/22(日) 16:50:09.68ID:QRD2Q6hygotoがあればわりとなんでもできるが。
現に俺はgotoできれいな彼女と知り合った・・・マジで・・・嘘だけど。
0099uy ◆Qawu9.2l1E
2015/11/22(日) 17:32:35.84ID:hFpqZnLDUser.new( 権限の種類 )
↑これは
Admin.new
Anonymous.new
↑これでも書ける
0100デフォルトの名無しさん
2015/11/22(日) 17:44:30.31ID:+9yGsSZo0101デフォルトの名無しさん
2015/11/22(日) 18:32:45.35ID:REz3UHto君はバカすぎるからもう二度と書くな。
0102uy ◆Qawu9.2l1E
2015/11/22(日) 18:42:08.70ID:hFpqZnLDそれをコード上でどう書くかって話でしょ
変数名の名前ひとつでget setやらせてファイルアクセスしてるコードなんて見かけない
setterはひとつでよくても
getterはいろんな形にパースした出力結果が必要だと思うよ
だから言語機能のget setを使うのではなく
obj.input( URL )
obj.output1 # => HTML
obj.output2 # => header
obj.output3 # => 更新日
とか、実装をするのでは?
これを言語機能のget setのみでやったら
obj.input = "URL"
obj.input.to_html
obj.input.to_header
obj.input.to_update_day
こうなるよ?
0103uy ◆Qawu9.2l1E
2015/11/22(日) 18:45:31.51ID:hFpqZnLD>>79,99
# get / set
class User
def initialize user
@state = 1
case user
when :admin
self.extend Module.new{ attr_accessor :state }
when :anonymouse
self.extend Module.new{ attr_reader :state }
end
end
end
user = User.new :admin
# 予めクラスを二つ用意
module Login_user
def state
@state = 1
end
end
class Admin
attr_accessor :state
include Login_user
end
class Anonymouse
include Login_user
end
admin = Admin.new
0104デフォルトの名無しさん
2015/11/22(日) 20:37:59.01ID:ZejJ5h9P内部で変数名を変えたくなったり、
メンバ変数に直接アクセスすることとgetすることが等価でなくなったときに、
参照している全てのコードを書き変えないとダメだからって教わらなかった?
0105uy ◆Qawu9.2l1E
2015/11/22(日) 21:07:26.71ID:i67Ztnvy欲しい情報とgetterが等価ではない時
また>>102
のように複数のgetterが必要なケースは
言語側が用意しているget setの仕組みでカバー出来る事の範囲外
じゃあ言語側が用意してるget setはどこで使うか?
それは僕が最初に言ったように
アルゴリズムや実装で使うのではなく
「変数が参照された」「変数が変更された」
という動作時にフックをかけたい(デバッグ)時に、使うのでは? って事 ぁーもう、これ完全論破ですね
0106デフォルトの名無しさん
2015/11/22(日) 21:18:24.48ID:KDgQ57Ye0107デフォルトの名無しさん
2015/11/22(日) 21:40:48.18ID:YVzGxfBt0108デフォルトの名無しさん
2015/11/22(日) 23:44:21.34ID:qQCBPK1+セッターはイベントの発火とかによく使うけど、そういうことじゃないの?
0109デフォルトの名無しさん
2015/11/23(月) 00:27:08.27ID:otL1GttMgetter/setterの存在意義は前提条件を縛るためだ。
Design By Contractって知ってるか?
フィールドに入る値に複雑な制約や業務ルールがあったり、外部要因(非スレッドセーフだったり、外部に依存要素がある)場合、アクセス方法を縛らないと容易に破損する。
実装対象が簡素なうちは解らないかもしれないが、
業務で書いてるなら実装対象の複雑さに苦しんだことがあるはず。
ひとつふたつなら注意で何とかなるが、これが何十何百となれば、拡張が困難になる。
getter/setterがあって、やりとりする型が保証されてさえいれば、この複雑さと直面しなくて済むんだよ。
これがメリットじゃなくてなんだと。
0110デフォルトの名無しさん
2015/11/23(月) 00:31:36.58ID:HhkR6v5p0111デフォルトの名無しさん
2015/11/23(月) 00:54:25.15ID:vrm5F+mPprintfデバッグが恋しくなるんだよな
ただ、出来上がったものは確かに無駄を作りにくい言語仕様に助けられてる感覚
オブジェクト志向言語の中で、例えばC#でLINQとRx系ライブラリ使って部分的に関数型の良さを作り込むような運用が一番手軽に感じる
0112デフォルトの名無しさん
2015/11/23(月) 01:23:39.10ID:553ghpA5オブジェクト指向の目的は「部品化による問題の局所化」と「部品化による再利用性の向上」だぞ。
つまりオブジェクト指向は関数型部品を内包するのだ。
ソースは俺だ。じゃあさいなら。
0113uy ◆Qawu9.2l1E
2015/11/23(月) 01:41:54.31ID:tOBxxsaNアクセス制限かけるだけなら自分でset getメソッドを書く必要が無い言語を使ってるんだけど
その上で自分でget / setを定義する場合はそこに何らかの追加コードを書きたい時以外に無い
その場面をget set厨に聞きたい
0114デフォルトの名無しさん
2015/11/23(月) 01:45:47.62ID:cUxBXTI50115uy ◆Qawu9.2l1E
2015/11/23(月) 02:01:02.68ID:tOBxxsaN1 アクセサを作る事と、
2 get set内に追加コードを書くのは別の話
https://msdn.microsoft.com/ja-jp/library/x9fsa0sw.aspx
こういうコードはあり得ないと思ってる
アクセサ内に追加コードを書けるようにしておく必要性は、将来的になくなるよねって意見
0116デフォルトの名無しさん
2015/11/23(月) 02:07:52.82ID:Vp6QUK7G0117uy ◆Qawu9.2l1E
2015/11/23(月) 02:15:22.17ID:tOBxxsaNアクセサ内に追加コードを書かれている方ですか?
サンプルコードお願いして良いですか?
アクセサ内に追加コードを書くくらいなら
横着しないで初期化メソッドとアクセス用のメソッド作らないと後で詰むんじゃねーのアホかよという固定概念にハマってるのでこの辺よくわかりません
0118デフォルトの名無しさん
2015/11/23(月) 02:28:57.76ID:Ts2SAeJV0119デフォルトの名無しさん
2015/11/23(月) 02:38:57.65ID:Ts2SAeJV0120デフォルトの名無しさん
2015/11/23(月) 04:05:31.30ID:y7rZkBPC0121uy ◆Qawu9.2l1E
2015/11/23(月) 04:23:09.37ID:tOBxxsaNもう降参かよ
0122デフォルトの名無しさん
2015/11/23(月) 04:41:30.72ID:y7rZkBPC躁鬱病、はやくなおるといいな。
0123デフォルトの名無しさん
2015/11/23(月) 04:45:43.23ID:bOR9krpk名詞指向といいつつ、結局はメソッド頼みなところが違和感ありまくり
アクセサメソッドとかいう特殊な名前がついちゃう時点で汎用性に疑義ありなんだが
関数型がs式やjsonやxmlやクロージャで処理することをクラスで処理した結果
再利用するためにデータ構造を読みとかなきゃいけないというね
オブジェクト指向は少なくともwebの流儀に反する
そしてスケールアウトできない
0124デフォルトの名無しさん
2015/11/23(月) 06:02:54.43ID:otL1GttM> アクセサ内に追加コードを書けるようにしておく必要性は、将来的になくなるよねって意見
限定的な条件下では同意する。
静的型付けな純粋関数型言語とかなら、確かに不要だよ。
でも、現実にプログラミングで課題を解決する時、十分な条件が整わないことも多い。
ハードに近い部分や外部API、クソみたいなライブラリを叩かされざる得ないことなんてザラだ。
そんな時、スレッドセーフにしたりインピーダンスミスマッチを吸収する遊びは必要。
getter/setterで解決するのが不適切なことも多いけど、選択肢としては入るでしょ。
0125デフォルトの名無しさん
2015/11/23(月) 06:53:57.40ID:RfUMCgBD0126デフォルトの名無しさん
2015/11/23(月) 09:18:35.66ID:kd01VOk3プロジェクトが肥大化すると部品の動きを把握するのが絶望的。
プロパティ次第でメソッドの動きが変わるんだぜ?
それを全部把握しておかないと使えない。
C言語でグローバル変数を使ったものの方がメンテナンス性は上なくらい
0127デフォルトの名無しさん
2015/11/23(月) 09:20:13.66ID:HGLgGmqe0128デフォルトの名無しさん
2015/11/23(月) 09:29:28.42ID:HGLgGmqe0129デフォルトの名無しさん
2015/11/23(月) 09:30:52.49ID:PMgWFLTKゲッターって、この掲示板でいうところの、「★スマホ版★」「掲示板に戻る」「全部」「前100」「次100」「最新50」のことだろ?
んーないと困るにゃー
0130デフォルトの名無しさん
2015/11/23(月) 09:41:02.93ID:Cb6WNNAzオブジェクト指向でも貧血モデルとトランザクションスクリプトを
使ってデータを中心にしてロジックを組み上げるといい感じになる。
モデルに振る舞いまで持たせたらクソになる。
0131デフォルトの名無しさん
2015/11/23(月) 11:14:46.84ID:bOR9krpk結局ドメイン駆動は使い物にならんのか
ドメインの境界を見つける暇があったらJsonにシリアライズして越境させることを考えたほうがいいのか
0132デフォルトの名無しさん
2015/11/23(月) 17:09:36.82ID:QX2C8YaD紙取り出して設計()とかしたがる
0133デフォルトの名無しさん
2015/11/23(月) 17:15:36.86ID:OK+rBFmG0134デフォルトの名無しさん
2015/11/23(月) 17:40:56.90ID:otL1GttMユビキタス言語についてどう思う?
DDDの本質はこちらで、モデルに振る舞いってのは実装手段だと思うんだが
0135uy ◆Qawu9.2l1E
2015/11/23(月) 22:33:16.05ID:QX2C8YaD違う世代との感覚に差異が出てくるから、
そのせいで若い人間が何言ってんのかわかんなくなるんだよ
発想の根源はプログラミング以外の場所だよ
0136デフォルトの名無しさん
2015/11/23(月) 22:36:24.90ID:s0Z0TZyN0137uy ◆Qawu9.2l1E
2015/11/23(月) 22:39:10.29ID:QX2C8YaD0138デフォルトの名無しさん
2015/11/24(火) 18:14:51.63ID:gi4wRhoM皮肉って知ってる?
0139uy ◆Qawu9.2l1E
2015/11/25(水) 04:10:18.12ID:Qex1VIVsそれで理解しない人間と会話してもこちらが一方的に教えるだけにしかならない
0140デフォルトの名無しさん
2015/11/25(水) 10:34:36.61ID:s9hTLLjKこういう若さ故の過ちというものを誰もが経験して大人になるのさ。
0141デフォルトの名無しさん
2015/11/25(水) 12:36:30.55ID:LoKzz2Cb0142デフォルトの名無しさん
2015/11/25(水) 12:40:27.73ID:LoKzz2Cb0143デフォルトの名無しさん
2015/11/25(水) 13:39:23.50ID:SmR+c8iPどうでもいいよ。
オブジェクトに対してtell/askするだけだから。
0144デフォルトの名無しさん
2015/11/25(水) 14:20:20.67ID:LoKzz2Cbどうでもいい、という意見は健全すぎて...
強硬な意見を聞きたかった。
0145デフォルトの名無しさん
2015/11/25(水) 14:31:26.11ID:SmR+c8iP実際、アクセサとそれ以外を区別する必要が無いんだよ。
引数があればセッターなのかとか、
外からはセッターに見えるけど内部変数を持ってるのかとか。
0146デフォルトの名無しさん
2015/11/25(水) 17:01:01.21ID:Sra0FKsR0147デフォルトの名無しさん
2015/11/25(水) 19:46:23.25ID:LoKzz2Cbアクセッサなんて邪道。
コンストラクタ、デストラクタ、operator ( ) この3つだけでいいだろう。
0148デフォルトの名無しさん
2015/11/25(水) 19:56:36.81ID:iOeAQZmr定義するのが一番わかり易いんだろうね。
変数はすべてプライベート。
0149デフォルトの名無しさん
2015/11/25(水) 20:00:49.06ID:LoKzz2Cb0150デフォルトの名無しさん
2015/11/27(金) 05:22:14.87ID:2RpgJ5AOメンバ関数越しに値を変更してるような時代があったのかも知れないけど
それを推奨してたやつの頭がおかしかっただけ
0151デフォルトの名無しさん
2015/11/27(金) 09:47:06.34ID:vrZOFMnm内部的にはsetterを呼べるような定義ができるからね。
C#だとこんな感じか?
class Klass {
int _var;
public int var {
get { return _var; }
set { _var = value; }
}
}
つまりこれはプロパティがない言語特有の回避策だよ。
プロパティがある言語では以下のどちらの書き方をしても、
関数が呼ばれる(ことがある)
1. o.set_var(2)
2. o.var = 2
本質的には、値の代入と関数呼び出すは、書き方が違うだけで同じもの。
そして本当にやりたいことは、2の書き方をした時でも、値チェックなどをやって
例外を出したいから、それができる仕組みが必要ってこと。
だからプロパティという仕組みで、2の書き方で関数呼び出しができる構文が作られた。
だけどJavaだけは、それがなかったので、全て関数で書きましょうというやり方が普及してしまった。
Javaでもプロパティという仕組みを作ればよかったのだが、言語仕様を変えずにコーディングルールにしてしまった。
変数直接代入するしかない言語では全部関数で書く。
プロパティがある言語では、値代入=関数呼び出しにできる。
直接の変数代入はやったらだめ。
0152デフォルトの名無しさん
2015/11/27(金) 20:08:35.09ID:yE5slmiSたいして嬉しくないような気がする。
むしろ楽にできちゃう分、乱用されて困るってことない?
0153デフォルトの名無しさん
2015/11/27(金) 20:18:48.86ID:rL8jDZxa困るのはそのオブジェクトの使い方を間違ってるか、仕様通りに動作してないかだ。
0154デフォルトの名無しさん
2015/11/27(金) 21:24:48.23ID:yE5slmiS乱用ってのは安易にそういうクラスを設計してしまうのではないか?
ってことで、使う側の行動のことを言ってるんじゃないんだ。
0155デフォルトの名無しさん
2015/11/27(金) 21:47:02.86ID:D0U2RhLmクラスなんて、メソッドとプロパティしか公開していない。
メソッドは、obj.method(value) 形式で呼び出す関数。
プロパティは、 obj.prop = value 形式で呼び出す関数。
後者は関数に見えないかもしれないが、内部でトラップして
処理を入れられるのだから、書き方が違うだけで本質的には関数と同じだ。
オブジェクトにメッセージを送信する時の書き方が違うだけ。
0156デフォルトの名無しさん
2015/11/27(金) 22:07:38.18ID:yE5slmiS0157デフォルトの名無しさん
2015/11/27(金) 22:45:43.13ID:D0U2RhLm結局の所、どちらも、"関数" なんだよ
パブリック変数っていうのは悪で、なんで悪かというと
トラップして別の値や例外を出すように変えたい時に、
関数に変えないといけないから、呼び出し側に変更が生じてしまう。
だからパブリック変数を禁止するというのは理にかなっている。
パブリック変数をなくして、関数の構文糖であるプロパティを実装したC#と
本当に関数で実装するというルールを作るだけだったJavaという違いがあるだけ
0158デフォルトの名無しさん
2015/11/27(金) 23:01:11.52ID:yE5slmiS内部構造を変えるとプロパティってやつも合わせて変える必要があるのかと勘違いしてたよ。
まあ俺が言いたいのは内部構造と一対一に対応するようなアクセッサは悪だってこと。
0159デフォルトの名無しさん
2015/11/27(金) 23:40:59.58ID:D0U2RhLmアクセッサはインターフェースであって内部構造とは別。
ただし、Javaにおいてはプロパティがなくパブリックフィールドへの
読み書きをトラップする方法もないのでクラスにプロパティを追加しようと
思ったらアクセッサにするしか無い。
もしくは、あとからインターフェースが変わってしまうかもしれないのを
承知でパブリックフィールドに直接アクセスさせるかだ。
これはJava特有の制限であって、C#などのアクセッサはこれらの
問題を解決しているので何の問題もなく使える。
C#ではパブリックフィールド(のように見える物)はすべてアクセッサだ。
0160デフォルトの名無しさん
2015/11/28(土) 02:38:17.45ID:hrBHzyLEGet○○だらけにならなくて見た目もすっきりして非常に便利
0161デフォルトの名無しさん
2015/11/28(土) 04:11:48.93ID:gDtavKFE使った時点でオブジェクト指向ではない。
0162uy ◆Qawu9.2l1E
2015/11/28(土) 06:15:47.98ID:lBYFUN9m0163デフォルトの名無しさん
2015/11/28(土) 07:54:41.62ID:W/xTcAqmただのアグリゲーションが欲しい場合はどうするの?
0164デフォルトの名無しさん
2015/11/28(土) 08:03:38.79ID:uUr7rQGRゲッタ、セッタに、1対1で内部変数が紐づいてると思ってる奴がいるのか?
0165デフォルトの名無しさん
2015/11/28(土) 08:39:37.38ID:jvaToXPw>>151なんかは得意気にそういうことを語ってるように思えるね。
0166デフォルトの名無しさん
2015/11/28(土) 09:14:36.10ID:gDtavKFEクラスを構造体替わりにでも使えばいい。
0167デフォルトの名無しさん
2015/11/28(土) 09:21:37.29ID:gDtavKFEこれって実質publicだよな。
副作用がーって言ってるのは、これをあちこちから書き換えまくってるんじゃないの?
0168デフォルトの名無しさん
2015/11/28(土) 09:29:04.79ID:W/xTcAqmそれは>>161の発言とは矛盾しないの?
0169デフォルトの名無しさん
2015/11/28(土) 09:33:19.25ID:gDtavKFEオブジェクトと構造体を同一視して語ってるのか?
0170デフォルトの名無しさん
2015/11/28(土) 09:44:03.47ID:W/xTcAqm>>161の発言は対象を限らず包括的に語っているようだが?
同一視ということなら>>166の発言こそがその表現にふさわしい。
0171デフォルトの名無しさん
2015/11/28(土) 09:50:25.24ID:gDtavKFE今語られている文脈でのオブジェクトとは、ただのデータの入れ物ではない。
言わなくてもわかると思うが、>>161はオブジェクトについて語っている。
実際構造体の無い言語ではクラスで代用するしか無いだろ。
で何が疑問なの?
0172デフォルトの名無しさん
2015/11/28(土) 11:33:08.51ID:W/xTcAqm>>そもそも161の書き方が悪い。文脈に関係なく語っているように見える。gDtavKFE としての最初の発言だしな。
それを 「言わなくても分かると思うが、オブジェクトについて語っている」
などと言える神経が非常に疑問だ。
0173デフォルトの名無しさん
2015/11/28(土) 12:29:18.73ID:tjeMQY130174デフォルトの名無しさん
2015/11/28(土) 12:38:36.65ID:W/xTcAqm0175デフォルトの名無しさん
2015/11/28(土) 13:00:16.00ID:rTI66XO9アホかと。継承と多態こそオブジェクト指向の真髄。カプセル化なんてのはオブジェクト指向前からあり、C言語でも実装可能。
0176デフォルトの名無しさん
2015/11/28(土) 13:09:47.25ID:gDtavKFE真髄って程でもないだろ。
それに継承も多態もカプセルの中でやるものだ。
カプセルが外に公開するインターフェースこそが重要。
0177デフォルトの名無しさん
2015/11/28(土) 13:28:39.82ID:rTI66XO9オブジェクト思考前からカプセル化は一般的に使われてると何度言ったら。
カプセル化なんてアセンブラ時代から使われてるよ。カプセル化はオブジェクト指向を支える一つではあるが、
カプセル化してるからこれはオブジェクトだとかオブジェクトの定義を勘違いしすぎだろう。C言語はオブジェクト指向言語かっての。
日本人型とアメリカ人型があって他のシステムがどっちも人間型として扱えるのをオブジェクト指向つうんだよ。
つまり、重要なのは継承と多態を言語が機能として備えているかどうか。
0178デフォルトの名無しさん
2015/11/28(土) 13:41:09.14ID:gDtavKFEいつの昔からあるかとか、OOLの機能とかは本質じゃないだろ。
OOLはOOPをやり易くするものであって、非OOLでOOPができないわけじゃないだろ?
日本人をアメリカ人と交換しても成立するその構造こそが重要なんだよ。
0179デフォルトの名無しさん
2015/11/28(土) 13:48:32.98ID:rTI66XO9おまえの言ってたことはモジュール化プログラミング。
0180デフォルトの名無しさん
2015/11/28(土) 13:55:28.59ID:gDtavKFE継承、多態を使わなくてもプロトコル準拠なりで実現できる構造だよ。
つまりそれらOOLの機能に先立って構造が重要って事。逆なんだよ。
あとソフトウェアアーキテクチャでまず重要なのは構造化だ。
0181デフォルトの名無しさん
2015/11/28(土) 14:08:17.45ID:jvaToXPwあんたのはどちらかというとクラス指向じゃないかね?
0182デフォルトの名無しさん
2015/11/28(土) 14:25:47.70ID:CP1qN2KL継承は必ずしも必要とは言えない
継承が必要に見えても、実は継承してはいけないことは多々ある。
0183デフォルトの名無しさん
2015/11/28(土) 14:49:00.27ID:5QpRQDP+0184デフォルトの名無しさん
2015/11/28(土) 15:08:32.08ID:W/xTcAqmオブジェクト指向言語は、その考え方を簡単に記述できる
構文を持った言語。"簡単に記述できる"ってことが重要な所。
あんたらが本当にいいたいのは、オブジェクト指向なのか
オブジェクト指向言語なのかはっきりしろ。
継承、 多態性、カプセル化というのは、どれもオブジェクト指向の特徴。
C言語やアセンブラで実装できるかどうかは関係ない。考え方なんだから。
そしてこれらを簡単に記述できるのが、オブジェクト指向言語。
0185デフォルトの名無しさん
2015/11/28(土) 15:09:53.22ID:W/xTcAqm> オブジェクト思考前からカプセル化は一般的に使われてると何度言ったら。
それはファイルの中にカプセル化(単なるスコープ)だろ?
オブジェクト指向におけるカプセル化とは
クラスの中にカプセル化だ。
0186デフォルトの名無しさん
2015/11/28(土) 15:13:28.47ID:W/xTcAqmC言語でもクラス(のようなものを作って)データとメソッドを
一つにまとめて扱っているかのように感じる特殊な書き方
例えばこういうのがある。
C 言語によるオブジェクト記述法 COOL ver.2
http://www.sage-p.com/process/cool.htm
そういう書き方をするのであれば、それはオブジェクト指向だ。
だが、これは書き方であって言語の構文ではないので
C言語でカプセル化をやっていたとしても、それはオブジェクト指向を
やってるだけでオブジェクト指向言語にはならない。
0187デフォルトの名無しさん
2015/11/28(土) 15:32:24.95ID:rTI66XO9なにが違うねん。外から隠蔽するかしないかだろ。それをカプセルと呼ぼうがモジュールと呼ぼうがやってることは同じだ。
ただ隠蔽することがオブジェクト指向だと言われれば、それは違うと言えよう。
だいたい隠蔽する粒度、ファイル単位かモジュール単位かクラス単位か程度で、
それはオブジェクト指向で、こっちはオブジェクト指向ではないとか意味不明。
いつからオブジェクト指向は規模の話になったんだ?
とてもオブジェクト指向を最後まで勉強したとは思えない。
ここにいるのは最初のカプセル化まで理解して後の継承、多態は挫折した学生みたい。
昔、多くのじじぃがオブジェクト指向についていけなかったようにな。
0188デフォルトの名無しさん
2015/11/28(土) 15:34:00.47ID:W/xTcAqmそれでどこが具体的に間違っているのか
オブジェクト指向が詳しいあなた、
早く説明してくれよw
0189デフォルトの名無しさん
2015/11/28(土) 15:36:43.51ID:W/xTcAqmただ隠蔽することがオブジェクト指向だと言われれば、それは違うと言えよう。(←理由書いてないよ)
だいたい隠蔽する粒度、ファイル単位かモジュール単位かクラス単位か程度で、
それはオブジェクト指向で、こっちはオブジェクト指向ではないとか意味不明。(←理由書いてないよ)
いつからオブジェクト指向は規模の話になったんだ?(←規模の話してないよ)
とてもオブジェクト指向を最後まで勉強したとは思えない。(←お前の思い込みだよ)
ここにいるのは最初のカプセル化まで理解して後の継承、多態は挫折した学生みたい。(←お前の思い込みだよ)
昔、多くのじじぃがオブジェクト指向についていけなかったようにな。(←満足したかい?)
0190デフォルトの名無しさん
2015/11/28(土) 15:51:44.98ID:jvaToXPw0191デフォルトの名無しさん
2015/11/28(土) 16:28:53.95ID:Fi4wDTmy>オブジェクト指向
>オブジェクト指向(オブジェクトしこう)とは、オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方である。
>考え方である
>考え方である
>考え方である
つまり、リベラルだとか新自由主義だとかといった、思想の仲間
ゆるふわ
0192デフォルトの名無しさん
2015/11/28(土) 17:02:50.92ID:W/xTcAqm↑ この理由は?
重要な点はリベラルとか新自由主義ではなくて「考え方」とキーワードが入っているからかな?w
仏教という考え方も、科学者としての考え方というのも同じ理由で、仲間になりそうだw
0193デフォルトの名無しさん
2015/11/28(土) 17:05:36.00ID:8rz9DMpx>オブジェクト指向におけるカプセル化とは
>クラスの中にカプセル化だ。
はずれ。
クラス単位でカプセル化する言語もあれば
インスタンス単位でカプセル化する言語もある。
0194デフォルトの名無しさん
2015/11/28(土) 17:14:29.96ID:jvaToXPwソフトウェアの書き方の一分野だよ。
自然科学や数学だって個別の概念はとても厳密に定義されてるけど、「分野」にそんな定義はなく境目は結構あいまいだ。
それをゆるふわと言って貶す必要はない。
でもやっぱりオブジェクト指向はバズワード。
0195デフォルトの名無しさん
2015/11/28(土) 17:16:56.82ID:W/xTcAqmじゃあ「クラスまたは、クラスのインスタンス単位で
やるのがカプセル化」に訂正すればOKだね。
0196デフォルトの名無しさん
2015/11/28(土) 17:23:05.84ID:W/xTcAqmミサワにしか見えないんだよねw
それバズワードだよ
わかってないなー。みたいなw
0197デフォルトの名無しさん
2015/11/28(土) 17:26:27.20ID:t3RbZdkAプロパティ 副作用 = 中
関数 副作用 = 小
純粋関数 副作用 = 無し
副作用はプロジェクトが大きくなれば積み重ねれられて影響が出だす。
そして一定値を超えれば同等といえるほど把握しきれなくなる。
オブジェクト指向や関数型は「どうにでもなーれ」境界線への到達を若干遅らせることができる。
純粋関数は限り無くゼロに近いので影響が出にくい。
ただファイルやDBなどのIO周りの副作用は避けられないのでゼロではない。
0198デフォルトの名無しさん
2015/11/28(土) 17:28:52.49ID:Fi4wDTmy>オブジェクト指向
>オブジェクト指向(オブジェクトしこう)とは、オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方である。
って書いてあるけど、殆どのオブジェクト指向言語は相互作用を得意とはしていない
むしろ、相互作用以外の部分、オブジェクトで閉じている処理はサポートしてやるから
あとの相互作用は自分で頑張れなー、って印象
0199デフォルトの名無しさん
2015/11/28(土) 17:51:10.33ID:8rz9DMpx全てのオブジェクト指向言語にクラスがあると思うなよシロートかよ
0200デフォルトの名無しさん
2015/11/28(土) 17:52:19.20ID:uUr7rQGR君の言うレベルでオブジェクトが全ての面倒を見てくれるなら、そもそも、プログラマなんぞ要らんがな...
0201デフォルトの名無しさん
2015/11/28(土) 17:54:31.47ID:W/xTcAqm> プロパティ 副作用 = 中
> 関数 副作用 = 小
これはおかしいな。上でも書いたようにプロパティは
関数(メソッド)と同等の物なので同じになるはずだ。
プロパティは取得と代入がある。取得は何度取得しても同じ(冪等性)
関数から何度取得しても同じ、であればプロパティの取得と同じ。
これは純粋関数と同じように副作用は無しという意味でもある。
そして取得するたびに状態が変わるプロパティは作れる。
取得するたびに状態が変わる関数も作れる。これは副作用のレベルは同じだ。
次に代入だが何度呼び出しても状態が変わらない関数もある。
それが純粋関数であるが、純粋関数を別に用意して「関数 副作用 小」と書いてあるので
関数を呼び出すと状態が変わるもののことを「小」と言ってるのだろう?
だがそれはプロパティと同じなのだから「小」にならなければならない。
さて、例えばこんなプロパティはどうだろう?
関数(メソッド)でオブジェクトの状態を変更し、プロパティは読み取り専用。
これは実際によくあるパターンだ。例えばファイルをopenメソッドで呼び出し
ファイルハンドルはプロパティから取得するなどのパターンだ。
この場合、関数は副作用があって、プロパティは副作用がない。
0202デフォルトの名無しさん
2015/11/28(土) 17:55:48.86ID:W/xTcAqm> 全てのオブジェクト指向言語にクラスがあると思うなよシロートかよ
じゃあ全てのオブジェクト指向言語に、インスタンスはあるということでいいかな?
0203デフォルトの名無しさん
2015/11/28(土) 18:03:11.73ID:IVslLxwX結局「情報遮蔽」に失敗しているということだな
純粋関数てあればその、純粋なる手続きを簡潔なinとoutとして
そしてその関数が何をするかを示せば、モジュールとしてパッケージ化、すなわち情報遮蔽できる
一方でステートを持つオブジェクトを情報遮蔽しても
結局そのステートが何を示しているのか、どういう作用をもたらすのか
という風に下って行かないと、正確な動作が予測できなくなる
これがオブジェクト指向のライブラリを読み解く面倒さであり
情報遮蔽に失敗しているということである
隠してはいけないものまで遮蔽の海の投げ込まれると、ファジーに処理しなければならなくなる
ファジーに処理できるのではなく、ファジーであることを強いられるわけだ
0204デフォルトの名無しさん
2015/11/28(土) 18:14:30.30ID:JZIr9Jhy一番の問題点はメソッドの呼ぶ順番で挙動結果が変わる恐ろしさ。
0205デフォルトの名無しさん
2015/11/28(土) 18:16:17.35ID:Rc2MJzM/怖がることはない上から順番に実行されるんだ。
0206デフォルトの名無しさん
2015/11/28(土) 18:22:30.98ID:JZIr9Jhy数が多くなると呼び順を把握するだけで頭が破裂する
0207デフォルトの名無しさん
2015/11/28(土) 18:24:42.05ID:Rc2MJzM/分割するんだ。頭が破裂しない程度に関数を分割するんだよ。
0208デフォルトの名無しさん
2015/11/28(土) 18:29:37.67ID:JZIr9Jhy分割したら呼び出し順序が増えた
なにを言ってるかわからねーと思うが
0209デフォルトの名無しさん
2015/11/28(土) 18:31:04.24ID:W/xTcAqmmain() {
・・・
}
foo() {
・・・
}
bar() {
・・・
}
baz() {
・・・
}
0210デフォルトの名無しさん
2015/11/28(土) 18:37:38.71ID:Rc2MJzM/大丈夫です。
0211デフォルトの名無しさん
2015/11/28(土) 18:37:50.46ID:JZIr9Jhyvar fuck = new Fuck();
fuck.you(); //ooh
fuck.me(); // aah
これの
var fuck = new Fuck();
fuck.me(); // ooh, yeh
fuck.you(); // susuh
挙動が違うんだぜ?
こんなの数が増えたら把握するだけで頭破裂するだろ。
0212デフォルトの名無しさん
2015/11/28(土) 18:44:34.62ID:Rc2MJzM/じゃあお前はお風呂に入るとき服を先に脱いでから湯船に入るのか
湯船に入ってから服を脱ぐのか悩むのか?あ?
後先考えればわかるだろうが。引数がない時点で何らかの
副作用があるのは明らかなのだから何をしようとしているのか
きちんと考えてプログラム組むべきだし、湯船で着衣プレイはお前にはまだ早い。
0213デフォルトの名無しさん
2015/11/28(土) 18:45:58.91ID:lKEWLS4Sこれよ
0214デフォルトの名無しさん
2015/11/28(土) 18:51:26.93ID:eJVnMSEL0215デフォルトの名無しさん
2015/11/28(土) 18:55:20.03ID:W/xTcAqm> 引数がない時点で何らかの
> 副作用があるのは明らかなのだから
get_version() (アプリのバージョン番号を返す)
これって副作用ありますか?
0216デフォルトの名無しさん
2015/11/28(土) 18:58:24.87ID:Rc2MJzM/文脈からわかると思うが、戻り値の間違いだ。
0217デフォルトの名無しさん
2015/11/28(土) 19:10:20.60ID:W/xTcAqm引数がない時点で何らかの
戻り値があるのは明らかなのだから
0218デフォルトの名無しさん
2015/11/28(土) 19:20:35.13ID:BVJTL3ly結構居るんじゃないのかな?
でもそれだと意味が無いから不要だと言ってるかと。
0219デフォルトの名無しさん
2015/11/28(土) 20:04:41.95ID:oWRhnwkW上流工程のコードを書かないで仕事した気分になりたい人と、
実際にコード書いて馬鹿馬鹿しい仕様にファックファック言う人じゃ好き嫌いも分かれるよ!
0220デフォルトの名無しさん
2015/11/28(土) 20:51:35.64ID:DqKP/LxNそれ言い出したら継承や多態も関数ポインタでやってただろ
そもそもオブジェクト指向って最初の提唱者の意図したものと
大分ずれてるし、それまで現場で経験的によく使われてた
パターンを言語でサポートしたぐらいのものでしかない
多人数開発での自衛的プログラミングから発したものだし
カプセル化が本質というのもあながち間違ってないよ
0221デフォルトの名無しさん
2015/11/28(土) 22:10:43.99ID:8WrkOG/L? オブジェクト指向で呼んでる側の上位クラスが複雑なことさせられてるなら
そりゃ、要素の分解に失敗してんじゃねぇの。
オブジェクト指向の基本はある単位に"仕事を任せる"ことで
委託元は相手先の状態を知らなくてよい状態にして
ユニットの独立性をあげ、取り回しを楽にし、修正範囲を局所化することだから。
0222デフォルトの名無しさん
2015/11/28(土) 22:43:33.10ID:W/xTcAqm0223デフォルトの名無しさん
2015/11/28(土) 22:44:19.81ID:W/xTcAqm他人になりすましてしまった
0224デフォルトの名無しさん
2015/11/29(日) 00:09:49.32ID:WH+mhkGZ居ないと信じたい...
俺は、プライベートの無い生活なんてしたくないよ...
0225デフォルトの名無しさん
2015/11/29(日) 00:49:04.34ID:KrqWIN7Rゲッタ、セッタという名前からしてあやしいじゃないか。だって値の取得と設定だぜ。
0226デフォルトの名無しさん
2015/11/29(日) 02:51:22.20ID:KrqWIN7R最初から日本語で言ったほうがいいって話?
0227デフォルトの名無しさん
2015/11/29(日) 04:57:44.49ID:JoBbAgA70228uy ◆Qawu9.2l1E
2015/11/29(日) 05:05:17.16ID:RQPUWZLH例えば
c = "abcd" というオブジェクト・または束縛された値があって
でも実際に欲しいのは"Abcd" だとするじゃん
副作用有り↓
c.setter("Abcd")
func(c.getter())
副作用無し↓
func(c.capitalize())
副作用ない事の利点は、安全性が高い事
欠点は
"abcd"から"aBcd"というデータが欲しくなった時に、良いメソッドがない為に、新たな値を必要としてしまう
d = "aBcd"
func(d)
0229uy ◆Qawu9.2l1E
2015/11/29(日) 05:20:08.46ID:RQPUWZLH副作用無しで組める範囲の広さはスキルレベルによる
最初から副作用無しで組む事放棄して
getter setter 書いてるアホは死んでどうぞ
0230デフォルトの名無しさん
2015/11/29(日) 05:26:01.89ID:JoBbAgA7アホか?dは値では無くて値への参照だ
どっちの方法でも新しい値は作られる
0231デフォルトの名無しさん
2015/11/29(日) 05:26:18.25ID:6xzhksi7束縛された値だってプ
束縛されるのは変数のほうだボケ
0232デフォルトの名無しさん
2015/11/29(日) 05:29:40.59ID:6xzhksi7> c = "abcd"
>副作用有り↓
>c.setter("Abcd")
>func(c.getter())
バカすぎて頭がおかしいレベル。
そのsetterってのは"abcd"という文字列オブジェクトのメソッドなのか?
おまえは言語よりまず自分の頭を疑え。
0233デフォルトの名無しさん
2015/11/29(日) 05:32:08.26ID:6xzhksi7>"abcd"から"aBcd"というデータが欲しくなった時に、良いメソッドがない為に、新たな値を必要としてしまう
おまえは本当にバカだなあ。
そんなの、文字列クラスにpublic String capitalized(int pos)なメソッドを定義すればいいだけじゃないか。
もう一度言う。言語を疑う前に自分の頭を疑え。それがバカの義務だ。
0234uy ◆Qawu9.2l1E
2015/11/29(日) 05:42:31.86ID:RQPUWZLH0235uy ◆Qawu9.2l1E
2015/11/29(日) 06:04:16.21ID:RQPUWZLH「副作用」の事を説明したら
何故かお前ら「ゴミカス」の頭からは「Haskell」や「関数型」といった記憶が同時に引き出されちゃって混乱し始めてるみたいだけど
センスねーから死ねよw
0236デフォルトの名無しさん
2015/11/29(日) 06:17:38.75ID:DszlBPxJオブジェクトは、生成初期化以外ではどういう順番で呼んでも正しく動作するように作る。
オブジェクトは基本的に他に依存せず完結するように作るので、一度に全部のオブジェクトの状態を把握する必要は無い。
例外的に初期化がデリケートだったり、複数オブジェクトが依存しあってクラスターを構成する場合もあるが、
原則は上に書いた通り。だから頭は爆発しない。
0237uy ◆Qawu9.2l1E
2015/11/29(日) 06:18:52.96ID:RQPUWZLH副作用と関数型は関係ないしww
そこで使ってるアホの子が作った用語を引っ張ってくる意味もないしwww
ましては関数型言語の実装なんてもっと関係ないwwww
まぁ少ない知能で無能が一生懸命理解した概念だから、無関係の記憶まで頭の中でリンクされて覚えちゃってるのは仕方ないとしようかwwwww
副作用を持つクラスと持たないクラスはオブジェクト指向でも重要なのにwwwwww
そこを一切考えずにgetter /setter (笑)を基本としwwwwwww
カプセル化(爆)を効果的に行おうとしているけどwwwwwwww
本来カプセル化(笑)を効果的に行おうとするのではなくwwwwwwwww
頭が足りてれば副作用を減らす事を考えているはずwwwwwwwwwww
君たちはIQが低いんですよwwwwwwwwwwww
------------------------------------
ようはカプセル化というのは副作用を(自分の思考能力では)消せない時の妥協案なわけです
0238uy ◆Qawu9.2l1E
2015/11/29(日) 06:20:40.95ID:RQPUWZLHStateパターンで脳内メモリが足りずスタックオーバーフローしてる奴が
このスレに名無しいるかと思うと
とても議論を出来る席ではないので退席させて頂きます
0239デフォルトの名無しさん
2015/11/29(日) 07:42:51.55ID:6xzhksi7勉強すべきなのはおまえだバカ。
バカはバカなりに自省しろバカ。
おまえのようなバカがバカなバカ話を垂れ流している様ほどバカなバカはいないぞバカ。
0240デフォルトの名無しさん
2015/11/29(日) 07:43:55.50ID:6xzhksi7オブジェクト指向と副作用も関係ないことに気付けバカ。
まずは自分のバカさ加減に気付けバカ。
バカはバカなりにバカを自覚しろバカ。
0241デフォルトの名無しさん
2015/11/29(日) 09:48:23.77ID:mstAENSD将来有望な資格も見えてくる。
資格別の求人件数と平均最低月給ランキング。
あなたの資格の市場価値が一目瞭然!
http://jobinjapan.jp/license/
ぼくらの大切な資格は正当に評価されているか確認しよう。
0242デフォルトの名無しさん
2015/11/29(日) 10:01:35.10ID:WH+mhkGZ確かに、ゲッタ、セッタを値の取得と設定と思ってたら、不要なものだよなぁ...
つーか、そうなってくると、オブジェクト指向も関数型も必要ないじゃんって話になると思うけどな...
0243デフォルトの名無しさん
2015/11/29(日) 12:30:09.40ID:F5L+GOgjほんとこれ
0244デフォルトの名無しさん
2015/11/29(日) 12:47:47.79ID:KrqWIN7R> これと
> var fuck = new Fuck();
> fuck.you(); //ooh
> fuck.me(); // aah
>
> これの
> var fuck = new Fuck();
> fuck.me(); // ooh, yeh
> fuck.you(); // susuh
>
> 挙動が違うんだぜ?
> こんなの数が増えたら把握するだけで頭破裂するだろ。
えーと、ある値にたいして、youの計算をしてからmeの計算をした結果と
meの計算をしてからyouの計算をした結果が違うってことだよね?
関数型で言えば、こういうことだよね?
x=2
y=add4(x); // y=6
z=mul5(y); // z=30
x=2
y=mul5(x); // y=10
z=add4(y); // y=14
0245デフォルトの名無しさん
2015/11/29(日) 13:15:17.25ID:PDzYlTyKオブジェクト指向は見えない係数が存在してる可能性があるのが問題点な。
その例であればadd4でグローバル変数の書き換えを行っている可能性もありえる。
0246デフォルトの名無しさん
2015/11/29(日) 13:18:07.56ID:PDzYlTyKほとんどのOSのグラフィック周りはオブジェクト指向風に実装されているせいで
この問題に直面してシングルスレッドでしか動かない。
0247デフォルトの名無しさん
2015/11/29(日) 14:00:48.37ID:7sIA5lEw> この問題に直面してシングルスレッドでしか動かない。
オブジェクト指向風(?)に実装されていなくてマルチスレッドで動く例は?
0248デフォルトの名無しさん
2015/11/29(日) 14:05:02.24ID:KrqWIN7R> オブジェクト指向は見えない係数が存在してる可能性があるのが問題点な。
見えない?
xの代わりにxオブジェクトが存在してるだけだろう?
y=add4(x);
y=x.add4();
引数が前に来るか後ろに来るかだけで、なーんもかわらん。
0249デフォルトの名無しさん
2015/11/29(日) 14:07:24.59ID:KrqWIN7R> ほとんどのOSのグラフィック周りはオブジェクト指向風に実装されているせいで
UI(グラフィック)なんてのは、副作用の塊なんだから
オブジェクト指向風に実装するか
(関数型では)実装できないかだろ
0250デフォルトの名無しさん
2015/11/29(日) 14:40:25.07ID:4SB95NTF…MacOSXはNeXTから継承したわりとガチのオブジェクト指向で設計されてるから
グラフィックパーツは最終的にQuartz Compositorまで送られて
勝手にハードウェアアクセラレーションまでやってくれるが
その動作について人間まで含めた上位オブジェクトは一切関知する必要がないのだが…
副作用?なんのこと、それ?
0251デフォルトの名無しさん
2015/11/29(日) 14:46:49.29ID:KrqWIN7Rそれはそもそも>>246が間違っていて、単なるグラフィック処理であれば
マルチスレッドで動く。シングルスレッドでしか動かないって言ってるのはUIの部分。
0252デフォルトの名無しさん
2015/11/29(日) 16:04:44.74ID:JoBbAgA7引数と戻り値を持つのは間違いなんだよな
疑似コードで書くとこうだ
x=0
y=4
Object o
o.変数zに変数xとyを足したものを入れろ
これがオブジェクト指向
ここでoは命令に従うわないかもしれないしいつの時間zに答えを入れるか
わからないからユーザーはzを見張っていないといけない
答えが正しいとも限らない
oに送るのは命令だから入れろとかやれとか命令形で書かないといけない
0253デフォルトの名無しさん
2015/11/29(日) 16:14:38.76ID:vj6S3tdqちゃんと関数切り分けして、出力と入力の引数をわかり易く設定するだけでも
だいぶ違ってくるんだが。
0254デフォルトの名無しさん
2015/11/29(日) 16:16:09.62ID:KrqWIN7R> 引数と戻り値を持つのは間違いなんだよな
そいういう間違った思い込みで
オブジェクト指向をディスってるんだろうなw
わかってないから悪く言う。
0255デフォルトの名無しさん
2015/11/29(日) 16:19:13.17ID:KrqWIN7R最近は、オブジェクト指向は全体の入れ物・構造を作るもので
その中は関数型風に処理するって多いよね。
RADとかフレームワークを使った開発とかまさにそれで、
フレームワークそのものと、フレームワークを呼び出す所までは
オブジェクト指向になっていて、その中に処理を書く。
0256デフォルトの名無しさん
2015/11/29(日) 16:19:41.99ID:KrqWIN7Ro に送る命令に含まれるxとかyとかzというのは引数じゃなきゃ何なんだ?
0257デフォルトの名無しさん
2015/11/29(日) 16:28:08.12ID:JoBbAgA70258デフォルトの名無しさん
2015/11/29(日) 16:33:35.82ID:KrqWIN7R
>>248
状態の話なのに何も変わらんはないでしょ。
0260デフォルトの名無しさん
2015/11/29(日) 17:55:17.49ID:k+2nqD55説明にセンスなさすぎだろwww
getter/setterと非破壊的メソッドじゃなくて、破壊的と非破壊的で比較しろよ
0261デフォルトの名無しさん
2015/11/29(日) 18:16:03.14ID:FLk+0ip4クラスだとメソッド内部でインスタンス変数が使われている可能性を排除できないって意味だろ
0262デフォルトの名無しさん
2015/11/29(日) 18:21:58.81ID:KrqWIN7R関数でもグローバル変数や参照で渡された引数の変更
その他のリソースの書き換えの可能性も排除できないが
0263デフォルトの名無しさん
2015/11/29(日) 18:23:04.88ID:Co3W2iFaそれxがデータのみの構造体だったとしても
関数内でどの要素を変更してるかなんて
外から分かんないじゃん
0264デフォルトの名無しさん
2015/11/29(日) 18:35:24.95ID:Co3W2iFaほんとはオブジェクト指向で書きたいんだろうけど
可搬性考えてC採用してるやつ
FooData foo;
Foo_Init(&foo, 0);
Foo_calc(&foo, 999);
Foo_final(&foo);
0265デフォルトの名無しさん
2015/11/29(日) 20:42:29.07ID:ryBUNuVd可能性の問題だろ。
出来る出来ないではなく、そういうのが平然と行われている文化と、そういうのを忌み嫌う文化の違い。
0266デフォルトの名無しさん
2015/11/29(日) 21:21:22.81ID:KrqWIN7Rじゃあ実例出す必要ないだろ。
所詮文化の話なんだから。
それで俺が気になるのは副作用無しでGUIアプリや
ゲームなんかが作れるのか?ってというところなんだが。
攻撃受けたらHPが減る。回復アイテム使ったらHPが回復する。
みたいなものをどうやって副作用無しで自然な形で表現するのかが知りたい。
0267デフォルトの名無しさん
2015/11/29(日) 23:01:26.93ID:XdAOMKyxグラディウス
http://www.geocities.jp/takascience/haskell/monadius_ja.html
ぷよぷよ
http://zecl.hatenablog.com/entry/20111004/p1 👀
Rock54: Caution(BBR-MD5:398130fb352551638c7f2379a2b1e0e9)
0268デフォルトの名無しさん
2015/11/29(日) 23:21:46.75ID:KrqWIN7Rモナドは関数型じゃない。
0269デフォルトの名無しさん
2015/11/29(日) 23:24:34.24ID:KrqWIN7R> 実行してたら遅くなるとかいった、Haskellの仕組みをよく知らないと分からない問題はお手上げです。
> もっともっとゲームを作りやすくする方法があるはず。 つぎは、みんなにまかせた!
なんかエクセルででゲーム作るぞ!
エクセルでもどうにかケームは作れるぞということは示せましたが
みたいなレベルなんだよなぁw
0270デフォルトの名無しさん
2015/11/29(日) 23:33:41.25ID:4SB95NTFA入力に対して常にBが返るべきで、ここで場合によってCが返る
これこそがプログラムの厳密化を壊すバグの温床!!ってこって。
ところがオブジェクト指向はオブジェクトに対して「これをやれ」と命令すると
オブジェクトは責任を持って作業を行い、出力Bが返せないからエラー放棄じゃなくて
できれば自分の職責で「ではCで」を出すぐらいのことまでやれ。だから
方法論のベクトル自体が真逆に近いもんなぁ。
0271デフォルトの名無しさん
2015/11/29(日) 23:35:20.28ID:KrqWIN7R> できれば自分の職責で「ではCで」を出すぐらいのことまでやれ。
それ、お前が例外しらんだけだろw
知っててもトラップして例外無視してるだけだろ
ほんと知らんやつほど、ディスるんだよな。
0272デフォルトの名無しさん
2015/11/29(日) 23:37:19.08ID:KrqWIN7Rまだ>>270のほうがマシかも
0273デフォルトの名無しさん
2015/11/29(日) 23:41:01.72ID:KrqWIN7R0274デフォルトの名無しさん
2015/11/29(日) 23:58:29.01ID:KrqWIN7R0275デフォルトの名無しさん
2015/11/30(月) 00:04:52.45ID:JF8UCarw0276uy ◆Qawu9.2l1E
2015/11/30(月) 04:36:25.49ID:K9XXst/gこれから大事な事を言います。
言語が多機能になり柔軟性を持つと「神オブジェクト指向」が可能になります。
神オブジェクト指向でソースコードを書いても、
言語仕様上で詰む事がなくなってきています。
神オブジェクトクラスの実装をeval以外で行える事が重要です。
言語性能が大分それを実装する為のスペックに追いついてきました。
それが次の世代のプログラミング技法となるのです。
0277uy ◆Qawu9.2l1E
2015/11/30(月) 04:49:45.91ID:K9XXst/gclass Player
end
class Enemy
end
player = Player.new
enemy = Enemy.new
-----------------------
◇ 神オブジェクト指向
class God_Object
end
player = God_Object.new(:player)
player.extend Player_module
enemy = God_Object.new(:enemy)
enemy.extend Enemy_module
0278デフォルトの名無しさん
2015/11/30(月) 07:29:34.03ID:qwjL9oFD生成はCreateかGenerationでしょうに、この簡単なことが
疑問に持てない言語設計者
絶対にnewは無いな
0279デフォルトの名無しさん
2015/11/30(月) 07:50:49.02ID:7BdzR/6Vuy=うるさい 幼稚園生
0280デフォルトの名無しさん
2015/11/30(月) 08:37:24.34ID:3thMnOBnきみが味方に殴りかかっただけw
0281デフォルトの名無しさん
2015/11/30(月) 08:41:18.16ID:JF8UCarw0282デフォルトの名無しさん
2015/11/30(月) 09:38:51.46ID:/xVWkcP20283デフォルトの名無しさん
2015/11/30(月) 09:55:33.63ID:pqu72bQD0284デフォルトの名無しさん
2015/11/30(月) 10:24:03.75ID:ul1nMABE今はどうしてんの?
0285デフォルトの名無しさん
2015/11/30(月) 10:29:39.15ID:JF8UCarwobj.value = 1
ってかけるよ。
必要ならば、これにsetter/getterを追加するだけ。
0286デフォルトの名無しさん
2015/11/30(月) 10:30:19.66ID:JF8UCarwおい、お前。勝手に俺のID使うな。
0287デフォルトの名無しさん
2015/11/30(月) 11:06:30.22ID:ul1nMABE後から書いといて何だよw
0288デフォルトの名無しさん
2015/11/30(月) 11:11:50.13ID:ul1nMABE以前はvalueをパブリックフィールドにしてたけど、今はプロパティを使って
obj.value = 1としたり、必要ならsetter/getterを追加してるってこと?
それだと>>164の質問に対して"yes"と答えることになるな。
0289デフォルトの名無しさん
2015/11/30(月) 11:25:14.91ID:JF8UCarw> それだと>>164の質問に対して"yes"と答えることになるな。
ぜんぜん違うだろ。
obj.value = 1 と書いたからって、別に内部変数 _value に入れるとは限らない。
極端な例を言えば、obj.value = 1 とやったら画面に1を出力することだってできる。(普通はやらんが)
setterはあまり利用例が限られるが、getterで言えば内部のデータ構造が構造体で、
valueを取得すると、その構造体の一つのフィールドを取ってくるかもしれない。
設定ファイルオブジェクトConfig。のインスタンス config = new Config('設定ディレクトリ') が
あったとして、ファイルを全部読むこむのが無駄だから、 name = config.name って
やった時にファイルから読んで、そのキーを返すなんて実装も考えられる。
この場合は変数は全く無いかもしれない。
Configを継承したDBConfigを作って、config = new DBConfig('データベースアドレス')ってやれば
name = config.name という全く同じインターフェースのまま、データベースから値を取ってくるように
したくなるかもしれない。もちろんこれも内部変数には結びついていない。
setterに戻すと、値をセットした時点でデータベースに書き戻すとかな。
なんでvalueのsetter/getterといったからって、内部変数に結び付けないといけないのか?
setter/getterの使い方がわかってなくて、文句言ってるだけじゃないか?
0290デフォルトの名無しさん
2015/11/30(月) 11:36:32.21ID:pqu72bQD0291デフォルトの名無しさん
2015/11/30(月) 14:00:42.54ID:ul1nMABE「以前はvalueをパブリックフィールドにしてたけど」
という仮定部分を読み飛ばすなよ
0292デフォルトの名無しさん
2015/11/30(月) 14:02:03.79ID:ul1nMABE>>289だった。
0293デフォルトの名無しさん
2015/11/30(月) 16:18:38.78ID:JF8UCarw読み飛ばさなかったらかと言って何が変わるのか?
本来クラスは、インターフェースとして考えたものを
公開するべきであって、中身を晒すべきじゃない。
基本的な考え方として、インターフェースを変えてはならない。
クラスがインターフェースとしてvalueを持つのであれば、
中身がどうなっていようが、どう変わろうが、変えるべきじゃないわけ。
以前はクラスのインターフェースがvalueであった。それはこれからも変わらない。
以前は、内部変数に直接結びついていた。あとから直接結びつかないようになった。
内部実装が変わっても、インターフェースを変えずにすむのがsetter / getterなんだよ。
内部実装が変わった時、内部変数に直接結びつかないのは、普通にある話。
0294デフォルトの名無しさん
2015/11/30(月) 16:40:42.45ID:Ee9Jt/HC0295デフォルトの名無しさん
2015/11/30(月) 16:46:09.58ID:ul1nMABEそれは異論ないけど>>282からの答えが聞きたいのだ。
0296デフォルトの名無しさん
2015/11/30(月) 16:46:39.88ID:JF8UCarwプログラミング言語はアセンブラの時代から
発展=シンタックスシュガーを追加してきた。
for文ですらアセンブラからすればシンタックスシュガー。
高級言語の本質はシンタックスシュガーなわけで、
無くてはならない便利なものだよ。
0297デフォルトの名無しさん
2015/11/30(月) 16:47:11.30ID:JF8UCarw俺は>>282じゃないんで知らん
0298デフォルトの名無しさん
2015/11/30(月) 17:00:48.28ID:Ee9Jt/HCカプセル化こそオブジェクト指向というこのスレの流れ。今日オブジェクト指向覚えました感がするんだよ。
0299デフォルトの名無しさん
2015/11/30(月) 17:07:55.96ID:JF8UCarw知らんがな。
カプセル化こそオブジェクト指向というのが、このスレの流れ今の流れじゃん?
って言われても、お前にはそう見えるんだなぁーぐらいにしか思わん。
0300デフォルトの名無しさん
2015/11/30(月) 20:20:31.35ID:KJhtuNJw多態もそうだけども
アランケイ自体もメッセージ送信がキモでOOPって名付けは失敗だったと言ってるし
今の流れってOOPやカプセル化そのものの話みたいな一般化した話にはなってなくて、単にゲッターセッターについて各々が思い思いに語ってる状態だよね
前提も揃ってないし、議論のゴールもない状態
0301デフォルトの名無しさん
2015/11/30(月) 20:27:47.11ID:yj2fjbPw0302デフォルトの名無しさん
2015/11/30(月) 20:38:13.31ID:Ee9Jt/HCfprintf(f,"test");
fclose(f);
FILE* f = new FILE();
f->Open();
f->printf("test");
f->Close();
delete f;
オブジェクト指向してるおれかっこいい。
0303デフォルトの名無しさん
2015/11/30(月) 20:56:02.09ID:ul1nMABE「それも一種のカプセル化ですよね」みたいに。
それはともかくメッセージのことは正直よくわからん。なんでそんなものがコア概念なんだか。
0304デフォルトの名無しさん
2015/11/30(月) 21:12:15.75ID:Ee9Jt/HC0305デフォルトの名無しさん
2015/11/30(月) 21:16:06.86ID:KChypJW3オブジェクト指向はその名前に反してメッセージングこそが重要ってことになっている
まぁケイが言ってるだけだが
メッセージングが重要なら、はじめからメッセージング指向って名前にすればよかったのに
マルチメソッドがうまく実装できなかったからからか知らないがオブジェクト指向って名前になった
オブジェクトに関して記述してオブジェクトを中心に何でも考えるのに
メッセージングや相互作用こそ本質というね
二つの概念を同時に考える能力が無いと使えないね
0306デフォルトの名無しさん
2015/11/30(月) 21:22:16.89ID:ul1nMABE歴史ということであれば各種読み物で知ってはいるが、結局は死んだお題目に過ぎないのか?
0307デフォルトの名無しさん
2015/11/30(月) 21:24:12.98ID:Ee9Jt/HC0308デフォルトの名無しさん
2015/11/30(月) 21:45:00.93ID:G/1u/u7p0309デフォルトの名無しさん
2015/11/30(月) 21:47:30.13ID:JF8UCarw結局そこにたどり着くんだよねw
普段から物に名前をつけて、物という単位で
扱っているのがこの世の中の訳だよ。
0310デフォルトの名無しさん
2015/11/30(月) 21:52:00.73ID:KChypJW3動くとか、走るとか、動詞のがヒューマニズムには重要だろ
0311デフォルトの名無しさん
2015/11/30(月) 21:59:57.88ID:KChypJW3恋愛は一人ではできないわけだが
動作が必ず誰かに属さなければならないと考えると面倒だろう
俺はそうは思ってないわけ
0312デフォルトの名無しさん
2015/11/30(月) 22:02:35.33ID:ul1nMABE>>308この世は神が再帰的に作った。
0313デフォルトの名無しさん
2015/11/30(月) 22:07:49.14ID:Ee9Jt/HCセッセージなしでどうやって個々のアプリを実装する気だ?
すぺてのアプリがマウスや他のアプリのウインドウの位置をリアルタイムで監視する気か?
0314デフォルトの名無しさん
2015/11/30(月) 22:09:48.28ID:KChypJW3これは一理ある
良くあるのが女性のスカート
男性はスカートが大好きだが、なぜあんなに大好きなのか、不思議だろう
それは、女性がスカートを履いて歩く姿が
性器に指を突っ込んでクチュクチュする様の相似になっているから
だからスカートはヒラヒラしているし
ゴスロリなんかのスカートのフリル?も全部性器の相似
マトリョーシカのようなもので
隠しているようで内部を暗示している
0315デフォルトの名無しさん
2015/11/30(月) 22:13:06.56ID:KChypJW3男性には女性性器が無いからスカートをはいても女性はそそらない
形状が異なるからね
0316デフォルトの名無しさん
2015/11/30(月) 22:21:28.43ID:JF8UCarw全部オブジェクトなのよね。
0317デフォルトの名無しさん
2015/11/30(月) 22:22:50.31ID:KJhtuNJwまあどうでもいいのだけど
0318デフォルトの名無しさん
2015/11/30(月) 22:23:38.60ID:KChypJW30319デフォルトの名無しさん
2015/11/30(月) 22:25:05.22ID:JF8UCarwお、オブジェクト指向の代わりに
人をなんと見る指向を作るんだい!?
0320デフォルトの名無しさん
2015/11/30(月) 22:25:38.82ID:KChypJW3蝶ネクタイといったものもあるが、普通はもっとシンボルなやつをつける
0321デフォルトの名無しさん
2015/11/30(月) 22:25:49.96ID:JF8UCarw何でも擬人化するやつだね。
0322デフォルトの名無しさん
2015/11/30(月) 22:28:48.83ID:KChypJW3その人の成し遂げたことで見ればよいだろう
0323デフォルトの名無しさん
2015/11/30(月) 22:41:12.03ID:JF8UCarw意味わからんw
人を物と見てはいけない○○指向は
物を○○とみる○○指向なんでしょ?
せっかくつき合ってあげてるのに
面白いことの一つぐらい言えよw
0324デフォルトの名無しさん
2015/11/30(月) 22:42:57.89ID:CwTedwfoカプセル化ってデータと処理をまとめるだけのことなんだが、データを隠す意味で使っている阿呆が多い。
0325デフォルトの名無しさん
2015/11/30(月) 22:45:54.01ID:KChypJW3もっと基本的なところで、この世の大体のことは物理現象が引き起こしているとしたら
オブジェクトどうこうより、物理現象を表す数式や公式の方が重要になってくるだろう
理系なら抑えておくべき学問の数学も、オブジェクト指向とは言いがたい
物ばかりに注目するのは良くない
0326デフォルトの名無しさん
2015/11/30(月) 22:50:23.39ID:KJhtuNJwつか隠蔽できないカプセル化機構ってないよな。俺が知らんだけかな
0327デフォルトの名無しさん
2015/11/30(月) 22:53:49.05ID:Ee9Jt/HCしかし、オブジェクト指向が出てきたとき、そのパラダイム変換についていけないPGが続出して、
多くのプロジェクトがデスマーチになったの。
その多くの案件がJavaの案件だった。
0328デフォルトの名無しさん
2015/11/30(月) 22:54:26.48ID:mJ6qKlWc0329デフォルトの名無しさん
2015/11/30(月) 23:08:23.28ID:ul1nMABEそれはともかく、オブジェクト指向は突き詰めると「言語的」じゃなくなってくるな。言語外の何かを指向している。
0330デフォルトの名無しさん
2015/11/30(月) 23:13:29.51ID:JF8UCarw物理現象って言ってる時点で
物だけどなw
0331デフォルトの名無しさん
2015/11/30(月) 23:26:44.47ID:6KblLTEL文系のアホは知らないかもしらんが、物理では力とか熱とか速度とか扱うんだよ
どこが物だよ
0332デフォルトの名無しさん
2015/11/30(月) 23:40:05.57ID:JF8UCarw物の発熱
物の速度
ついでに物の質量
エネルギーとは物体のry
0333デフォルトの名無しさん
2015/11/30(月) 23:50:39.82ID:waNGyKqN0334デフォルトの名無しさん
2015/11/30(月) 23:52:02.51ID:WElGpwgj0335デフォルトの名無しさん
2015/11/30(月) 23:57:33.71ID:JJB/qb+30336デフォルトの名無しさん
2015/12/01(火) 01:23:14.73ID:2HxO424O無から物に変わるから
newか?
0337デフォルトの名無しさん
2015/12/01(火) 02:40:34.66ID:RG+5ewvCロボットに命令して仕事をさせることをイメージしてるから。
もっと言ってしまえば人間社会での現実の仕事分担がそうなっていて
末端の「チョコバットが20円から30円になりました」みたいな変更は
下層オブジェクトの責任と判断、作業範囲の中に内包されていて
部長がいちいち「チョコバット…20円から30円…と」のように上層の仕事に波及しない。
そこのユニットで情報と判断の波及をストップさせて独立を担保するための
メッセージコマンドによる抽象化。
具体例が知りたければObjective-C辺りを調べりゃガチ勢のやりかたがわかるよ。
0338デフォルトの名無しさん
2015/12/01(火) 03:00:07.68ID:eT3ZeD+F0339デフォルトの名無しさん
2015/12/01(火) 07:16:49.74ID:eT3ZeD+Fそれを「メッセージ」と表現するのは違和感があるな
0340デフォルトの名無しさん
2015/12/01(火) 08:12:57.71ID:q73BSp0rVBScriptでクラス設計を学習し直すと違う世界が見えてくる
0341デフォルトの名無しさん
2015/12/01(火) 08:36:23.49ID:pviAfNpj0342デフォルトの名無しさん
2015/12/01(火) 09:46:57.05ID:71MtHfWW適材適所だ好きなの使え。
0343デフォルトの名無しさん
2015/12/01(火) 12:50:04.27ID:BYRY3bxz手続き型言語はどこまで行っても結局手続きが一番重要だということを
ゆるふわに言ってみてるだけ
なぜなら手続きが相互作用をもたらすから
オブジェクトだけポツンとあっても周りと関わることが無ければ何にもならないことがわかるだろう
そして、結局のところ、相互作用は手続きで記述しなければならない
カプセル化は勉強すれば割と機械的に誰でもできるようなところがあるが
手続きというのは奥が深く、大概のバグは手続きの記述ミスで発生するもの
オブジェクト指向は、個々に着目して記述する風な事を言っておきながら
結局は個々の相互作用の方が重要だということを、同時に言っている
碁を考えてみればよい
石に着目するか、境界に着目するかで、見え方がまるで違う
二つの視点を同時にもっていなければ勤まらない
0344デフォルトの名無しさん
2015/12/01(火) 12:59:33.66ID:BYRY3bxzオブジェクト指向があるといえる
オブジェクト指向という技法の視点で見ればオブジェクトは重要だが
プログラム全体で見れば手続きのもたらす相互作用の方が遥かに問題
その事を暗示するためにオブジェクト指向はメッセージングが重要と言っている
プログラムの本質の手続きに集中するために
それ以外の部分をオブジェクト指向がサポートしている状況
0345デフォルトの名無しさん
2015/12/01(火) 13:09:09.54ID:QTLgm2hp真のソフトウェア工学が開発されるまでの次善の策は、あらゆる要素について極端に遅延結合な
動的システムを使って開発する事だ。これを重要な部分で実際に行ったのは LISP が最初だ。
そして沢山の偉大なアイデアは、70 年代の初期に XEROX PARC で Squeak の祖先である Smalltalk
-- 最初の完全にオブジェクト指向な開発操作環境 -- の発明にも使われた。
「ソフトウェア工学」は矛盾語法か? - アラン・ケイ
http://metatoys.org/oxymoron/oxymoron.html
0346デフォルトの名無しさん
2015/12/01(火) 13:35:44.44ID:BYRY3bxzこれはつまり、あらゆる事を遅延させて、つまりは遅延の最終地点、実行時に何でも解決してしまおう
という代物で、当たり前だが、あらゆることを遅延させれば、その分エラーが分かるのも遅延するわけで
今のソフトウェアのトレンドではないんだよね
型のミスや打ち間違いはコンパイル時に分かったほうが遥かに良い
アランケイの言うことは真に受けないほうが良い
0347デフォルトの名無しさん
2015/12/01(火) 13:49:12.10ID:aM2QGKxt今のトレンドは動的型付けだよ
0348デフォルトの名無しさん
2015/12/01(火) 14:03:09.73ID:BYRY3bxz今は静的型に回帰している
静的型でも型推論やジェネリックがあれば記述性に問題ないことが分かったから
静的型の方がIDEとの相性が良いし、コンパイル時に些細なミスを検出できる
Rubyも3.0で静的型を導入する風なことを言っている(本当に実装するかは定かではないが)
http://gihyo.jp/news/report/01/rubykaigi2014/0002
>ScalaやTypeScript,Dartなど最近生まれた言語はスクリプト言語のような使い方をされながらも静的な型を持っています。
>「悔しいからRubyに静的な型を導入してみようか」
0349デフォルトの名無しさん
2015/12/01(火) 14:11:46.64ID:eT3ZeD+Fというシステムが作られないのは何故?
それがSmalltalkの大きな欠点ではないのかな?
0350デフォルトの名無しさん
2015/12/01(火) 14:31:06.50ID:QTLgm2hp> SmalltalkのようにOS=開発環境
> というシステムが作られないのは何故?
それは逆のような。
どうしてSmalltalkのように(定式化が困難ながらも)うまく動くシステムが他のパラダイムで作られていないのか?かと。
0351デフォルトの名無しさん
2015/12/01(火) 14:36:13.89ID:eT3ZeD+F逆?
あんたは俺と同じことを言っている。
Smalltalkのようなシステムが作られないと。
動く動かないじゃない。事実としてSmalltalkのような
システムが作られないと俺もあんたも言ってるわけさ。
いいものなら真似て作られるはずだよね。
0352デフォルトの名無しさん
2015/12/01(火) 14:36:51.12ID:QTLgm2hpSmalltalkはOSでいうなら、休止状態で運用されているシステムで
1970年代からほんの数回しか再起動されていません。
常に動かしながら拡張されていて、ここまで来ているわけです。
このようなソフトウエアは他に例をみません。
アラン・ケイのメッセージを方便にして遅延・動的結合の重要性に関する主張はそういう意味で説得力があります。
0353デフォルトの名無しさん
2015/12/01(火) 14:46:00.37ID:eT3ZeD+Fだれが言ったのだろうか?
0354デフォルトの名無しさん
2015/12/01(火) 14:49:07.68ID:WjsyHeKQそれだけ使われていないというわけだな。
0355デフォルトの名無しさん
2015/12/01(火) 14:57:42.74ID:QTLgm2hp再起動しないことが偉いのではなくて、
たとえばシステムの根幹に関わる何かを改変しても、
そのまま動かし続けていられる変化への強さが強調されるべき点です。
あと、動的型であることが時代遅れとの指摘があるようですが
動的で遅延結合なシステムが構築できるのであれば、動的型であることにはこだわらないともケイは言っています。
いちおう、念のため。
0356デフォルトの名無しさん
2015/12/01(火) 15:10:20.80ID:eT3ZeD+Fいえ、だから変化ならどんなものでもできるわけで、
再起動しないで変化できることが偉いんでしょう?
0357デフォルトの名無しさん
2015/12/01(火) 15:14:09.69ID:QTLgm2hpOSでいうなら休止状態で連続運用されるこのしくみは1974年ごろのSmalltalk-74で
採用された機構ですが、それから今のSqueakやPharo、あるいは別の進化の道をたどった
VisualWorksといった最近の、しかし直系のSmalltalkまでの長い歴史の中でそれなりの人数には使われています。
なにより、Smalltalk-72をベースにした74から76を経て80までになると
ほぼ別の言語処理系といってもよいくらい変革を遂げてもいます。参考まで。
0358デフォルトの名無しさん
2015/12/01(火) 15:18:44.97ID:eT3ZeD+Fを作るために、OSと開発環境が一体となり、
このOSでは、別の言語を使うことができなくなってしまった。
0359デフォルトの名無しさん
2015/12/01(火) 15:18:52.05ID:QTLgm2hp件の文献でケイも書いていますが、再起動しなくてもよい、という意味には
メモリ上の(あるいはOODBであればストア内に永続化された)オブジェクトを継続利用できる
つまり、システム改変のたびに作り直さなくてよい、ということも含まれています。
0360uy ◆Qawu9.2l1E
2015/12/01(火) 15:22:59.51ID:p3g6QuXB0361デフォルトの名無しさん
2015/12/01(火) 15:26:26.27ID:d/SZPXKTそれは保存形式が標準化されるだけでいい話ですよね?
例えばJSONとか。
0362デフォルトの名無しさん
2015/12/01(火) 15:26:28.74ID:QTLgm2hpもともと Smalltalk はケイのダイナブック向けの暫定OSなので、一体もなにもそのものです。
Smalltalk のようなシステムを、他の言語で作ることは可能だと思いますよ。
ちなみにケイは静的型についても動的遅延結合を実現できればこだわらないと言っていますから
最近はやりのダックタイピングが可能な静的型言語でトライしてみるのも面白いでしょう。
0364デフォルトの名無しさん
2015/12/01(火) 15:28:02.69ID:d/SZPXKT保存形式が変更できないというデメリットが生じた。
Smalltalkったって完璧ではなく、
いろんなものを切り捨ててしまっているんだよ。
その切り捨てたものが、再起動しないことよりも重要だった。
0365デフォルトの名無しさん
2015/12/01(火) 15:28:50.56ID:QTLgm2hpオブジェクトをシリアライズせずにそのまま永続化できる世界もまた面白いものですよ。
0366uy ◆Qawu9.2l1E
2015/12/01(火) 15:30:13.88ID:p3g6QuXB0367デフォルトの名無しさん
2015/12/01(火) 15:30:40.00ID:d/SZPXKT可能だけど、多様性を諦めるしか無いですね。
つまり全部自分自身で作って全部管理できるならば可能ってことですよね。
いろんな人がいろんなソフトを作って、しかも複数のバージョン
(Windows 8と10のような)が同時に稼働するような現在の世の中では、
複雑になりすぎて標準化やら何やらで互換性を切り捨てるような修正ができなくなる。
0368デフォルトの名無しさん
2015/12/01(火) 15:34:42.80ID:pviAfNpj0369デフォルトの名無しさん
2015/12/01(火) 15:45:48.55ID:UT6gApH30370uy ◆Qawu9.2l1E
2015/12/01(火) 15:47:28.37ID:p3g6QuXB自分の頭で計算出来る程度の都合良い"大きな単位(オブジェクト)"でいきなり世界の構造を語りだす
まさにいま
ID:QTLgm2hp
↑
こいつが必死にレスしてる古いパラダイムと同じ
繋げなくて良いものとものを繋ぎ合わせて柔軟性を欠いたシステム
世界をオブジェクトという単位で切り取って表現するというのはそういう事
0371デフォルトの名無しさん
2015/12/01(火) 15:54:04.27ID:UT6gApH3じゃあお前は世界が何で出来てると思ってんだ?
0372デフォルトの名無しさん
2015/12/01(火) 16:12:40.00ID:WjsyHeKQ0373デフォルトの名無しさん
2015/12/01(火) 16:51:09.64ID:D3RTrC4Yもちろん偉大な一里塚であることは認める
0374デフォルトの名無しさん
2015/12/01(火) 16:59:41.64ID:QTLgm2hphttp://phaendal.hatenablog.com/
LISPがそうであるように、古いから無価値と決めつけず学ぶべき点はまだあると思いますよ。
0375デフォルトの名無しさん
2015/12/01(火) 17:14:39.00ID:pviAfNpj余計なものまでモデル化してんじゃねーよ。
0376デフォルトの名無しさん
2015/12/01(火) 17:17:38.51ID:QTLgm2hpこうした意見の多くは、それを言う人のSmalltalkに対する理解不足から来る誤解です。
たとえばRubyのRefinementsの元ネタはSqueak Smalltalkで実験されたClassboxesですし、
PHPで5.4以降に導入されたTraitsもやはりSqueak Smalltalk発の技術です。
いずれも70〜80年代からあったわけではなく、今世紀になってから発案されたり実装が試されています。
Smalltalkの仮想イメージ(システムを構成するオブジェクト群が永続化されている休止状態の保存ファイルのようなもの)の中には、
こういった今も重宝されるノウハウやその基盤がまだ存在するかもしれません。
0377デフォルトの名無しさん
2015/12/01(火) 17:18:57.94ID:d/SZPXKT新しいか古いかは関係ない。
古い言語で言えば、C言語も古いわけで。
価値があるかないかと言ったら、勉強用途として価値はあるだろう。
例えば情報処理技術者のCASL(アセンブラ)みたいに。
実用用途としては、ほとんど使われてないのが事実。
価値が無いとは言っていない。
事実として使われてないと言っているだけ。
0378デフォルトの名無しさん
2015/12/01(火) 17:20:49.12ID:d/SZPXKTそれってSmalltalk自体は進化してないんじゃね?
昔から搭載されていたってだけで、
その昔で止まってしまってるでしょ?
0379デフォルトの名無しさん
2015/12/01(火) 17:26:29.01ID:QTLgm2hpたしかに、Smalltalkシステムは(過去そうであったように、今後変遷を遂げて別の言語に生まれ変われるという
可能性を秘めてはいるものの現状)Smalltalkという言語に限定されているという意味でおっしゃるとおりです。
たたオブジェクト指向の特にメッセージに象徴される動的遅延結合システムをどのように実現し活用するか
という議論においては、Smalltalkにこだわる必要はまったくなくて、たとえばケイらがここのところ
取り組んでいるSTEPSプロジェクトの成果物のように、多様な言語を適材適所でシステムの記述に
使い分けるという方法で多様性とそのメリットを享受することは可能かと思います。
STEPS プロジェクトご紹介その2
http://d.hatena.ne.jp/propella/20111022/p1
0380デフォルトの名無しさん
2015/12/01(火) 17:30:33.11ID:QTLgm2hpまったく使われてない、使うことができないということはないですよ。
最近話題になったところでも、日本でもSmalltalkを使ったこんなスタートアップが名古屋にあります。
http://jp.techcrunch.com/2015/10/01/marketplace-for-construction-machinery-allstocker-raises-100m-jpy-from-gmo-venturepartners/
0381uy ◆Qawu9.2l1E
2015/12/01(火) 17:33:02.61ID:p3g6QuXB何で出来ているか?というのは愚問過ぎる
例えばそれを「uy」としましょう
「uy」から派性したAやBといった概念から「uy」を辿る事は出来る
例えばこの世界にある「オブジェクト指向」という概念や「量子ビット」といった概念から
「uy」を辿る事が可能なので、
それらで世界が出来ているといった勘違いが可能なのです
でもそれは、一体いくつ「uy」から継承がネストしていて、プログラム等でいえばメソッドが追加されてしまった純粋性のない概念なのでしょうか?
それを知っているのは「uy」だけです
この世界にあるすべての概念は「uy」へと通じているので、
料理人は料理を通じて世界を知り、スポーツ選手はスポーツを通じて世界を知ります
誰も「uy」からは逃げられないんだよ
0382デフォルトの名無しさん
2015/12/01(火) 17:38:05.78ID:UT6gApH3世界が派生するんだな?
0383デフォルトの名無しさん
2015/12/01(火) 17:39:33.84ID:BYRY3bxzトラブルの元だからね
0384デフォルトの名無しさん
2015/12/01(火) 17:40:07.03ID:d/SZPXKT> まったく使われてない、使うことができないということはないですよ。
大丈夫。わかってる。
だから、ほとんど使われていないと言った。
君のレスは俺のレスと矛盾してないし、
「まったくというわけではない」というならば、
俺の言ったことが正しいということの補完になってる。
0385uy ◆Qawu9.2l1E
2015/12/01(火) 17:48:38.06ID:p3g6QuXBちなみにNULLという概念の誕生は「uy」にとって想定外でした
相反するんです
「ゼロではなく、そこに何も無い」といった表現は確かに必要です
でも、「この先に何かあるけど決してそれは見えない概念」 = 「uy」であるべきだった
しかしその「ゼロ以外の何か」という居場所をNULLが受け持ったおかげで「uyなんかいらねーよ」という人が出てきた
よく、世界は「無」から生まれたなどという世迷言を言う人はいますが、
本来「NULL」という概念は「無」ではなく「uy」であり、「uy」の代替概念が「NULL」です
0386デフォルトの名無しさん
2015/12/01(火) 17:48:53.72ID:d/SZPXKTそれが止まらないシステムであるかということは別問題なんだよな。
止まらないシステムで、止まってはいけないのはOSじゃなくて、サービスだから。
そういう意味でSmalltalkという実行環境(OS)が止まらないことにさほど大きなメリットはない。
Smalltalkが理論上止まらなくてもハードウェアが故障したらどうなるの?って話。
そして、今の時代、動的遅延結合システムは多数のクラウドによって実現されてる。
各サーバーを一つのオブジェクトとみなして、サーバー単位で入れ替え可能な
システムになってるわけさ。
0388デフォルトの名無しさん
2015/12/01(火) 18:02:38.07ID:tjGT2L+4古いから無価値なのではなく、実用用途としてほとんど使われてないから無価値なのだ。
価値があったとしても、情報処理技術者のCASL程度の勉強用途としての価値しかない…
というふうに>>377を読んだのですが、どうも当方の勘違いだったようですね。失敬、失敬。
0389デフォルトの名無しさん
2015/12/01(火) 18:17:27.81ID:RG+5ewvCnextstep.
現在一般的に知られてる名前はMacOS X及びiOS.
記述言語はObjective-C及びObjective-C++
0390デフォルトの名無しさん
2015/12/01(火) 18:22:54.46ID:d/SZPXKTその通り勘違い。
実用用途として殆ど使われてないから、
実用用途としか価値があるかどうかはわからない。
価値が有るかどうかを判定できるレベルじゃないということ。
0391デフォルトの名無しさん
2015/12/01(火) 19:06:56.95ID:pviAfNpj0392デフォルトの名無しさん
2015/12/01(火) 19:17:06.65ID:d/SZPXKTあー、なるほど。言語レベルでやることじゃなかったことか。
Smalltalkみたいな仕組み、やろうと思えばできるだろうけど
やらないのは、言語よりも下のレベル、マシンレベルで
やることにしたからなんだろうな。
0393デフォルトの名無しさん
2015/12/01(火) 19:32:24.50ID:QTLgm2hp>>345で言いたかったのは、オブジェクト指向で(抽象データ型ではなく)メッセージを引き合いに出した場合、
その本質は動的遅延結合性をどのようにシステムに持たせるか、だということです。
そして使うのは動的型である必要はありません。近年のスマートな型システムも活用できると思います。
短く言うと、あなたは何か時計のような単純なものを作り壊れたら直せる。
しかし大きなシステムでは成長する際や、変化する際の擦り合わせが必要だ。
〈略〉大きなシステムは単純な歯車の機構よりも生態系のように振る舞う。
単純で強力なものの秘密は〈略〉どうすればできるだけ深く「システムについて
考えるか」であり、できるだけ頻繁に「謙虚に考えるか」である。
「ソフトウェア工学」は矛盾語法か? - アラン・ケイ
http://metatoys.org/oxymoron/oxymoron.html
0394デフォルトの名無しさん
2015/12/01(火) 19:34:38.14ID:d/SZPXKT0395デフォルトの名無しさん
2015/12/01(火) 19:42:20.46ID:pviAfNpjピラミッドをバカにしているようだが、とんでもない思い違いかも知れんぞ。
0396デフォルトの名無しさん
2015/12/01(火) 19:44:38.68ID:d/SZPXKT従来のサーバーは、構築したあともソフトウェアの更新や設定変更を繰り返して使って行くのが
一般的だった。特に、物理的なサーバー(コンピュータ)を用意して運用している場合、
新しいサーバーに切り替えるのは容易ではなかった。
大きなシステムでは成長する際や、変化する際の擦り合わせが必要だ。
また、サーバー更新の際は事前にテスト運用するものの、実際に稼働してからトラブルが発生するリスクが伴う。
最近は、クラウドサービスを利用して比較的簡単に仮想サーバーを構築できるようになっている。
そこで、現在稼働しているサーバーとは別に新たなサーバーを構築し、準備ができたら
スパッと切り替える。もしも新しいサーバーに問題があったら、即座に古いサーバーに
戻すという手法が提唱された。この方式を、ブルーグリーンデプロイメントという。
大きなシステムは単純な歯車の機構よりも生態系のように振る舞う。
継続的インテグレーションとは、ソフトウェア開発において、ビルドやテストを頻繁に
繰り返し行なうことにより問題を早期に発見し、開発の効率化・省力化や納期の短縮を図る手法。
ソースコードの追加や更新が行われる毎に、あるいは1日1回など定期的に、プロジェクト全体の
ビルドや各モジュールの単体テスト、変更のあったモジュール間の結合テストなどを実施する。
短いサイクルで頻繁にこれらを実施することで、問題点を早期に発見・修正でき、不具合の原因究明も容易になる。
0397デフォルトの名無しさん
2015/12/01(火) 19:47:00.93ID:RG+5ewvCあの…普通にスマホのアドレス帳を開いたときにアプリが
連絡先データの数を「動的に」読んで、リストオブジェクトの中に
「動的に」名前とアドレスの描かれたボタンオブジェクトを生成するとか
毎日あたりまえに目にしてるはずですが…w
0398デフォルトの名無しさん
2015/12/01(火) 19:52:07.69ID:d/SZPXKTあぁ、めんどくさいから、どっかからコピペしだけだよ。
Smalltalkの目指した世界、停止させずにシステムを拡張する世界は、
クラウドとDevOpsやCIという開発手法によって実現されたなぁと
しみじみ思ってね。
0399デフォルトの名無しさん
2015/12/01(火) 19:59:22.29ID:/dKATn0Lの部分って昔のハードウェア事情とかなり密接関わってると思う
今だと「Skylakeで何もかも十分ですやん
インタプリタ形式の言語でもいいですやん
それで単に十分ですやん」って彼も言うと思う
0400デフォルトの名無しさん
2015/12/01(火) 20:22:49.76ID:D3RTrC4Yそんなダウンタイムが長いSmalltalkシステムって聞いたことなくて、調べてもそもそも利用ケース自体がなかなか見つからなかった
かなり根本から表層までSmalltalkな環境について、後付け拡張や掘り下げた部分リプレースが自由自在ってことなら分かるのだけどね
0401デフォルトの名無しさん
2015/12/01(火) 20:23:27.08ID:D3RTrC4Y0402デフォルトの名無しさん
2015/12/01(火) 20:25:49.81ID:eT3ZeD+Fそれ、動的に取り込まれているのは単なるデータだから。
0403デフォルトの名無しさん
2015/12/01(火) 20:35:14.89ID:S8usJREuそりゃそんなこと言い出したら、何でもデータだよ w
そんな風にしか考えられない人には OOP は向いてない
素直に VBA とか COBOL でもやってなさい
0404デフォルトの名無しさん
2015/12/01(火) 20:42:07.76ID:eT3ZeD+F>>391をよく読むがいい
0405デフォルトの名無しさん
2015/12/01(火) 20:43:21.82ID:pviAfNpjよく考えよう
0406デフォルトの名無しさん
2015/12/01(火) 21:23:26.79ID:ANDpHpim0407デフォルトの名無しさん
2015/12/01(火) 21:28:45.78ID:CZwn6lvg0408デフォルトの名無しさん
2015/12/01(火) 21:57:59.42ID:eT3ZeD+F実行時に与えられるってだけだろ。そんなののどこが動的なんだよ?
動的ってのは実行時に与えられたデータを再び言語の欠片として解釈して実行することじゃないのか。
0409デフォルトの名無しさん
2015/12/01(火) 22:21:28.35ID:RG+5ewvCいいえ。
Objective-C(iOS/MacOSX)ではコンパイルされたクラスの実体が
動的にメモリ上に生成されています。
クラスとして設定された機能をすべてを動作時に持っていないと
まさに動的結合の実行時決定の関係で問題が生じるからです。
ボタンが状況によって3個4個と変わる場合
クラスの基本的ふるまいを記述したNSObjectを継承してる
ボタンオブジェクトはbutton = [[UIButton alloc]init]という命令の形で
メモリアロケーションをとれ、イニシャライズせよという"メッセージング"で
インスタンスを生成します。
目の前のiPhoneアプリはそうやって動いてるし、プログラマーもそうプログラムしています。
なんでObjective-Cって言ってたかつったら、Objective-Cは
単にこれsmalltalk+Cだと言われるぐらいsmalltalkのメッセージジングと
クラス取り回しをそのまま継承したものだからですよ?
メッセージングがもうなくなった技術みたいに語るとか
iPhoneだらけの2015年になに言ってんだおまえ。
0410デフォルトの名無しさん
2015/12/01(火) 22:21:54.13ID:BYRY3bxz別にプラグインのようなものを否定しているわけではない
しかし、プログラムの細かいパーツまですべてプラグインの断片で構築するということは
通常行われていないことを考えると、いろいろと問題があることが分かるだろう
0411デフォルトの名無しさん
2015/12/01(火) 22:32:26.19ID:eT3ZeD+F俺が言ってるのは「連絡先データ」の事だボケ
それにiPhoneのことなんて知らんわ
0412デフォルトの名無しさん
2015/12/01(火) 22:35:27.51ID:eT3ZeD+FiPhoneアプリではなく「連絡先データ」が本当に動的データなんだな?
0413デフォルトの名無しさん
2015/12/01(火) 22:37:49.05ID:D3RTrC4Yポージングの代わりにメソッド交換を用意してるあたりは動的言語のお化けのままではあるが、続いて発表したSwiftは完全に今時のいいどころ取り言語になったし
で、あらためて>>397見ると「Smalltalk+c」である必要性はなにもないんだよな
それこそJavaでもやってる事だ。動的かどうかよりバインドの仕組みがライブラリ提供されてるかどうかであって、UIKitにSmalltalkの世界はない
そもそもApple製品のかなり高次なところまで支えてるCoreFoundationなんかは、純粋にCによるOOPだ
0414デフォルトの名無しさん
2015/12/01(火) 22:40:20.38ID:ANDpHpimボタンオブジェクトの生成には全く触れないのな w
0415デフォルトの名無しさん
2015/12/01(火) 22:47:02.23ID:BYRY3bxz遅延ロードはまるで関係ない
0416デフォルトの名無しさん
2015/12/01(火) 22:50:05.10ID:eT3ZeD+Fそれは悪いけど俺の発言のきっかけは>>402であって、>>397に対するコメントだ。
アプリが動的な振る舞いをするのはあたりまえじゃないか。
ボタンを生成するのもアプリがやってるんだろ?それがどうしたんだよ。
0417デフォルトの名無しさん
2015/12/01(火) 23:01:40.26ID:d/SZPXKTその大規模システムはクラウドのおかげで再起動無しで
プログラムを差し替えることの意味が無くなったよね。
どっちみちハードウェアトラブルで再起動は免れない。
なので仮想マシンをたくさん用意して、個々のノードが
再起動しつつもシステム全体は止まることなく動作する。
これはまさに生物に動きそっくりで、幾つかの細胞が
死滅しつつも再生をすることで生命活動をしているのと同じ。
止まらずに動かさなければいけないという方向性が間違いだった。
0418デフォルトの名無しさん
2015/12/01(火) 23:02:49.11ID:ANDpHpim> ボタンを生成するのもアプリがやってるんだろ?それがどうしたんだよ。
マジで手続き型の発想しかできないんだな w
どうせ爺いだろ?
今更オブジェクト指向理解するなんて無理だから、おとなしく COBOL でもコーディングしてろよ
0419デフォルトの名無しさん
2015/12/01(火) 23:12:47.68ID:D3RTrC4Yそういう可用性の話になると、もうアプリ実装言語の特性とか関係なくなっちゃうよねえ
Dockerコンテナをどうやってラクに自動で冗長化しようか、というスレ違いな話というかw
0420デフォルトの名無しさん
2015/12/01(火) 23:25:33.24ID:eT3ZeD+F具体的な反論ができない婆は死ぬがよい
0421デフォルトの名無しさん
2015/12/01(火) 23:32:30.59ID:ANDpHpimいや、発想の問題だから
具体的に言っても理解できないでしょ w
0422デフォルトの名無しさん
2015/12/01(火) 23:36:30.68ID:eT3ZeD+F『コンパイルされたクラスの実体が動的にメモリ上に生成されています。』とも言っているので、連絡先データがそういう実体なんだろ?
0423デフォルトの名無しさん
2015/12/02(水) 00:02:13.15ID:idJaUIFX中学生なのか還暦越えどっち由来のバカの壁だか知らんが
とりあえず言われてることを正しくイメージできてないことはわかった。
0424デフォルトの名無しさん
2015/12/02(水) 00:06:22.44ID:QJpsouE4ごまかすなよ
話の流れはそうなっているだろうが
0425デフォルトの名無しさん
2015/12/02(水) 00:31:12.53ID:mFwhNXbQない。
もうこれ「せんそうってひとをころすことだろ?」って言ってる小学生に
そうじゃないって説明してるみたいになってんぞ?
0426デフォルトの名無しさん
2015/12/02(水) 00:43:26.91ID:QJpsouE4じゃあ>>409冒頭の「いいえ」ってのはその意味の「いいえ」だったのか?
>>402に対して「いいえ」と答えていたが?
0427デフォルトの名無しさん
2015/12/02(水) 01:22:44.43ID:tY3PsYOb0428uy ◆Qawu9.2l1E
2015/12/02(水) 07:41:25.99ID:znqtbEKc0429デフォルトの名無しさん
2015/12/02(水) 07:43:24.62ID:UkYZlpUxそんなレス残してるなら、早く再帰関数板の問題解いてこいよ、能無しクズuy。
0430デフォルトの名無しさん
2015/12/02(水) 08:34:15.23ID:1aVlPH12デシリアライズと呼ぶべきなのか。
0431デフォルトの名無しさん
2015/12/02(水) 11:41:21.05ID:8RJQTOknobj-cの文法上メッセージ式の形を取ってるだけ
デシリアライズに当たる処理はないね
0432デフォルトの名無しさん
2015/12/02(水) 11:46:14.09ID:1aVlPH12そうなんですか。
読み込まれてるデータはnewの引数ってことですか?
0433デフォルトの名無しさん
2015/12/02(水) 11:51:22.45ID:1yjNHDc1コードを自分で最適化するのが難しいよね
0434デフォルトの名無しさん
2015/12/02(水) 12:08:15.80ID:8RJQTOkn元の話を追うと、アドレスブックデーターベースから取得してテーブルビューソースに適用するという流れになるかと。Androidのリストビュー、内包するボタンへの適用と構図は一緒すね
要するにobj-cも普通に作ると他の言語と何も変わらない感じになって、ただメッセージ式という記法を取ってるという事
もちろんobj-c自体に特徴がないわけではなく、c/c++のネイティブバイナリを吐きつつ、obj-cの中間ランタイムを使った動的処理にも強いという変態さはあるんだけども。
メッセージ記法もc/c++の文法を壊さず追加で言語機能を混ぜ込むという無茶をやってのけてるあたりはすごいことやってるしw
0435デフォルトの名無しさん
2015/12/02(水) 12:38:55.73ID:mFwhNXbQJavaがObj-Cとかから持ってきたのがメソッドだからね。ドット構文は後でObj-Cの方に逆輸入された。
0436デフォルトの名無しさん
2015/12/02(水) 13:26:12.15ID:xfNgImPxC++から持ってきたことになるよw
0437デフォルトの名無しさん
2015/12/02(水) 13:40:22.41ID:8RJQTOknJavaなんて1995年だから、目ぼしい言語はだいたい参考にしただろうし
0438デフォルトの名無しさん
2015/12/02(水) 13:43:41.27ID:xfNgImPx別にお前がオリジナルでもなんでもないんだからさ。
0439デフォルトの名無しさん
2015/12/02(水) 14:02:44.47ID:mFwhNXbQ継承による再利用こそが"オブジェクト指向"である!ってやったせいで
現代まで尾をひく混乱を引き起こしてるんじゃないの。
「メソッドとは構造体に内部操作するための関数をつけたものだ」的な
まるで"自動車は馬車から馬を外し操舵機をつけたものだ"バリの解説が出てくるような…
0440デフォルトの名無しさん
2015/12/02(水) 14:24:42.73ID:1aVlPH12尾は引いてないでしょ。もうさすがに。
0441デフォルトの名無しさん
2015/12/02(水) 14:48:33.62ID:/oudx+3q0442デフォルトの名無しさん
2015/12/02(水) 16:21:01.70ID:tY3PsYObobj.methid()っていう呼び出しスタイルかもしれない
関数はfunc(obj)と書くのにメソッドはobj.method()と書くのは
統一性が無くてメタプログラミングの観点からは面倒になってきた
そこで今更になって、どちらの表記でも呼び出せるようにしようという動きがあるみたい
統一関数呼び出し記法とか言うらしい
https://ezoeryou.github.io/blog/article/2015-07-02-2015-04-pre-Lenexa-N4470-N4482.html
> 統一関数呼び出し記法の提案。
> x.f(y)に対して、もし呼び出しが妥当ではない場合、f(x,y)を試みる。
> p->f(y)に対して、もし呼び出しが妥当ではない場合、f(p,y)を試みる
> f(x,y)に対して、もし呼び出しが妥当ではない場合で、xに対して->が定義されている場合、x->f(y)を試みる。そうでなければx.f(y)を試みる。
0443デフォルトの名無しさん
2015/12/02(水) 16:30:40.59ID:1yjNHDc1同じ考えの人がすでにいたとは驚いた
でもメタプログラミングではオブジェクトが引数の後ろについてる場合が多いから
それだと既存のライブラリーが対応しないんだよな
0444デフォルトの名無しさん
2015/12/02(水) 16:48:32.28ID:xfNgImPxPerlでは
new Foo と Foo->new のどちらでも呼び出せる。
0445デフォルトの名無しさん
2015/12/02(水) 16:49:21.03ID:xfNgImPxただの1関数である。よって
foo Foo と Foo->foo のどちらでも呼び出せる。
0446デフォルトの名無しさん
2015/12/02(水) 19:33:32.19ID:tY3PsYOb一人二人が適当に提案しただけの代物というわけではなく
C++の偉い人のBjarne StroustrupがC++17で入るかもしれない、とドラフトで挙げた機能の一つだ
http://cpplover.blogspot.jp/2015/05/infoqc17bjarne-stroustrup.html
だからC++17は本当にそうなるかもしれない
0447デフォルトの名無しさん
2015/12/02(水) 19:38:16.86ID:xfNgImPx0448デフォルトの名無しさん
2015/12/02(水) 19:43:11.25ID:1aVlPH120449デフォルトの名無しさん
2015/12/02(水) 19:50:07.27ID:FJJB5UGrSmalltalkは70年代に10年かけて-72(全部リーダーマクロ)、-76(メッセージ式+一部マクロ)、
-80(全部メッセージ式で一部インライン展開)とさんざん試行錯誤して結局今のかたちに
落ち着いた経緯があるからなぁ…。いまさら変えるとして何?
0450デフォルトの名無しさん
2015/12/02(水) 20:00:55.87ID:xfNgImPx0451デフォルトの名無しさん
2015/12/02(水) 20:08:14.26ID:FJJB5UGr可読性は英語が読み書きできる人間であれば十分高いし、
生産性は他の言語の2〜3倍は優にあるからもういいよ。
https://smalltalkrenaissance.wordpress.com/2015/02/16/smalltalks-proven-productivity/
シンタックスシュガーはもうちょっとあってもいいかもね。
0452デフォルトの名無しさん
2015/12/02(水) 21:18:47.85ID:xfNgImPx0453デフォルトの名無しさん
2015/12/02(水) 21:40:11.65ID:/IlXJQs0確かに。
バイアスのかかり具合はキミの言う可読性だの生産性だのとたいして変わらんから、
結局のところどっちも参考にならなさそうだ。
0454デフォルトの名無しさん
2015/12/02(水) 21:42:13.84ID:ZMObsz9q0455デフォルトの名無しさん
2015/12/02(水) 22:58:04.54ID:XxNTxugt0456デフォルトの名無しさん
2015/12/02(水) 23:10:52.42ID:3P59l0JHわかったというやつは実際なにもわかってない
0457デフォルトの名無しさん
2015/12/02(水) 23:11:14.26ID:xfNgImPx俺もそう思う。
0458デフォルトの名無しさん
2015/12/02(水) 23:47:00.23ID:XSP7Cjkqまた一歩 c++ は糞化すると。。
0459デフォルトの名無しさん
2015/12/02(水) 23:50:25.67ID:1aVlPH120460デフォルトの名無しさん
2015/12/03(木) 00:07:13.33ID:AjKMzEFB0461デフォルトの名無しさん
2015/12/03(木) 00:23:41.84ID:oCcO9mV30462デフォルトの名無しさん
2015/12/03(木) 04:29:14.15ID:PFXaBZth0463デフォルトの名無しさん
2015/12/03(木) 08:48:13.06ID:FO9WIiRD失敗プロジェクトなんて幾らでもあるけど、別の言語で再開発したら上手くいった話は面白い
そのプロジェクトでは、まさにVB以下の生産性だったわけだよね
0464デフォルトの名無しさん
2015/12/03(木) 09:29:19.69ID:f0dL0w0J0465デフォルトの名無しさん
2015/12/03(木) 09:45:01.12ID:VTR6VCGQあれは利益を他社にもってかれそうになった日本IBMがヘソ曲げてぶち壊しにして落としどころがVBだったってだけだろう。
Smalltalk(より正確にはGemStoneのOODB)じゃなければなんでもよかった。
http://d.hatena.ne.jp/kwatch/20080702/1215014534
Smalltalkで有名な開発失敗と言ったらケント・ベックのクライスラーの財務関係のやつじゃね。
XP駆使してドヤ顔進行したけど、結局、COBOLを置き換えられなかったというあれ。
http://bliki-ja.github.io/C3/
0466デフォルトの名無しさん
2015/12/03(木) 10:25:19.82ID:f0dL0w0Jちょっと記憶がおぼろげだ。
0467デフォルトの名無しさん
2015/12/03(木) 10:52:44.48ID:5Su1KhDSそのリンク先は情報が断片的すぎる
こっちのが良くわかるよ
http://drillbits.tumblr.com/post/15664104845/%E4%B9%9D%E5%A4%A7%E7%97%85%E9%99%A2%E3%81%A4%E3%81%BE%E3%81%9A%E3%81%8D%E3%81%AE%E7%9C%9F%E7%9B%B8-%E8%A6%81%E4%BB%B6%E5%AE%9A%E7%BE%A9%E3%81%AE%E7%94%98%E3%81%95%E3%81%8C%E5%B0%BE%E3%82%92%E5%BC%95%E3%81%8F
0468デフォルトの名無しさん
2015/12/03(木) 11:12:49.89ID:BNEsovgQ0469デフォルトの名無しさん
2015/12/03(木) 11:33:30.49ID:f0dL0w0J0470デフォルトの名無しさん
2015/12/03(木) 11:36:09.92ID:+bg8U2A+0471デフォルトの名無しさん
2015/12/03(木) 11:55:56.00ID:f0dL0w0JおまえがSmalltalkになるんだよ。
0472デフォルトの名無しさん
2015/12/03(木) 12:07:28.61ID:PdOTTTXTバカにすんな!Smalltalkくらいさらっと書いたるわい
http://ideone.com/EYsLTE
0473デフォルトの名無しさん
2015/12/03(木) 12:34:14.88ID:mlsAipyfhttp://ideone.com/cY5KKB
0474uy ◆Qawu9.2l1E
2015/12/03(木) 13:04:53.48ID:z2raHlbzぼくは、こういうの もう良いです^^;
0475デフォルトの名無しさん
2015/12/03(木) 13:18:56.66ID:+bg8U2A+Lispの入門書2回もよんだけど全部忘れた
0476デフォルトの名無しさん
2015/12/03(木) 18:19:44.13ID:wy9q+Wdq0477デフォルトの名無しさん
2015/12/03(木) 18:55:36.42ID:oCcO9mV30478デフォルトの名無しさん
2015/12/03(木) 19:04:17.99ID:W6SHvClGたまにしか書かないシェルスクリプトとかすぐ忘れる
0479デフォルトの名無しさん
2015/12/03(木) 19:05:56.07ID:bPLvcOxvRubyに直訳するとこんな感じか?
http://ideone.com/apeubF
0480デフォルトの名無しさん
2015/12/03(木) 19:26:04.76ID:z7gVyZ5rコード自体に意味があるんじゃなくて
このネタを知らない人を足切するためのものなんだから。
0481デフォルトの名無しさん
2015/12/03(木) 20:00:05.85ID:dIBnSjdv0482デフォルトの名無しさん
2015/12/03(木) 20:00:16.24ID:fkQyPregむしろ、末端オブジェクトが外界の矛盾だらけのふるまいを自身の責任で処理することで
上位への伝達が抽象化されてシステムがオブジェクト指向だけで完結するのに
副作用がーって内部ロジックの無駄な堅牢性にこだわる妙な一派は
「副作用があるから『外の現実世界』の方を変えろ!」って最後は言い出すのかなーと常々。
0484デフォルトの名無しさん
2015/12/03(木) 20:15:34.68ID:z7gVyZ5r0485デフォルトの名無しさん
2015/12/03(木) 20:17:16.04ID:z7gVyZ5rXPは最高のOSだな!
0486デフォルトの名無しさん
2015/12/03(木) 20:22:45.72ID:+bg8U2A+3と5で割り切ない数を配列に初めから入れ置くというのが
もっとも正しいんだよな
0487デフォルトの名無しさん
2015/12/03(木) 20:39:52.11ID:k2Nrngjkおまえそれ、たとえ冗談だったとしても言ったらドン引きされるレベルだぞ…
0488デフォルトの名無しさん
2015/12/03(木) 21:04:21.60ID:z7gVyZ5r0489デフォルトの名無しさん
2015/12/03(木) 21:14:49.13ID:W6SHvClG笑いどころがあるなら説明してくれよ
0490デフォルトの名無しさん
2015/12/03(木) 21:49:29.57ID:4rUKwdGH皮肉にもなってないんだよな
0491デフォルトの名無しさん
2015/12/03(木) 23:29:30.20ID:V6LAtq6hどゆこと?
0492デフォルトの名無しさん
2015/12/04(金) 00:29:03.13ID:hYxOV08jメモリ効率は下がるが「では次は100万までお願いします」と言われてもFizzBazz程度なら屁でもないなと思った
普通に実行時メモリ効率を最小化するように書いても「FizzBazz程度」の話だけども
0493デフォルトの名無しさん
2015/12/04(金) 07:33:15.91ID:8RLdjU2U配列に
string a={1,2,buzz,4,fuzz,....,fuzz};
こんなかんじ
0494デフォルトの名無しさん
2015/12/04(金) 08:30:24.26ID:0uyUSAF40495デフォルトの名無しさん
2015/12/04(金) 14:10:22.91ID:YEfoDPnk0496デフォルトの名無しさん
2015/12/04(金) 15:52:52.42ID:8RLdjU2U初心者がやるのとは違うんだよ
0497デフォルトの名無しさん
2015/12/04(金) 16:27:28.18ID:YEfoDPnk余りの計算なんか一瞬で出来るのにメモ化する意味がない
0498デフォルトの名無しさん
2015/12/04(金) 16:33:41.03ID:DVlNZsBTキャッシュ考えろ馬鹿
0499デフォルトの名無しさん
2015/12/04(金) 16:41:07.14ID:8RLdjU2Ubuzzfuzz問題とはとは100までのbuzzfuzzのリストを作ることだよ
俺のやり方だと計算する前に初めから出来ているということだから
計算量は0なわけ
0500デフォルトの名無しさん
2015/12/04(金) 16:53:42.79ID:YEfoDPnk0501デフォルトの名無しさん
2015/12/04(金) 16:56:26.01ID:DVlNZsBT0502デフォルトの名無しさん
2015/12/04(金) 17:24:07.87ID:v6cmpHJC0503デフォルトの名無しさん
2015/12/04(金) 17:25:44.67ID:v6cmpHJC0504デフォルトの名無しさん
2015/12/04(金) 19:02:24.26ID:abMxFNxB0505デフォルトの名無しさん
2015/12/04(金) 19:49:40.30ID:v6cmpHJC0506デフォルトの名無しさん
2015/12/04(金) 20:10:54.36ID:aSdPuQokあと電球のヒモの影を追い回しててつい遊んでた
いつまでも取れずストレスだったんだろうな、悪いことした
0507デフォルトの名無しさん
2015/12/05(土) 12:05:35.64ID:kPO9yvRD0508デフォルトの名無しさん
2015/12/05(土) 12:49:36.07ID:g0FYSvJL0509デフォルトの名無しさん
2015/12/07(月) 16:16:53.98ID:wr11zZ6x0510デフォルトの名無しさん
2015/12/08(火) 01:34:04.92ID:P4pWRW2p当人が知識足りないからマジで議論展開されると
立てたバカがついてけないという一連のクソスレ群
0511デフォルトの名無しさん
2015/12/08(火) 07:48:27.05ID:yfzIYMuc0512デフォルトの名無しさん
2015/12/08(火) 08:02:36.12ID:rWGldP9u0513デフォルトの名無しさん
2015/12/08(火) 08:33:16.61ID:W1o0a1vT用語の統一をしないと不毛だが、言語を越えて通用するものは少ないのかね?
0514デフォルトの名無しさん
2015/12/08(火) 15:07:32.47ID:XWTC8s4u0515デフォルトの名無しさん
2015/12/08(火) 15:11:27.59ID:W1o0a1vT知らんけど、JavaやC++で出来るようなことを動的とは言わんよな
0516デフォルトの名無しさん
2015/12/08(火) 15:38:18.99ID:XWTC8s4u実行時にコンパイルすることは出来ない。
動的言語はできる。
0517デフォルトの名無しさん
2015/12/08(火) 16:05:11.96ID:P4pWRW2p0518デフォルトの名無しさん
2015/12/08(火) 16:07:05.10ID:DoKjgXRa0519デフォルトの名無しさん
2015/12/08(火) 16:11:12.88ID:P4pWRW2pアタッチメントを差し替えるみたいに切り替えて
動作したまま違う動作をするクラスになるぐらいはできるねぇ。
0520デフォルトの名無しさん
2015/12/08(火) 16:13:31.49ID:65xd0bro0521デフォルトの名無しさん
2015/12/08(火) 17:46:07.82ID:DoKjgXRaそんなのJavaでもできるし
0522デフォルトの名無しさん
2015/12/08(火) 17:58:44.37ID:ZssUlu9Rまあ普通できるわな、それぐらい。
0523デフォルトの名無しさん
2015/12/08(火) 17:58:48.23ID:W1o0a1vTその説明は"属する"とは意味が全然違う
0524デフォルトの名無しさん
2015/12/08(火) 18:07:21.80ID:cOLkCVz/そして、単純な話、動的言語でコンパイルしたコードがそういう動作してんだから
アセンブラで人が一からコードゴリゴリ書いても動的動作できるに決まってるし。
関数とかクラスとかメソッドという便利機能が言語に備わってるかだけの話なんだが
理解できてるか?
0525デフォルトの名無しさん
2015/12/08(火) 18:13:13.18ID:Egvwb8wm型をハードコーディングしてないってこと。ポインタがあればプログラムはその型が分らなくても、
Create()やNewできちゃう。あるいは型名をあとから与えられてもNewできちゃう。
ほんとここは素人ばかりだなぁ。
0526デフォルトの名無しさん
2015/12/08(火) 18:19:15.59ID:ZrcjdAX/0527デフォルトの名無しさん
2015/12/08(火) 18:23:08.09ID:cOLkCVz/親クラスと強力に結びついてしまうため安易な継承そのものが最近は推奨されていない。
単にカプセルの中で使用するだけで継承しなくても機能は使えるから。
0528デフォルトの名無しさん
2015/12/08(火) 18:23:52.00ID:Egvwb8wmコーディングする時点で型を知らなくていいんだよ。コードにNewする型を書いてたら静的生成。
0529デフォルトの名無しさん
2015/12/08(火) 18:30:35.55ID:cOLkCVz/…あったなぁ…受け渡し型が強力に縛られる言語方面からの
「動的ってのはクラスの型が自由ってことだよ!」って謎解説…
もともとクラスに型がないのが普通な言語からすると
なんで"型"なんて特殊用語が出てくるんだ?って感じだったけど。
受け渡しを縛るために型を指定する記法も文法上設定されてはいるけどw
0530デフォルトの名無しさん
2015/12/08(火) 18:35:37.88ID:DoKjgXRaすげ替えることができる言語ってあるの? PythonとかCLOSとかはできそうなんだが探せなかった。orz
0531デフォルトの名無しさん
2015/12/08(火) 18:42:06.76ID:Egvwb8wm昔から動的生成はそう定義して使われてる。
定義されてるにも関わらず不勉強な奴が妄想して謎解説とか言い出して、混乱させてるだけ。
だいたい型のない言語に動的生成、静的生成なんて概念あるのかね? 型がないのに。
キミのいうその動的生成、静的生成の概念がある型のない言語とはなんだね?
0532デフォルトの名無しさん
2015/12/08(火) 18:47:01.57ID:DoKjgXRaどうやらRubyはevil.rbという奥の手を使えばできるらしい。
http://marc.info/?l=ruby-talk&m=116012144601794
0533デフォルトの名無しさん
2015/12/08(火) 18:56:53.32ID:ZrcjdAX/動的(dynamic)は単に実行時処理、静的(static)は狭義ではコンパイル時に決定して確保されるものを差す言葉じゃないのかな
より広くは、実行時に変更されない要素か。静的htmlとか。
動的生成なんて実行時生成という意味にしか聞こえないし、ぐぐってもそんな感じだよ
動的型付け言語、静的型付け言語での話とごっちゃにされると意味不明すぎてかなわん
0534デフォルトの名無しさん
2015/12/08(火) 19:01:21.88ID:DoKjgXRaPythonもふつーにできたわ。こりゃどんな言語でも(動的言語なら)楽勝だな。
http://ideone.com/TFd9Hn
0535デフォルトの名無しさん
2015/12/08(火) 19:11:00.66ID:9ML4qWmN0536デフォルトの名無しさん
2015/12/08(火) 19:22:32.23ID:NMHe7TFl適当なコードで良い時はダックタイピングが楽
0537デフォルトの名無しさん
2015/12/08(火) 20:15:29.00ID:ZssUlu9R0538デフォルトの名無しさん
2015/12/08(火) 20:34:58.52ID:NMHe7TFl(笑)
0539デフォルトの名無しさん
2015/12/08(火) 20:41:02.45ID:Egvwb8wm静的生成でコンパイル時に型を決定してもメモリ確保、オブジェクト生成されるのは実行時だろ。
つまりコンパイル時に型が決定しているか、してないかの違いだ。
0540デフォルトの名無しさん
2015/12/08(火) 20:59:15.90ID:4cJ0X+3Rコンパイル時に●が決定しているか、してないかの違い
「型に限らず」だ
0541デフォルトの名無しさん
2015/12/08(火) 21:00:12.73ID:ZrcjdAX/だから型は関係ないんだって
static memory allocationと言えばコンパイル時だし、それこそ実行時確保=動的確保の事でしょ?
0542デフォルトの名無しさん
2015/12/08(火) 21:03:59.04ID:W1o0a1vT0543デフォルトの名無しさん
2015/12/08(火) 21:08:19.34ID:Egvwb8wmメジャーなオブジェクト指向言語、クラスライブラリのオブジェクトの動的生成の仕様を見てもどれも「型」のことだが、
型に限らずと説明している言語はなんという言語だね?さっきの知ったか馬鹿も逃げて答えないし。
0544デフォルトの名無しさん
2015/12/08(火) 21:17:51.60ID:P4pWRW2pそのクラスそのものが動的にインスタンス生成されるし
クラスの構造自体もやりたきゃ実行時に変化させられるんだから
よくわかってない子がプログラムについてどういうイメージと理解をしてるのかが謎
0545デフォルトの名無しさん
2015/12/08(火) 21:40:36.10ID:Egvwb8wm0546デフォルトの名無しさん
2015/12/08(火) 21:58:23.30ID:v8fEJfJs>>524
0547デフォルトの名無しさん
2015/12/08(火) 22:32:41.97ID:ZrcjdAX/0548デフォルトの名無しさん
2015/12/08(火) 23:15:15.25ID:XWTC8s4u> コーディングする時点で型を知らなくていいんだよ。コードにNewする型を書いてたら静的生成。
型を知らないで、どうやってオブジェクトに
そのメソッドがあるって認識するの?
変数には型を書いてないだろうけどさ、
コードはこのオブジェクトはこのメソッドと
このメソッドがあるということを前提として書くわけでしょう?
それって型を意識しているのと何が違うの?
0549デフォルトの名無しさん
2015/12/08(火) 23:37:29.66ID:FKC63taKこういうOOPの切り分け、まったく理解できないクチなんじゃない?
http://blog.kokuyouwind.com/archives/1189
0550デフォルトの名無しさん
2015/12/08(火) 23:49:09.91ID:CeuzkA+cメソッドがなければ例外が出る。
それを考慮してれば型は気にしなくて良い。
0551デフォルトの名無しさん
2015/12/08(火) 23:49:38.99ID:ZrcjdAX/だよなー
そこだけ切り取ればそんなん型推論でいいしな
動的静的って言葉を各々いろんなスキームで説明なく使ってて、しかも各々が思い入れ込めてて理解し合えてない感じだなw
0552デフォルトの名無しさん
2015/12/08(火) 23:54:17.38ID:ZrcjdAX/おいおいwww
そっちにブレると収拾つかんし、そういう話じゃないだろ
それにその発言だけだと、結局例外出さずに動かすには気にする必要があるわけでしょうに。説明になってない
そういう迂闊な発言からテストすれば良いんだ云々の話になられても困るし
0553デフォルトの名無しさん
2015/12/08(火) 23:54:58.64ID:XWTC8s4uいや、だから例外出るならば動かないってことなので、
そのオブジェクトの型は、コードが期待する型と
互換性がないってことでしょう?
渡せりゃいいって問題じゃない。
動かなければ意味が無い。
0554デフォルトの名無しさん
2015/12/08(火) 23:58:52.92ID:4cJ0X+3Rまさか動的型が話題になっているなんて。
0555デフォルトの名無しさん
2015/12/08(火) 23:59:52.92ID:XWTC8s4u「コーディングする時に型を知らなくていい」って事にならない?
なぜならfooメソッドとbarメソッドがある型なら
どんな型でもいい=型を知らなくていいということならば、
Javaだってfooとbar(があるインターフェース)を
継承した型なら、どんな型でもいいわけで。
0556デフォルトの名無しさん
2015/12/09(水) 00:00:55.63ID:pqe3smnr「継承した型なら、」って条件はかなり大きいと思うんだが。
0557デフォルトの名無しさん
2015/12/09(水) 00:02:39.55ID:ZwktDk40だってメソッドがなければ例外が出るじゃん?
それじゃ意味ないよね?
動的型だって、メソッドがなければ正しく動かないわけで
いけないわけで。
メソッドが1個しかないインターフェースを
継承してるのと何が違うの?
0558デフォルトの名無しさん
2015/12/09(水) 00:08:41.42ID:Nwi0kic/そういやObjective-Cの基底クラスにはクラスに問い合わせると
自分が受けられるメッセージ一覧を返す機能がついてたな。
0559デフォルトの名無しさん
2015/12/09(水) 00:18:03.56ID:ZwktDk40○○型を継承とコードに書く必要があるか?
・静的型・・・書く必要がある
・動的型・・・書かなくてもいい。
※動的型はちょっとだけタイピング数が減る
正しく動作させるには、指定されたメソッド(compareメソッド)を実装する必要があるか?
・静的型・・・実装する必要がある
・動的型・・・実装する必要がある
※どちらも同じ
ソート関数は渡された配列のオブジェクトにcompareメソッドがあると意識しているか?
・静的型・・・意識している
・動的型・・・意識している
※どちらも同じ
compareメソッドがなければどうなるか?
・静的型・・・コンパイル時点でエラーがわかる
・動的型・・・実行しないとエラーがわからない
※動的型はエラーに気づくタイミングが遅い
正しく動作するためには、メソッドAとBとCが必要です。と全部列挙するのが面倒くさい
・静的型・・・○インターフェースを実装してくださいと言い換えられる
・動的型・・・メソッドAとBとCが必要ですと書かなければいけない
※動的型はコメントを詳しく書く必要がある。
やっぱりこの点では動的型のほうがデメリットが多いなぁ。
0560デフォルトの名無しさん
2015/12/09(水) 00:19:11.82ID:PAqE7lrNどうしてもやんなきゃいけないときに限った話だと、煩雑なリフレクションに頼らざるを得ない静的型系と、さらっとできる動的型の差は理解出来る
0561デフォルトの名無しさん
2015/12/09(水) 00:20:04.19ID:PAqE7lrN0562デフォルトの名無しさん
2015/12/09(水) 00:22:21.20ID:ZwktDk40Javaだと、class.getDeclaredMethodsだね。
静的型だと実行時に型情報はなくても良いものだったから
パフォーマンスのために保存していない情報で、
従来は取得できないものだった。
今はあったら便利ってことで実行時型情報を
リフレクションと呼ばれるカテゴリの関数で
取得できるようになってる。
少し物々しくなるけど、今ではほとんどの言語で
メソッド一覧は取得可能だよ。
0563デフォルトの名無しさん
2015/12/09(水) 00:25:33.14ID:Nwi0kic/いや、普通にコンパイル時にコネクションチェックしてくからエラーは出るぞ。
致命的エラーじゃなくてワーニングだけどな。
0564デフォルトの名無しさん
2015/12/09(水) 00:26:38.33ID:ZwktDk400565デフォルトの名無しさん
2015/12/09(水) 00:29:30.37ID:ZwktDk40動的型だと、メソッド一覧の取得はあまりないが、
メソッドが存在するか?のチェックは時々ある。
それは変数に型がないので、型の違いによるディスパッチ。
要するに、引数の型が違う同じ名前のメソッドを定義する
多重定義(オーバーロード)が使えないから、
プログラマが自分で、メソッドがあればこっち、
なければこっちって書く必要があるから。
0566デフォルトの名無しさん
2015/12/09(水) 00:40:12.17ID:PAqE7lrNうん、まあそうなるのは分かる
静的型付けでエラーにして欲しいかどうかの考えが分かれるところだね
rubyのmethod missingを例にとると、個人的には黒魔術の入り口が広すぎると感じて嫌い。だけど便利なのは分かる。respond_toが許せる限界
コンパイラエラー盲信かテストかって話になりがちだけど、どちらも重要だと思ってるので悪しからず
0567デフォルトの名無しさん
2015/12/09(水) 00:48:55.46ID:pqe3smnr>○○型を継承とコードに書く必要があるか?
>・静的型・・・書く必要がある
それは総称型(C++のtemplate、将来的にはコンセプト)によって必要なくなる
0568デフォルトの名無しさん
2015/12/09(水) 00:49:21.60ID:ZwktDk40コンパイラエラーを盲信している奴なんて居ないと思うけど?
コンパイラエラーをバグだと思うのは初心者ぐらいで
普通は誤字脱字程度の扱いでしょ?
レビューやテストに出す前の簡単なチェック
その誤字脱字程度の簡単なチェックが、テストとか大きな話になるのが動的型なだけで。
0569デフォルトの名無しさん
2015/12/09(水) 00:50:13.38ID:pqe3smnr0570デフォルトの名無しさん
2015/12/09(水) 00:53:28.18ID:Q8p7CoT8>普通は誤字脱字程度の扱いでしょ?
それはさすがに認識を改めるべきだ。
0571デフォルトの名無しさん
2015/12/09(水) 00:57:22.11ID:ZwktDk40え? 何か間違いでもある?
0572デフォルトの名無しさん
2015/12/09(水) 01:10:02.29ID:Q8p7CoT8"理想的には"その時点で実行時エラーが発生する心配からも解放される。
というかそうなるように(型を使い分けることを)頑張る。
それに誤字脱字の検出はコンパイラじゃなくてエディタの仕事でしょ。
0573デフォルトの名無しさん
2015/12/09(水) 01:14:48.96ID:ZwktDk40誤字脱字 "程度の扱い" って書いたんだよ。
誤字脱字そのものじゃない。
あ、間違えてましたwww
ごめんねー。程度の軽いノリの問題だって話。
コンパイルが通ってからが、バグとテストとの本当の戦いでしょ?
0574デフォルトの名無しさん
2015/12/09(水) 01:21:51.54ID:EfFDGPMf盲信は言い過ぎだったねごめん。
コンパイルエラーに助けられる事が多い、程度に読んでもらえれば幸い。
型チェックや動的静的問わず、今時のコンパイラエラーって防波堤としてほんとよくできてると思うんだ。
非到達エラーから制度劣化、未定義の可能性とかありがたいじゃない。
動的型付け言語では根本的にエラーとして検出しにくいケースが、静的型付けよりは多いよね。良し悪しじゃなく仕組み上の話だし、当然妥当なテストがあれば補える問題だけどと。
コンパイル通ってからの、本当の戦いを少しでも軽減したいってことだよw
0575デフォルトの名無しさん
2015/12/09(水) 01:24:14.77ID:EfFDGPMfほんとそれw
コンパイル通ってからだよ…ほんとに…
0576デフォルトの名無しさん
2015/12/09(水) 02:38:19.01ID:ZwktDk40> コンパイル通ってからの、本当の戦いを少しでも軽減したいってことだよw
そうそう。
動的言語だとコンパイルってものがないから、
本当の戦いにどうでもいいようなものまで連れて来てしまう。
そりゃテストを書けば見つけられるだろうけど、
テストが漏れていたりすればテストではわからない。
それだと見つけるまで時間がかかってしまう。
0577デフォルトの名無しさん
2015/12/09(水) 04:04:00.95ID:xvODQKwr0578デフォルトの名無しさん
2015/12/09(水) 04:32:58.97ID:ZwktDk400579デフォルトの名無しさん
2015/12/09(水) 05:07:44.62ID:xvODQKwr0580デフォルトの名無しさん
2015/12/09(水) 05:27:33.68ID:ZwktDk40あとインタプリタは同じ行を毎回解釈するって点も違う。
0581デフォルトの名無しさん
2015/12/09(水) 05:42:18.67ID:L2N/sqSc動的OO言語というのは実行時にクラスを書き換え可能な言語だろ。
当然、既存のオブジェクトを実行時にクラス変更することも含む。
それができなければ動的OO言語とは言えない。
0582デフォルトの名無しさん
2015/12/09(水) 05:47:11.44ID:xvODQKwr0583デフォルトの名無しさん
2015/12/09(水) 06:15:38.80ID:ZwktDk400584デフォルトの名無しさん
2015/12/09(水) 06:59:52.46ID:AQfN6yiZJavaもインタープリターだな。(もちろん反語的に)
0585デフォルトの名無しさん
2015/12/09(水) 07:03:13.71ID:AQfN6yiZ> 当然、既存のオブジェクトを実行時にクラス変更することも含む。
> それができなければ動的OO言語とは言えない。
Smalltalk以外でそれを簡単にやってのける言語ってあるの?
0586デフォルトの名無しさん
2015/12/09(水) 07:32:11.19ID:AQfN6yiZあ、プロタイプベースのOOPLなら簡単なことか。
委譲先オブジェクトをクラスと見なしてよい、という条件付きでだけれど。
0587デフォルトの名無しさん
2015/12/09(水) 07:36:24.78ID:eZdYKXJt0588デフォルトの名無しさん
2015/12/09(水) 07:41:58.30ID:S9JjB3ptむしろ型が複雑すぎるがゆえのキャストミスのほうが多い
0589デフォルトの名無しさん
2015/12/09(水) 08:43:09.26ID:dpMFVJ21は?
0590デフォルトの名無しさん
2015/12/09(水) 14:24:31.32ID:7dqQv49h数式は多態使い捲りだが?
0591デフォルトの名無しさん
2015/12/09(水) 14:45:51.19ID:ZwktDk40> むしろ型が複雑すぎるがゆえのキャストミスのほうが多い
動的言語は大変だね。キャスト出来ないことを
コンパイル時にわからないから、そういうことになる。
0592デフォルトの名無しさん
2015/12/09(水) 15:08:28.76ID:Nwi0kic/0593デフォルトの名無しさん
2015/12/09(水) 15:37:51.16ID:ZwktDk40その言語とでてくるメッセージを教えて下さい、
0594デフォルトの名無しさん
2015/12/09(水) 15:56:17.74ID:r1pqWhI4Void型のポインター型ね
Void型のオブジェクトでメソッドを呼び出すと
どんなメソッド名も定義されているから
エラーにはならない
例外を投げるだけだから問題にならない
0595デフォルトの名無しさん
2015/12/09(水) 16:05:34.93ID:r1pqWhI4型チェックするから静的型付け言語なのにキャストしてもエラーにならない
0596デフォルトの名無しさん
2015/12/09(水) 17:06:33.64ID:ZwktDk40> 例外を投げるだけだから問題にならない
例外になったら動かないじゃんw
そういや例外のログがでてるのをみて、
これは正常な動作ですって言ってた某社SEがいたな。
もちろん無償で直させたけどなw
0597デフォルトの名無しさん
2015/12/09(水) 17:09:42.44ID:r1pqWhI4メソッドが見つからなければ何もしないという
選択も選べる
0598デフォルトの名無しさん
2015/12/09(水) 17:14:13.71ID:ZwktDk40デフォルトをメソッドが見つからなければ何もしないに
変更したほうがいいのでは?
0599デフォルトの名無しさん
2015/12/09(水) 17:15:11.65ID:ZwktDk400600デフォルトの名無しさん
2015/12/09(水) 17:16:13.41ID:r1pqWhI40601デフォルトの名無しさん
2015/12/09(水) 17:17:00.19ID:ZwktDk40つまりキャッチしなければ、止まるっていうことだよね?
システムは止まったら行けないよ。それは
エラーということ。
0602デフォルトの名無しさん
2015/12/09(水) 17:20:32.72ID:r1pqWhI40603デフォルトの名無しさん
2015/12/09(水) 17:21:04.43ID:ZwktDk40当たり前の話をしてるんじゃないんだよね。
そもそもエラー(例外)がでないようにするには
どうするかって話なんだから
0604デフォルトの名無しさん
2015/12/09(水) 17:21:38.38ID:xvODQKwr「動的言語」はバズワード。
0605デフォルトの名無しさん
2015/12/09(水) 17:22:48.60ID:ZwktDk40今は、正常に動作するためには
どうするかって話をしているだよ。
例外すら出てはいけない。キャッチしないなんてもってのほかだ。
キャッチしても正常に動作しなければ、それも意味がニア。
0606デフォルトの名無しさん
2015/12/09(水) 17:23:18.22ID:ZwktDk40× それも意味がニア。
○ それも意味がない。
0607デフォルトの名無しさん
2015/12/09(水) 17:24:02.66ID:ZwktDk40例外が出るときはバグだよ。
0608デフォルトの名無しさん
2015/12/09(水) 17:25:38.34ID:r1pqWhI40609デフォルトの名無しさん
2015/12/09(水) 17:28:27.85ID:ZwktDk40言葉遊びがしたいの?
正しく動作しないならば、
それはシステムエラーだよ。
画面に「システムエラーです」って表示されたら
それはエラーなのは当たり前。
システムエラーですっていうメッセージを表示するという処理をしているので
正常に動作していますって言う奴は某社SEぐらいだよw
0610デフォルトの名無しさん
2015/12/09(水) 17:30:14.01ID:r1pqWhI4プログラマーであって
OSではないんだよ
0611デフォルトの名無しさん
2015/12/09(水) 17:31:34.50ID:ZwktDk40ソフトウェアっていうのは書いた通りに動く。
だからこれはバグではありません。
そう書いてあるんだから!っていうのは
なんの説明でもないよ。
仕様を満たしていないのはバグであり
メソッドが見つからないというのもバグ
0612デフォルトの名無しさん
2015/12/09(水) 17:32:35.81ID:ZwktDk40防ぐ方法を教えてあげよう。
それは変数にメソッドがちゃんとあるか
型チェックをするのだ。
0613デフォルトの名無しさん
2015/12/09(水) 17:35:43.01ID:ZwktDk40動的にしか型チェックが出来ないと、型チェックするのを忘れて
バグにの元になり、手動で型チェックしたとしても手間がかかるわけか。
ちくしょー!結局型チェックは素晴らしいって
結論になっちまったぁー!
0614デフォルトの名無しさん
2015/12/09(水) 17:37:52.28ID:xvODQKwr0615デフォルトの名無しさん
2015/12/09(水) 17:42:31.05ID:r1pqWhI4動的言語は型チェックしてないわけじゃないよ
動的型チェックしないとエラーになるからな
0616デフォルトの名無しさん
2015/12/09(水) 17:45:04.46ID:xvODQKwr次から次へと後からおれおれ仕様出すなよ。
典型的な無能SEじゃねーか。
0617デフォルトの名無しさん
2015/12/09(水) 21:16:34.64ID:Q8p7CoT8それは、俺が無能だからだ。今日はっきりわかった。
0618デフォルトの名無しさん
2015/12/09(水) 21:48:41.66ID:cGdlc0Ik0619デフォルトの名無しさん
2015/12/09(水) 21:55:40.55ID:Q8p7CoT80620デフォルトの名無しさん
2015/12/09(水) 21:57:39.74ID:xvODQKwr0621デフォルトの名無しさん
2015/12/09(水) 22:05:10.11ID:ALRWLnkTお前が一番カスじゃん。
0622デフォルトの名無しさん
2015/12/10(木) 02:17:51.20ID:Qgz/vdGw>>617
詳しく聞きたいな
それだけ読めば動的言語(動的型付け言語の事なのかは置いとく)に壁を感じたという事だとお見受けするのだけど、ID抽出する限りの邪推だけど他に言いたい事あるんじゃないのかw
0623デフォルトの名無しさん
2015/12/10(木) 09:26:32.64ID:9vd2ccw+いや、動的言語にも複数の型を持つものが多いのだが…
例えばSmalltalkだってindexableかどうかとか、tag付き直値のオブジェクトとかがあって、それぞれ別の型として実装されている。
ただし性的型付言語と違って、ユーザプログラマがそれを意識する必要がないように巧みに言語設計されている。
0624デフォルトの名無しさん
2015/12/10(木) 11:29:49.69ID:m24vGLCh0625デフォルトの名無しさん
2015/12/10(木) 13:10:42.11ID:dgwO9L7F継承関係にないクラスへの変更を想定している。
0626デフォルトの名無しさん
2015/12/10(木) 15:11:47.93ID:9vd2ccw+キャストで変更できるのは静的型だ。動的型は変更されない。
0627デフォルトの名無しさん
2015/12/10(木) 16:01:12.67ID:m24vGLCh確かにアップキャストは継承関係を前提とした用語だからダメですね。
AクラスオブジェクトだけどBクラスオブジェクトへの参照として受け取ってもらえる、と言うほどの意味でした。
>>626
0629デフォルトの名無しさん
2015/12/10(木) 18:07:51.35ID:UkA8Tt9iたとえば、Rubyで書くとこういうこと。(Rubyでは無理だけど)
class A; attr_accessor :x, :y end
class B; attr_accessor :x, :y, :z end
obj = A.new
obj.x = 1; obj.y = 2
p obj.class, obj.x, obj.y #=> A, 1, 2
obj.z = 3 #error
obj.hoge(B)
obj.z = 3
p obj.class, obj.x, obj.y, obj.z #=> B, 1, 2, 3
0630デフォルトの名無しさん
2015/12/10(木) 18:14:41.05ID:UkA8Tt9i複数から参照されているオブジェクトの同一性を保ったまま、別のものにすげ替えたいとき。
何らか制約があって変更できないオブジェクトを更新するとか、
ORMやOODのプロキシーをユーザーに意識させずに本物にすげ替えるとか、いろいろ。
0631デフォルトの名無しさん
2015/12/10(木) 18:30:31.69ID:Ti4G586pそういうのって、コンパイル時のパッチでよくね?
0632デフォルトの名無しさん
2015/12/10(木) 18:32:42.40ID:Ti4G586p「設計のミスをごかます時に使える」ということだよね。
0633デフォルトの名無しさん
2015/12/10(木) 18:40:32.39ID:Ti4G586p静的型でも可能だよね?
継承関係をもたせればいいだけなんだから。
0634デフォルトの名無しさん
2015/12/10(木) 18:50:52.86ID:UkA8Tt9iソフトウエアを設計通りの運用しか想定せず使い捨てにするならその理解でいいと思います。
ただ、ソフトウエアは長期運用 and/or 大規模になると設計当初は想定すらできなかった働きを
させなければならないこともあるので、そういうときに動的遅延性が役立ちます。
0635デフォルトの名無しさん
2015/12/10(木) 18:52:36.10ID:UkA8Tt9i×動的遅延性 → ○動的遅延結合性
0636423
2015/12/10(木) 19:31:05.50ID:t7TUm6W9>>633 も言ってるけど動作中に入れ替えることぐらいなら大抵の言語でできるよね
メリットってそれしかないってこと?
0637デフォルトの名無しさん
2015/12/10(木) 19:56:04.31ID:HlhlTzMo0638デフォルトの名無しさん
2015/12/10(木) 20:00:28.78ID:6p+J3/cLトカトントンという音が聞こえてレスする気がなくなるw
0640デフォルトの名無しさん
2015/12/10(木) 20:43:49.26ID:Qgz/vdGw静的型でもダックタイピングあるしな
golangなんかどんだけ適当に組んでても>>630の要求程度はチョチョイのチョイだぜ
0641デフォルトの名無しさん
2015/12/10(木) 21:04:54.50ID:UkA8Tt9i0642デフォルトの名無しさん
2015/12/10(木) 21:39:49.51ID:Qgz/vdGwruby詳しくないけど、Aで定義してたものをBに差し替えて、Aにない要素に如何にアクセスするかってことだよね
それ踏まえると>>630は急に難題になるな
ただ、これ言うとJavaでもなんでもありになっちゃうけどその必要が生じたら単にインターフェースやスーパークラス自体を書き換えればいいのではとも思ってしまった
単に俺が、どういう時にそれが必要になるのか共感できてないのかな
0643デフォルトの名無しさん
2015/12/10(木) 22:36:24.52ID:Ti4G586p> ただ、ソフトウエアは長期運用 and/or 大規模になると設計当初は想定すらできなかった働きを
> させなければならないこともあるので、そういうときに動的遅延性が役立ちます。
設計当初は想定すらできなかった働きを
無理やり誤魔化すのは、ソフトウェアの崩壊を招くから
やめたほうがいい。
設計当初は想定すらできなかった働きをさせる場合は、
まず、新しい設計を考える。
その設計に互換性を保ちながら移行させる。
古い仕様をなくす。
みたいな感じで、想定外を、想定内の動きに変えていくことが重要。
長期運用 and/or 大規模なプロジェクトであればあるほどね。
0644デフォルトの名無しさん
2015/12/10(木) 22:39:55.42ID:Ti4G586p> その必要が生じたら単にインターフェースやスーパークラス自体を書き換えればいいのではとも思ってしまった
そういうこと。書き換えればいい。
本質的を気付きやすいように説明するとこうなる。
動的言語は動的に書き換えられる、
静的言語は動的に書き換えられない。
というならば静的言語は静的に書き換えればいい。
0645デフォルトの名無しさん
2015/12/10(木) 22:54:23.18ID:6p+J3/cLあの…信者が発狂するからあんまり言いたくないけど
C++ベースで毎回そういう一から組み直しをやってコケてる代表例がマイクロソフトWindowsで
Objective-Cベースでモジュール単位のアップデートや追加で安定して
バージョン上げたり、モバイル用サブシステム出したりしてんのがAppleのMacやiOSなんですが…
0646デフォルトの名無しさん
2015/12/10(木) 23:01:35.42ID:2Vi0Zcok0647デフォルトの名無しさん
2015/12/10(木) 23:35:13.11ID:Qgz/vdGw1から組み直してんじゃないよ
気に入らなくて表層を何度もやり直してUWPにこぎ着けたが、皆んな不安になってるだけの事だ。
…いやこれは皮肉な
結果としてはVMに頼らないAppleのやり方の方がリソース配分が上手かったとは思うけど、cベースのCore Foundationとトールフリーブリッジからモダンランタイムに至ってSwiftまで、一貫してバイナリと戦ってきた流れじゃん
Appleはとうの昔にobj-cそのものではなくランタイムライブラリとネイティブバイナリに執着して活路を探してた訳だよ
0648デフォルトの名無しさん
2015/12/10(木) 23:40:04.20ID:Ja3A5C9U普通にやってるだろ?
0649uy ◆Qawu9.2l1E
2015/12/10(木) 23:51:25.01ID:iRkUriYX0650デフォルトの名無しさん
2015/12/10(木) 23:53:29.00ID:Qgz/vdGwお前は黙っとけ
0651デフォルトの名無しさん
2015/12/10(木) 23:55:52.21ID:JehUcjVI型を導入すれば変更が容易に行えない
君たちは変更は容易だというかも知れないが、あしかせにしかならない
既に条件が決まりきったことを組み上げるのに静的言語はいい
だが現実のモデルはそう簡単ではない
0652デフォルトの名無しさん
2015/12/11(金) 00:05:17.73ID:MbyU/AgB現実のモデルはそう簡単ではない。その通りだ。静的型も動的型も、関数型言語もその問題に取り組み続けているだけの事だよ。
片方では足枷になる概念があり、もう片方ではその足枷が外れている代わりに別の足枷がある。
銀の弾丸なんてないってことよ
0653uy ◆Qawu9.2l1E
2015/12/11(金) 00:07:11.44ID:3I74ljVL例えば何?
>もう片方ではその足枷が外れている代わりに別の足枷がある。
それは何?
0654uy ◆Qawu9.2l1E
2015/12/11(金) 00:09:53.58ID:3I74ljVL, -‐ァ‐- 、
/>:<´ ..:ヽ
, -‐ヤ .:rt:ァ;゙´ ,」:\
` ̄`ヾ"`ヾ:::7 シ.: : :ヽ
ト-、 ` ツ:.: : : : :\
l �_:、 : : : :.:.、\
', .: :ヾ、:.:.、:.:�_ミゝ、
'、 ` ‐�_ミミミミ、
ヽ. _,`''=ミミミミ:、
`7>- ニ..ミ三彡ヘヽ\ `
/´ / ヾ:\ヽ
、,/ / ヾ.:ヾ\
 ̄/ __/ ヾ:.ヽヾ、
/ ヽ
ヒョウロンカキドリ 山梨県 富士樹海
他の鳥が作った巣に難癖をつけ、攻撃する習性を持つ
しかし自分では巣を作らない
0655デフォルトの名無しさん
2015/12/11(金) 00:10:28.35ID:PJrkNk76普通にやると>>629はどう書くのが適切ですか?
たいていの言語は読めますので、使い慣れた言語で書いてみてください。
0656デフォルトの名無しさん
2015/12/11(金) 00:18:45.55ID:MbyU/AgBインターフェースって段階で>>629は度外視した話でしょ
共通インターフェースにまとめていいならそれは静的型の片付けかたに過ぎないし、.zのような未知のアクセスを考える事自体が不要になる
method_missingで魔改造するような用途には静的型言語は使えない。それでいいと思うよ
0657デフォルトの名無しさん
2015/12/11(金) 00:19:50.14ID:0t4QVdbR0658uy ◆Qawu9.2l1E
2015/12/11(金) 00:22:13.90ID:3I74ljVLobj.extend B
だろ
0659デフォルトの名無しさん
2015/12/11(金) 00:23:15.44ID:MbyU/AgB0660uy ◆Qawu9.2l1E
2015/12/11(金) 00:24:36.78ID:3I74ljVLclass A; attr_accessor :x, :y end
module B; attr_accessor :x, :y, :z end
obj = A.new
obj.x = 1; obj.y = 2
p obj.class, obj.x, obj.y #=> A, 1, 2
(obj.z = 3) rescue p $!
obj.extend B
obj.z = 3
p obj.class, obj.x, obj.y, obj.z #=> B, 1, 2, 3
0661デフォルトの名無しさん
2015/12/11(金) 00:38:04.43ID:+61yG+7hもともとランタイムが必要だからシングルプロセッサだとタイムシェアリングで
回すしかないので、積極的にマルチプロセッサ、マルチコアに注力したのが
最近のなんでもマルチコアにぴったりフィットしたっつか
ガベージコレクション止めてオートリテインにしたり
このままObjective-Cのクラスバイナリを動的に管理する
smalltalk+Cで行くかな?と思ってたんだが
swiftはちょっとsmalltalkから離れて違う方向へ行ったので困惑中。
NSNumbersとか基礎クラスがNextStepのプリフィックスのまま
20年前から16/32/64bitも68000もPPCもIntelも差異を吸収して
動いてんのスゲーって2008年ぐらいに触り始めた時に思って
それ以来わりと信者w
0662デフォルトの名無しさん
2015/12/11(金) 00:42:06.79ID:pIbxH6/eMSは成功例なので、全く当てはまりませんね
再コンパイルしないで、Appleが何か配信でもしたんですか?w
0663デフォルトの名無しさん
2015/12/11(金) 00:43:29.29ID:MbyU/AgB切り捨てまくってるよ
差異を吸収ってのもなんのこっちゃ。MSは誰がどう見ても、他のどんな企業より桁違いに互換性偏執狂でしょう
0664デフォルトの名無しさん
2015/12/11(金) 00:45:20.87ID:pIbxH6/e動的だったら対応できるんじゃねーの?w
0665デフォルトの名無しさん
2015/12/11(金) 00:48:50.12ID:pIbxH6/e動的なRubyが互換性切り捨てっていうのは面白いな。
一見逆に見えるが、本来の設計をねじ曲げて無理やり対応可能とうことは、
本当にねじ曲げてしまって、すぐに複雑になるからであろう。
ねじ曲げた対応のことまで考えてられない。
そんな使い方は想定していない。だからすぐに互換性が切り捨てられる。
0666uy ◆Qawu9.2l1E
2015/12/11(金) 00:57:45.70ID:dO1puNiT言語仕様の互換性と
OSの互換性を並べて考えるっていう・・・
0667デフォルトの名無しさん
2015/12/11(金) 01:07:53.26ID:PJrkNk76B はインターフェイスや抽象クラス、モジュールではなく
普通にインスタンスを生成できる、Aと同じ、しかし互いに継承関係にはないクラスです。
0668デフォルトの名無しさん
2015/12/11(金) 01:11:29.34ID:MbyU/AgBそれにレスすんな
話が伝わらん上に意味不明なこと喚き散らして収拾がつかないから、みんな相手にするの諦めてんだよ
0669デフォルトの名無しさん
2015/12/11(金) 01:13:49.00ID:pIbxH6/eそれ以外のやり方で、無理やりつじつまを合わせようとすることは
やっちゃだめなんだよ。
0670デフォルトの名無しさん
2015/12/11(金) 01:16:52.63ID:PJrkNk76この手のお題で他言語での回答ならともかく、そのまま ruby を使うなら、
hoge を定義する以外のことをするのは常識的に考えて普通NGでしょう…(苦笑)
0671デフォルトの名無しさん
2015/12/11(金) 01:19:00.73ID:PJrkNk76あ、そういうヒトなんですね。失敬、しっけい。以後、スルーします。
0672uy ◆Qawu9.2l1E
2015/12/11(金) 03:04:34.80ID:OT4cT4iB君お話にならないレベルなんだけど
なんか名無しに励まされて勝ち誇ってる感じだけど、そのままいくとヤバいよそれ
0673uy ◆Qawu9.2l1E
2015/12/11(金) 03:10:17.89ID:7IX83ZkBそれが自分にとって分かりやすいと思ってるからです
けれどひとによっては方法が二つになろうと
しっかりと理解出来て、かつ効率を高めるものかもしれないね
自分の頭のスペックを疑ってくださいよゴミカス共
インターフェースが複数個あろうが
それを理解してコーディング出来る奴が開発してるなら、そこに効率があるんです
0674デフォルトの名無しさん
2015/12/11(金) 04:20:22.09ID:aIPzTNnb実運用しながらクラスを改変して、
既存オブジェクトを新しいクラス定義にあわせてマイグレーションしてやらないといけない時には、
既存オブジェクトのクラスを変更する必要があるだろ?
0675デフォルトの名無しさん
2015/12/11(金) 05:14:41.81ID:z9XcLK7wいや別に?
新旧二つのバージョンを同時に起動して
リバースプロキシで新しい方にリダイレクトすればOK
そうやってアプリのバージョンアップをするんだよ。
0676デフォルトの名無しさん
2015/12/11(金) 05:29:32.39ID:z9XcLK7w綱渡りな開発しないからな。
もしクラスの修正に失敗したらどうするのか?
バグが含まれる可能性もあるし、しっかりテストしなきゃいけない。
テストしている間、運用を停止するわけにもいかないしな。
データなんて、普通はデータベースに有るわけで、
オブジェクトがどうとか、言語レベルで終わる話じゃない。
こちとら複数台のPCで構成された、大規模システムを扱ってるわけで、
同時にすべてのシステムを一瞬でアップデートなんてできるわけがないので、
複数のバージョンを同時稼働させて順次切り替えることで、
無停止でシステム更新を行ってるんだよ。
0677デフォルトの名無しさん
2015/12/11(金) 07:08:27.33ID:+dkanqa9何を難しくしてるのかいまいちわからない。
0678423
2015/12/11(金) 07:38:35.25ID:7DodXpQ6>>625 みたいな機能があると何が嬉しい?
> 部分をバージョンアップできる
え? それだけなの? ← 今、ココ
0679デフォルトの名無しさん
2015/12/11(金) 07:54:51.24ID:+dkanqa9callerはcallee.zなんて知らないから呼ばない
先にcallerにz()が追加された↓
if (callee.responds(z)) {
callee.z()
}
これだけの事を言ってるような流れだが..
0680デフォルトの名無しさん
2015/12/11(金) 09:37:59.91ID:Wogf6bzX0681デフォルトの名無しさん
2015/12/11(金) 09:52:07.57ID:+dkanqa9なるほどなw
0682デフォルトの名無しさん
2015/12/11(金) 09:52:41.01ID:s7hp/dAB既存の動的あるいは動的型付けOOPLでこういうことできるのあるの?
0683デフォルトの名無しさん
2015/12/11(金) 10:04:11.03ID:r5Q1R4hdC++のテンプレートの型引数の動的に使える奴だと思っておけばいい
これをダックタイピングという
0684デフォルトの名無しさん
2015/12/11(金) 12:36:53.98ID:AuU75Yh5静的故にコンパイル時に型のエラーを検出できる
ダックタイピングなのに型安全なのだ
上手い落とし所だな
0685デフォルトの名無しさん
2015/12/11(金) 14:32:20.32ID:tGeGgvhOcalleeがAというproxyで、callee.z()をしようとするタイミングでBになる
っていうのは考えられる。実装は出来ないけど。
0686デフォルトの名無しさん
2015/12/11(金) 15:47:24.76ID:PJrkNk76構造的部分型は?
0687デフォルトの名無しさん
2015/12/11(金) 16:16:19.06ID:AuU75Yh5静的型の機能が盛り込まれる時代なわけだけど
非常に適当な物ばかりであり、まじめに静的型を扱っていない
メソッドの引数に型を書いておけば呼び出し時に型のチェックをしてくれるような物が多いが
しかし、引数に型を指定するということは、その型と派生クラス以外を渡したらエラーになるので
引数に型を指定したならダックタイピングはできない
両方は両立しない
C++のテンプレートのように、コンパイル時にチェックが行われて、かつ、ダックタイピングができる
領域まで達していない
残念だ
0688デフォルトの名無しさん
2015/12/11(金) 16:31:50.90ID:AuU75Yh5殆どの場合は静的なダックタイピングで十分だし、静的な方がコンパイラのチェックが効くので安心
つまらないtypoも全てコンパイラが発見してくれる
どうしても動的な多態がしたければ、インターフェースでやればよい話
当たり前にダックタイピングよりは安全
最近の動的型言語が静的型を取り入れつつ有ると言っても、飾りみたいなもので
「静的なダックタイピングでコンパイル時に解決するので安全」という
静的型の一番のミソが実現できていない
メソッドの仮引数に型を指定できて、型チェックを行うので、型安全
でも、ダックタイピングは出来ません、では
静的型の機能的には、C言語レベル相当でしか無い
0689デフォルトの名無しさん
2015/12/11(金) 16:40:22.06ID:AuU75Yh5型を指定して安全を取るか
型を指定せずにダックタイピングを取るか
の二者択一しかない
その中間のダックタイピングができるけど静的に安全、が実現できていない
これこそ静的型が長年かかって勝ち取った、静的型の本領なのに
0690デフォルトの名無しさん
2015/12/11(金) 16:49:08.54ID:aIPzTNnb君って、技術的な不足を補う応急策を定石だと思い込んじゃうバカ?
施しようがないなw
0691デフォルトの名無しさん
2015/12/11(金) 17:05:06.34ID:AuU75Yh5今は型推論があるから型名は省略できることが多いが、それだけじゃない
宣言は型を指定するって意味もあるが、それ以外にスコープを明確にするって役割も有る
宣言がなければ
{
i =0;
{
i = 0;
}
}
この場合、外側の i と内側の i が同一なのかどうか、明確じゃない
Pythonは最悪で、代入が有れば別変数で、代入がなく読み込みだけなら同一変数になる
つまり、Pythonは代入を宣言の代わりとして解釈しているので
代入が有れば新たな変数が宣言されたとみなして別変数だが
代入がなければ宣言がないので同一変数ということになる
しかし代入と宣言は本来別の機能なので、宣言を代入で代用するというアイデアは破綻した
そして、nonlocal が追加された
結局宣言は必要だということ
0692デフォルトの名無しさん
2015/12/11(金) 17:34:05.97ID:aIPzTNnb>Pythonは最悪で、代入が有れば別変数で、代入がなく読み込みだけなら同一変数になる
>つまり、Pythonは代入を宣言の代わりとして解釈しているので
>代入が有れば新たな変数が宣言されたとみなして別変数だが
>代入がなければ宣言がないので同一変数ということになる
おっと、宣言なしでdefsの左辺に変数を書いてスコープをシャドーできる
現代最強の型システムを誇るHaskellやML系の静的型付関数型言語の悪口は
そこまでだ!
おまえが言っている静的型付言語のメリットというのはJavaやScalaのようなゴミ言語の技術的妥協の産物だ。
おまえが言っている動的型付言語のデメリットというのはHaskellやMLのような優れた言語も持っている特徴だ。
バーカw
0693デフォルトの名無しさん
2015/12/11(金) 19:08:47.00ID:qdMeKh850694デフォルトの名無しさん
2015/12/11(金) 19:31:00.54ID:z9XcLK7w変わりはないので、単純にタイプ数が減るというメリットが有る。
逆にデメリットはいっさない。
0695デフォルトの名無しさん
2015/12/11(金) 19:38:46.07ID:XO3DVX8V0696デフォルトの名無しさん
2015/12/11(金) 19:41:56.13ID:z9XcLK7w型チェック・・・この型以外はNG
型推論・・・この型以外はNGだから、この型と推論する
0697デフォルトの名無しさん
2015/12/11(金) 20:11:34.82ID:qdMeKh85くだらない。
0698デフォルトの名無しさん
2015/12/11(金) 20:25:39.96ID:ghCmNcLm0699デフォルトの名無しさん
2015/12/11(金) 20:30:19.25ID:z9XcLK7w勘違いしている人がいるのよ。
「明らかにその型と断定できる場合に書くのを省略できる機能」なのに
型を書かない=動的に型を判断していると勘違いしてるらしいのね。
0700デフォルトの名無しさん
2015/12/11(金) 20:39:29.62ID:0but4gFRちょっと吐いてくる
0701デフォルトの名無しさん
2015/12/11(金) 20:40:09.52ID:PJrkNk76つまり、ScalaやSwiftのコンパイルが遅いのと型推論は無関係だと?
0702デフォルトの名無しさん
2015/12/11(金) 20:44:23.92ID:PJrkNk76型の“推論”が必要な場面では、自明なケースはむしろ少ないだろう。
0703デフォルトの名無しさん
2015/12/11(金) 20:54:02.86ID:/Ctd9aP6→「くだらない」
→「ちょっと吐いてくる」
さて、どう攻めてみようか...
0704デフォルトの名無しさん
2015/12/11(金) 20:55:17.85ID:bfh5Rk2sまじかよ、Pythonややこしいな。
0705デフォルトの名無しさん
2015/12/11(金) 21:03:07.99ID:z9XcLK7wはい。無関係です。
型推論を行う言語全てが
遅いわけじゃないですからね。
0706デフォルトの名無しさん
2015/12/11(金) 21:04:33.44ID:z9XcLK7w> 型の“推論”が必要な場面では、自明なケースはむしろ少ないだろう。
推論って自明って意味だぞ?
推論と推測や憶測をごちゃ混ぜにしてないか?
0707デフォルトの名無しさん
2015/12/11(金) 21:32:42.99ID:/Ctd9aP6ただそれだけのことだ。
0708デフォルトの名無しさん
2015/12/11(金) 21:33:17.84ID:PJrkNk760709デフォルトの名無しさん
2015/12/11(金) 21:40:58.64ID:/Ctd9aP60710デフォルトの名無しさん
2015/12/11(金) 21:42:27.83ID:PJrkNk76それはせいぜい型記述省略の機能しかない
いいかげんな言語処理系の場合を言っているだけで、
ちゃんと推論している言語処理系でコンパイル時間のうち
多くの割合を型推論にさいている現状は無視すべきでないし
型推論のデメリットのひとつと素直に捉えるべきだろう。
(「推論=自明」な人に言ってもわからんと思うけど)
0711デフォルトの名無しさん
2015/12/11(金) 21:50:33.03ID:Dm16Ximr本土住民は本気になれ。
0712デフォルトの名無しさん
2015/12/11(金) 22:06:20.19ID:JUhcVU6DJavaScript
0713デフォルトの名無しさん
2015/12/11(金) 22:39:32.09ID:qdMeKh85頭が悪そう。
0714デフォルトの名無しさん
2015/12/11(金) 22:41:25.20ID:z9XcLK7wですよね。
でも推論って俺がつけたんじゃないのでしょうがない。
型推論は、曖昧な型決定はしてくれない
っていうか、コンピュータに曖昧なことされても困るw
>>710
お前何言ってるの? 推論して推論が間違っていたらどうするんだよw
コンピュータだから曖昧なことは許されないんだが。
型推論っていう名前に文句つけるなら、俺に言うな。
型推論がやってるのは、型の導出だから。
確実に型が静的に決まってる。でなければコンパイルエラーになる。
0715デフォルトの名無しさん
2015/12/11(金) 22:43:37.45ID:oeHR7Cd9「明らかに」の意味を取り違えてないか?
>>699 は時間を一切かけずにという意味じゃなくて時間がかかっても静的に型が確定するという意味合いで使ってるぞ
0716デフォルトの名無しさん
2015/12/11(金) 22:43:41.08ID:z9XcLK7w> ちゃんと推論している言語処理系でコンパイル時間のうち
> 多くの割合を型推論にさいている現状は無視すべきでないし
人間がコード読んで人力推論するよりかは遥かに短いだろw
0717デフォルトの名無しさん
2015/12/11(金) 22:51:54.59ID:+61yG+7hえ?型推論ってそういうものだったっけ?
0718デフォルトの名無しさん
2015/12/11(金) 22:52:49.03ID:qdMeKh85頭の悪いPGは、型推論で型を省略されまくったコードを読むプログラマの負担を考えられない。
書くのは楽だが、読むのが大変。そういう言語は結局廃れた。昔来た道。
0719デフォルトの名無しさん
2015/12/11(金) 22:57:03.77ID:z9XcLK7w型を書かなくても、静的に型が決定されるので
IDEが備える型に関するサポート機能は有効に働く。
実行せずとも型を知ることができる。
動的言語では、同じように型を書かないが
静的にも決まらないので人間が推論する必要がある。
ここの変数に入れてるのはここだけだから〜、あっ違った。
こっちからも代入されてる。しかも引数の順番間違ってて型も違ってる
てな感じ
0720デフォルトの名無しさん
2015/12/11(金) 22:59:44.13ID:z9XcLK7wそのとおりだね。だから少なくともパブリックな関数の定義など、
広い範囲から参照されるようなインターフェース部分には型を書くべき。
もっともそんなところまで型を省略できる言語があるのかは知らんが。
0721デフォルトの名無しさん
2015/12/11(金) 23:00:16.86ID:qdMeKh85ソース読むのにVS等のIDEをインストールしなきゃならないならない欠陥言語。
いちいち変数にマウスを当てながら読まないといけないとか既に言語とは言えない。暗号文。
0722デフォルトの名無しさん
2015/12/11(金) 23:03:45.02ID:z9XcLK7wそれは、動的言語の話だよね?
マウスをあてないと、その変数の型がわからないってのは
あ、マウスをあててもわからないのか?
動的言語は、もっと悪いねw
0723デフォルトの名無しさん
2015/12/11(金) 23:10:08.65ID:+61yG+7hよくわからんからあきらかに想定して話してるその言語の名前だしてくれんかね。
静的で型推論でIDEがやってくれる奴?
0724デフォルトの名無しさん
2015/12/11(金) 23:11:07.67ID:qdMeKh850725デフォルトの名無しさん
2015/12/11(金) 23:15:51.16ID:ghCmNcLmああC#のライブラリなんかでもよくあるな
foreachで取ってきたお前の内容はなんなんだよと
まあソースあればVisualStudioさんが追跡できなかったことはないけど、DLLになってるとリファレンスと格闘になってしまって解せない
0726デフォルトの名無しさん
2015/12/11(金) 23:17:29.41ID:JUhcVU6D0727デフォルトの名無しさん
2015/12/11(金) 23:29:15.19ID:z9XcLK7w全て省略できるわけじゃなく、省略できるのはローカルの変数程度だよ。
だから可読性は犠牲にならず、逆に可読性が上がる。
一度出た名前をもう一回書く代わりに、
「あれ」で済ますようなものだよ。
0728デフォルトの名無しさん
2015/12/11(金) 23:39:11.68ID:COkgkMR4型を一つ変えたら全部書き直さないといけなくなる
ことと
逆にいうと推論された先の型を変えるだけで
同じコードがそのまま使える
0729デフォルトの名無しさん
2015/12/11(金) 23:42:06.38ID:qdMeKh850730デフォルトの名無しさん
2015/12/11(金) 23:59:47.29ID:ewR9TR1QOCamlも知らんのに静的型付けと型推論を語るな
お前が知ってるのはドカタ言語だけなんだから控えろ
0731デフォルトの名無しさん
2015/12/12(土) 00:05:18.98ID:7phkh4Sb式には型がある。わかる?
いい加減にしないとそのまま老害になるぞ。
0732デフォルトの名無しさん
2015/12/12(土) 00:07:48.38ID:m7jaGLWu頭弱そう。
0733デフォルトの名無しさん
2015/12/12(土) 00:08:37.94ID:7phkh4Sb0734デフォルトの名無しさん
2015/12/12(土) 00:13:32.13ID:kJaM603pドカタ言語の部分は、OCamlが現場では使われてないっていいたいの?w
0735デフォルトの名無しさん
2015/12/12(土) 00:17:23.18ID:m7jaGLWu0736デフォルトの名無しさん
2015/12/12(土) 00:19:52.00ID:7phkh4Sbtemplate <typename ...T> using result_t = 〜;
とか提供しまくることになるんだろうか?
ヤダヤダ。
0737デフォルトの名無しさん
2015/12/12(土) 00:29:03.03ID:kJaM603pちなみに、C/C++では、その長ったらしい型に対して
プリプロセッサを使って、独自の名前を定義することで対応していた。
コードの見た目はすっきりする反面、実際にどんな型なのかわかりづらくなり、
またエラーメッセージはプリプロセッサを通した後になるので、
エラーの内容とコードの対比を考えるのが面倒だった。
型推論のおかげで、近くに型を書いておけば(全てを省略できるわけではないので
どちらにしろ近くに型を書くことになる)そこから推論で求められる部分に関しては
型を書かなくて良くなった。便利だね。
0738デフォルトの名無しさん
2015/12/12(土) 00:35:16.10ID:Ghry7CET一方、動的言語を支援する者は、かつて静的言語を使っていたが
きっかけがあって動的言語を使うようになり、良さを(短所も)知った人が多い。
0739デフォルトの名無しさん
2015/12/12(土) 00:36:34.56ID:l6rXNus2用語が本来の意味で使えなくなって議論続行不能に陥るパターンか
0740デフォルトの名無しさん
2015/12/12(土) 00:36:47.43ID:Ghry7CET0741デフォルトの名無しさん
2015/12/12(土) 00:38:06.45ID:m7jaGLWu0742デフォルトの名無しさん
2015/12/12(土) 00:44:56.90ID:Jg8Rh2fI偏見すぎる。
だったら、typescriptとか動的→静的が注目あびることはないんだがな
0743デフォルトの名無しさん
2015/12/12(土) 00:54:02.32ID:Ghry7CET若い頃はCやFortranやアセンブラで数十万行書いて、
プログラミング言語というものはそういうものだと思っていた。
C++が出た1984頃は、Cの発展系ですばらしいと思って勉強した、
そしてClassベースオブジェクト指向をオレ流に拡張したら
もっとすばらしくなるだろうと妄想していた時期もあった。
当時の仕事がCADの開発だったからというのもあるが、ケツが蒼かったのである。
だが1990年代前半にJavaがはやり始めて方法論主義者がはびこり
偏屈なClassベースオブジェクト指向をごり押ししたり、
ソフトウェア工学的視点から見てまずいだろというようなコードが
入門書に氾濫するようになって、静的言語のClassベース
オブジェクト指向には弊害があることが分かってきた。
またC++が静的言語のベースの上に動的なものとClassベース
オブジェクト指向をマージしたような悪く言うとおぞましき発展を続けることには
光りトカゲがあると感じた。
一方、動的言語は若い頃使っていた言語と勝手が違って最初は苦手で
どちらかというときらいだった、身に付いた言語との違いが不快だった。
しかし長い期間仕事で使ってういるうちに、動的型づけの弊害はびっくりする
くらい少ないのに対し、習熟に従い驚くほど簡潔な記述で表せるメリット
に気がつき好みが逆転していった。それにはかなり長い期間がかかった。
0744デフォルトの名無しさん
2015/12/12(土) 00:55:39.33ID:KEtUbtMSどうせ動的な機能なんて使いこなせてないから
静的に解析できるだろ
0745デフォルトの名無しさん
2015/12/12(土) 01:08:18.88ID:m7jaGLWu0746デフォルトの名無しさん
2015/12/12(土) 01:10:20.51ID:Ghry7CET動的言語を批判している者は、このスレには0だろう。
自分のお気に入りのJavaとちがうからとか、
どうでもいいような断片的コードの書き方、方法論
そんな口先の批判をしているだけだろう
0747デフォルトの名無しさん
2015/12/12(土) 01:12:42.75ID:m7jaGLWuおまえが証左。
0748デフォルトの名無しさん
2015/12/12(土) 01:14:12.68ID:Ghry7CETオレ動的言語批判してないぜw
それなのに、なんの査証かな?
0749デフォルトの名無しさん
2015/12/12(土) 01:15:00.74ID:YXeNACNC0750デフォルトの名無しさん
2015/12/12(土) 01:16:29.30ID:m7jaGLWu0751デフォルトの名無しさん
2015/12/12(土) 01:22:32.99ID:Ghry7CETまだ若いんだろうからもっと勉強しなされ
0752デフォルトの名無しさん
2015/12/12(土) 01:25:55.24ID:Ghry7CETLisp系、Ruby, Python, Perl とかになっちまうな
俺が多かれ少なかれ使った言語の範囲では。
MLもか?これはまだ不勉強で良く知らないが。
0753デフォルトの名無しさん
2015/12/12(土) 01:26:26.86ID:m7jaGLWuおそらくコード全然書けない素人。
0754デフォルトの名無しさん
2015/12/12(土) 01:27:46.37ID:Ghry7CETHaskell, Scala, Racket, あとは…
DylanやSwiftもそうかな?
0755デフォルトの名無しさん
2015/12/12(土) 01:29:18.41ID:Ghry7CETそしらたら、なんて言うの?
逆に訊いちゃうけどさ
0756デフォルトの名無しさん
2015/12/12(土) 01:31:29.29ID:m7jaGLWuなんて言うって何をだい?
0757デフォルトの名無しさん
2015/12/12(土) 01:31:34.30ID:YXeNACNC具体的にどういう機能が該当するのか定義してからじゃないと議論にならない。
このスレだって、動的型付けかと思えばインタープリターの話になったり、
そうかと思えば今度はダックタイピングの話になったりw
0758デフォルトの名無しさん
2015/12/12(土) 01:32:19.55ID:Ghry7CETw
もうお休み。
0759デフォルトの名無しさん
2015/12/12(土) 01:35:15.42ID:m7jaGLWu定義を答えられない=バズワード
0760デフォルトの名無しさん
2015/12/12(土) 01:36:52.01ID:Ghry7CETMPIの引数など、バイナリレベルで特定の型を
配列にパックし渡すフレームワークとのインターフェースかな
0761デフォルトの名無しさん
2015/12/12(土) 01:39:27.12ID:JaiWahewほんとだ。できた。(あえてゲッター・セッターを定義してみた)
http://ideone.com/HQrZnJ
0762デフォルトの名無しさん
2015/12/12(土) 01:41:22.49ID:m7jaGLWu質問すると「w もうお休み」と言われる。
よほど触れてはいけない質問をしたのだうろか。クラウドってなんですかって聞くと答えれない営業SEみたいだ。
0763デフォルトの名無しさん
2015/12/12(土) 01:46:38.15ID:Ghry7CETそれ質問してないだろ。
なにが動的かはいろいろあるが
こんなところで訊いてレスの応酬する前に
一般名詞はぐぐった方がはえーよw
ttps://www.google.co.jp/webhp?hl=ja#hl=ja&q=%E5%8B%95%E7%9A%84%E8%A8%80%E8%AA%9E+%E9%9D%99%E7%9A%84%E8%A8%80%E8%AA%9E
0764デフォルトの名無しさん
2015/12/12(土) 01:48:31.05ID:m7jaGLWu政治家「年金システムをクラウドにすると全ての問題は解決するんですよ」みたいな
0765デフォルトの名無しさん
2015/12/12(土) 01:50:28.89ID:Ghry7CETもっと頭が悪い。
0766デフォルトの名無しさん
2015/12/12(土) 01:52:17.58ID:m7jaGLWu0767デフォルトの名無しさん
2015/12/12(土) 01:53:06.76ID:Ghry7CET0768デフォルトの名無しさん
2015/12/12(土) 01:55:39.82ID:o/oZvQme二つの言語要素を比較して、こっちの要素の方がより動的な言語だね、くらいの意味でしか使えない言葉じゃないの
0769デフォルトの名無しさん
2015/12/12(土) 01:57:03.78ID:Ghry7CETかわりのいい言葉ある?
ああいう言語特徴
0770デフォルトの名無しさん
2015/12/12(土) 01:57:12.50ID:m7jaGLWuバスワードを好んで使う奴は自分で使ってる単語の意味が分ってないのがよく分る表現だ。wikiをなんだと思ってるんだ。
0771デフォルトの名無しさん
2015/12/12(土) 01:58:52.04ID:Ghry7CET子どもデンワ相談室にどーぞ
0772デフォルトの名無しさん
2015/12/12(土) 01:59:22.12ID:WZUsKBr6間違えた。こっちだ。orz
http://ideone.com/k8mYue
0773デフォルトの名無しさん
2015/12/12(土) 02:02:31.89ID:m7jaGLWuだから何の定義の代わりなんだ?w おまえのいう、ああいう言語の定義を聞いてるんだ。頭の弱いアホ文系と喋ってるみたいだ。
昔から、非論理的な奴ほど、弱い型付け、動的型付け言語を好むとよく言われる。
よくわからないけど、使えるみたいな。これからおまえみたいな馬鹿をバズ脳と呼ぼう。
0774デフォルトの名無しさん
2015/12/12(土) 02:05:15.11ID:Ghry7CETぐぐりゃ上位に出てくる名詞の意味で
なにをそんなに騒いでいるの?
https://www.google.co.jp/webhp?hl=ja#hl=ja&q=%E5%8B%95%E7%9A%84%E8%A8%80%E8%AA%9E+%E9%9D%99%E7%9A%84%E8%A8%80%E8%AA%9E
単に人に絡むのが趣味か
0775デフォルトの名無しさん
2015/12/12(土) 02:06:55.05ID:m7jaGLWuどこまで科学を馬鹿にしてるのか。おまえの定義を聞いているというのに。卒論もグーグルコピペで書いてそう。
0776デフォルトの名無しさん
2015/12/12(土) 02:07:48.88ID:eJXRswYA0777デフォルトの名無しさん
2015/12/12(土) 02:10:42.51ID:Ghry7CETそこに十分科学的に正し意味が書いてあるだろ。
意味が間違っているというのか。
それすらよまないというのは
科学以前に何もかも馬鹿しているだろ
0778デフォルトの名無しさん
2015/12/12(土) 02:11:51.25ID:m7jaGLWu0779デフォルトの名無しさん
2015/12/12(土) 02:13:03.84ID:Ghry7CETどんどん論点をずらしていきます
0780デフォルトの名無しさん
2015/12/12(土) 02:14:21.75ID:m7jaGLWu0781デフォルトの名無しさん
2015/12/12(土) 02:16:16.78ID:Ghry7CETトップに出るものをそれと気が付かずにからんでいたのか
0782デフォルトの名無しさん
2015/12/12(土) 02:16:39.85ID:Ghry7CET0783Obj-Cのひと
2015/12/12(土) 02:43:54.61ID:ooN9fQ2aWikiのジェネリックプログラミングまで行って思い出したよ…
>Objective-Cにあるような動的型付けを使い、必要に応じて注意深くコーディング規約を守れば、
>ジェネリックプログラミングの技術を使う必要がなくなる。全てのオブジェクトを包括する汎用型があるためである。
>Javaもまたそうであるが、キャストが必要なので静的な型付けの統一性を乱してしまう。
そうだ、これだ…swiftの仕様読んでた時に、なんでこんな
「これらは8割ぐらい似てるから一つの記述に押し込もう!」みたいなことしてんのか
よくわからなかった奴だよ…
いや、さすがにObj-Cでも万能型のid型使って受けた時に中で判別しようと思わないしなぁ…
ファクトリークラスのふるまい変えられるから型別の対応インスタンスを
送る側のこれを送るって指示に合わせて動的に生成が一番近いかなぁ。
うーん、でも外見上ワンクラスにまとめろということになると
結局、id(万能)型で受けて中で処理弁別になるか…
互いに本当に遠いとこに住んでるなぁ
0784デフォルトの名無しさん
2015/12/12(土) 03:20:04.13ID:kJaM603pだな。実際に実用的なものを作ってる人と
ただ言語を勉強しているだけの人の違いだな。
0785デフォルトの名無しさん
2015/12/12(土) 04:53:06.58ID:wA2CUnozそれは型推論の1/8ぐらいでしかない。
0786デフォルトの名無しさん
2015/12/12(土) 04:55:46.13ID:wA2CUnoz>>>701
>はい。無関係です。
言っとくが、ナンチャッテ型推論はともかく、まともなmilner式の型推論はNP完全だぞ?
0787デフォルトの名無しさん
2015/12/12(土) 05:33:00.84ID:kJaM603p> まともなmilner式の型推論はNP完全だぞ?
だからだよw 現実の実装をわかってないね。
NP完全だから答えがわかるまで永遠に計算してるとでも思ってるの?
型推論っていうのはね。どんな場合でも推論します。
型は絶対に書く必要ありません。って機能じゃないの。
型を推論できる条件を満たしていれば「その型です」
その条件を満たしていない場合は「わかりません」でおしまい。
わからない場合はコンパイルエラーがでて型を明確に書く必要がある。
型推論っていうのはね。ある条件を満たしている場合は
型を書かなくてもOKですよっていう機能。
これが「型推論」という名前で呼ばれる機能であって
「型を推論すること」じゃないの。
0788デフォルトの名無しさん
2015/12/12(土) 05:52:48.20ID:wA2CUnoz型推論は、書かれた条件を矛盾なく満たす型付けが存在する、という証明であって、
「型を書かなくてもOK」ではない。
0789デフォルトの名無しさん
2015/12/12(土) 05:53:47.22ID:wA2CUnoz>NP完全だから答えがわかるまで永遠に計算してるとでも思ってるの?
あんたがいう型推論ってのは途中で型付けを放棄するのか?w
0790デフォルトの名無しさん
2015/12/12(土) 05:55:44.71ID:kJaM603pその機能があることでプログラマに(既出につき省略)という
メリットが有るものなんだが。
証明? 証明してどうするの?
ほんと、意味不明w
0791デフォルトの名無しさん
2015/12/12(土) 06:01:17.67ID:kJaM603p> あんたがいう型推論ってのは
俺が言う型推論ってなんだ?
なんで、俺が定義しないといかんのだ?
今話している型推論っていうのは、特定のプログラム言語が持っている
機能であって、型推論の細かい定義はその言語が決めてることなんだが。
俺が知るかぎり、どの言語も、型が推論で決定できない場合は
コンピュータは推論は放棄する(だから遅くなることはない)
そして"プログラマが"明確に型付けを書くという方式をとってる。
全部の型が消えるわけじゃないが、推論で決定できる場合は
書かなくて済むというメリットがある。
0792デフォルトの名無しさん
2015/12/12(土) 06:07:30.79ID:kJaM603p型の推論が事実上出来ない場合(NP完全)は型が判明するまで
型は何かという問題をずっと解いているからとか言い出した。
本当に頭悪過ぎだろう
0793デフォルトの名無しさん
2015/12/12(土) 06:17:47.17ID:wA2CUnozそうか、君は型エラーを出したことがないんだー
すごいでちゅねーwww
0794デフォルトの名無しさん
2015/12/12(土) 06:18:41.52ID:wA2CUnozえ?型推論が証明であることも知らないで型推論騙ってたの?
すげえ笑えるwww
0795デフォルトの名無しさん
2015/12/12(土) 06:20:45.07ID:kJaM603p言語が備えた機能の一つだ。
0796デフォルトの名無しさん
2015/12/12(土) 06:26:36.75ID:kJaM603p一般的な型推論の説明であり、俺が言いたいことを書いてくれてる。
https://msdn.microsoft.com/library/dd233180(v=vs.110).aspx
俺が言ったことを補完してくれる文章で、俺は満足しているが、
ほんと、お前、どの言語の型推論の話してるんだよって感じだな。
型推論 (F#)
一般的な型推論
^^^^^^^^^^^^^^^^^^^^^
型推論を行うことによって、
コンパイラが推論によって型を確定できない場合以外は、F# の構成要素の型を指定する必要がなくなります。
型情報を明示的なに指定しないということは、F# が動的に型指定される言語であるという意味でも、
F# の値が弱く型指定されているという意味でもありません。 F# は、静的型付け言語です。
つまり、コンパイラはコンパイル時に、各構成要素の正確な型を推定します。
情報が不足しているためにコンパイラが各構成要素の型を推定できない場合は、
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
通常、コードのどこかに明示的な型の注釈を加えて、追加の型情報を指定する必要があります。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0797デフォルトの名無しさん
2015/12/12(土) 06:32:42.40ID:Pof3P0mF宜しく
0798uy ◆Qawu9.2l1E
2015/12/12(土) 07:05:33.89ID:2DARRpY/レス見てればすぐ分かるから頭が悪いとか今更過ぎてどうでも良く、
頭のレベルはすぐにはどうにもならないから
お前らは頭の悪いなりにせめて着地点を定めて議論しろ
0799デフォルトの名無しさん
2015/12/12(土) 07:29:32.44ID:WZUsKBr60800デフォルトの名無しさん
2015/12/12(土) 09:52:13.39ID:RrFopTx4> プリプロセッサを使って、独自の名前を定義することで対応していた。
typedef も使えないドカタ乙
0801デフォルトの名無しさん
2015/12/12(土) 09:55:44.87ID:MQtMVFjq0802デフォルトの名無しさん
2015/12/12(土) 10:05:41.90ID:RrFopTx4お前は一度プリプロセッサの出力を見てみた方がいい
0803デフォルトの名無しさん
2015/12/12(土) 10:34:02.89ID:wA2CUnozこれでも読めバカ
http://d.hatena.ne.jp/m-hiyama/20120207/1328601663
0804デフォルトの名無しさん
2015/12/12(土) 10:40:09.38ID:wA2CUnozhttp://d.hatena.ne.jp/kazu-yamamoto/20130311/1362987380
0805デフォルトの名無しさん
2015/12/12(土) 11:46:47.53ID:AwwUCViPある意味Cの時代からあったよ
int i = "text";
このコードがコンパイルエラーになるのは代入の右辺の型と左辺の型が一致していないからだ
静的型言語では、大昔からコンパイラは式の型を広義の意味で推論しているということ
少し時代が進んでC++のオーバーロードの解決
これも引数の式の型を推論できなければ成り立たない
更に時代が進んでC++のテンプレート関数の引数の型推論
これは完全に型推論の一種
更に時代が進んでautoが追加されたというだけ
今更型推論について語るのはバカげている
0806デフォルトの名無しさん
2015/12/12(土) 11:54:41.52ID:v/VbuB+R別に語ってもいいと思うけどなあ。
語らないから賢いというものでもないし。
0807デフォルトの名無しさん
2015/12/12(土) 11:56:52.07ID:V0PFtzIh0808デフォルトの名無しさん
2015/12/12(土) 12:00:26.42ID:V0PFtzIh静的だとお前何宣言してないプロパティ勝手に使っとんねんと切れるが、動的だと何も言わない
あと型推論と型付けにおいてパフォーマンスの影響を議論しないとかレベル低すぎるんだが
本質的な問題を避けて、どうでもいいことをgdgd喋るのは無能の証左と違うんか
0809デフォルトの名無しさん
2015/12/12(土) 12:02:44.86ID:B4iyQ5Rc未知のメソッドなどというものは存在しないのだから
基底のオブジェクト型に仮想メソッドとして実装しする
メカニズムを作れば動的も静的も同じことなんだよな
0810デフォルトの名無しさん
2015/12/12(土) 12:06:24.08ID:YXeNACNC0811デフォルトの名無しさん
2015/12/12(土) 16:26:16.27ID:qMqBVjSJ>お互いに自分の知識で解釈しようとしたら、とんでもないカオスになるでしょう。
確かに完璧な答えが書いてあった
証明みたいにいくつも解釈のしようがある言葉を説明不足で言うから揉めるんだね
0812デフォルトの名無しさん
2015/12/12(土) 16:41:40.67ID:MQtMVFjq論理の推論の話をしてる。
> そんな事情でして、「型推論」の「推論」がそもそも論理で言う「推論」とは違ったりしています。
プログラム言語に「型推論」って機能があることを知らないのだ。
アホかと。
0813デフォルトの名無しさん
2015/12/12(土) 16:44:09.23ID:wC4tKrPt> 静的だとお前何宣言してないプロパティ勝手に使っとんねんと切れるが、動的だと何も言わない
動的だと、実行時に言うだけだよ。
だからコードの中で、obj.hoge() なんてコードを書いていると、
どっちみち、このコードはhoge()がある型でしか動かない。
動かないコードを実行前にエラーで教えてくれるか
実行時にエラーになるかの違い。
当然前者のほうが良い。
0814デフォルトの名無しさん
2015/12/12(土) 16:50:16.80ID:AwwUCViPその意味では静的型言語の方がより多くのチェックを静的にするから
コンパイラが高性能といえる
0815デフォルトの名無しさん
2015/12/12(土) 16:55:59.43ID:wC4tKrPt> 型推論ってそんな珍しいものではなく
> ある意味Cの時代からあったよ
それは、型を推論しているってだけで、
型推論という機能じゃないでしょ。
プログラミング用語として型推論っていう言葉があるんだよ。
>>811
>お互いに自分の知識で解釈しようとしたら、とんでもないカオスになるでしょう。
それは>>787の時点で指摘されてる。
今は型推論って用語の話をしているのに、一人(?)型の推論の話をしてる奴がいる。
0816デフォルトの名無しさん
2015/12/12(土) 18:16:07.17ID:SO30aUaP0817デフォルトの名無しさん
2015/12/12(土) 18:36:40.07ID:RrFopTx4「ある意味」って言葉も理解できないのか…
0818デフォルトの名無しさん
2015/12/12(土) 18:50:27.05ID:kXr2f1RY0819デフォルトの名無しさん
2015/12/12(土) 19:11:36.46ID:wC4tKrPt曖昧な言葉を使わないように。
「例外ってそんなに珍しいものではなく
ある意味Cの時代からあったよ」
なんて言えば、Cに例外はないって
言われるのと同じこと。
0820デフォルトの名無しさん
2015/12/12(土) 20:04:48.62ID:RrFopTx4> なんて言えば、Cに例外はないって
> 言われるのと同じこと。
こう言うのも知らんのだろうな
http://www.nurs.or.jp/~sug/soft/super/longjmp.htm
0821デフォルトの名無しさん
2015/12/12(土) 20:23:31.96ID:wC4tKrPt知ってて>>819を書いた。見事に引っかかったね。
レスする言葉は決まってる。それは例外じゃない
0822デフォルトの名無しさん
2015/12/12(土) 20:30:59.07ID:wC4tKrPtアセンブリ言語だけでできるのを知ってるんだよ。
プログラミング言語の○○という機能、構文はそれを簡潔に記述するように作って
その構文に対して名前をつけた物なんだから、その同等の機能をもっと
低レベルのレイヤーの物(例アセンブリ言語)で同じことが出来たからって
同じ名前をもらえるわけじゃないんだよ。
一番重要な「簡潔に記述できるようにした構文」が無いんだから。
0823デフォルトの名無しさん
2015/12/12(土) 21:10:19.62ID:KEtUbtMSでもこれは知らんかっただろ?
https://github.com/guillermocalvo/exceptions4c
0824デフォルトの名無しさん
2015/12/12(土) 21:11:47.94ID:wC4tKrPtオレオレライブラリと変わらん。
0825デフォルトの名無しさん
2015/12/12(土) 21:38:26.76ID:KEtUbtMS0826デフォルトの名無しさん
2015/12/12(土) 21:42:10.81ID:wC4tKrPt0827デフォルトの名無しさん
2015/12/12(土) 22:10:03.25ID:RrFopTx4> それは例外じゃない
うん、君はそう言ってりゃいいんじゃん w
俺は君の教育係じゃないから君がどう思おうと関係ないし
普通の人は、>>820 のリンク先見れば、
「ネストされた関数の中から一気に抜けることができる」
と言う機能について例外と類似であると理解できるからね
0828uy ◆Qawu9.2l1E
2015/12/12(土) 22:32:37.03ID:kXe6VXWP0829デフォルトの名無しさん
2015/12/12(土) 22:48:00.95ID:9t6Vgvr8自分のわかる単語ググりながら関係ない話題で俺が勝った勝ったと勝利宣言て…
0830デフォルトの名無しさん
2015/12/12(土) 23:08:24.75ID:V0PFtzIhてかアセンブリで実装できないことを高等言語なら実装できるなんてことあるはずがない
計算可能性のレベルではなく実装速度と抽象性が高等言語を使う意味なのに
何、「低レベル」な話してるんだ?
あと型推論はCにはついてねえから、型省略しても動作してから型推論してると言ってくれ
それもインタープリタパターンやライブラリ使えばそういうのも実装できるが、
標準的な言語仕様から逸脱して、この機能があるだのないだのいったって仕方ないってなんでわかんねえのかな
0831デフォルトの名無しさん
2015/12/12(土) 23:10:29.69ID:V0PFtzIhそれを強いられる領域もあるわけだし、だがアセンブリはもはや汎用言語ではありえない
0832デフォルトの名無しさん
2015/12/12(土) 23:15:26.49ID:v/VbuB+R0833デフォルトの名無しさん
2015/12/12(土) 23:16:15.84ID:wC4tKrPt> てかアセンブリで実装できないことを高等言語なら実装できるなんてことあるはずがない
アセンブリ言語で ”簡単に" 実装できないことを、
高級言語なら "簡単に" 実装できることはあり得る。
(というかそのためにに作ったのが高級言語。)
一番重要な、"簡単に" を省略するでない。
意味が全く違ってしまう。
0834デフォルトの名無しさん
2015/12/12(土) 23:28:31.31ID:zJC8Kbfqゴール設定されてない不毛な議論なのは読み取れたけど
0835デフォルトの名無しさん
2015/12/13(日) 00:07:49.51ID:NzQ2L3Wh「型推論はCでも使えるよ!」かな?
もう、なんの話だかさっぱりわからんけどw
0836デフォルトの名無しさん
2015/12/13(日) 00:16:09.63ID:COkyVaqnwww
0837デフォルトの名無しさん
2015/12/13(日) 01:23:07.21ID:JyylBzJi0838デフォルトの名無しさん
2015/12/13(日) 02:24:08.73ID:q1Jv4QVgJava?
0839デフォルトの名無しさん
2015/12/13(日) 02:57:15.08ID:liGcPy84最初にJavaだけは止めたほうがいい。馬鹿になるから。
0840デフォルトの名無しさん
2015/12/13(日) 03:54:41.89ID:NzQ2L3Whコンピュータのしくみとメモリへの実際の格納に留意しながら
Cで古典的な関数と呼ばれる単位と構造化、制御の基本を勉強。
さあて、その次の段階がクラスとオブジェクト指向なんだが…
俺の立ち位置だとObjective-CでiOSアプリ作ってみるといいよになっちゃうんだよなぁw
(環境はMacになってしまう)
次善でJavaでAndroidアプリ(こちらは環境問わない)
Web系の言語で勉強にいいのがあるとは思うんだがそっちは詳しくないので
あまり具体例が出せない。(言語的に面白いRubyか手軽なjavascriptか?)
どんな言語でもそうだけどその言語が"なぜそうなってるか"を捉えること。
なんらかの問題を解決するためにそれらはCと同世代の単純なシステムから分岐してきたので
そこを捉えないと言語の特性が活かせない。
そのあとは自由に。いわゆる各社のモダンな言語に行ってもいいしC++に遡ってもいい。
ただ、現代のオブジェクト指向全体での立ち位置としてC++は非常に微妙な(変わった)
位置にいるので、CからC++へ直接だけは絶対にやめること。道を見失う。
0841デフォルトの名無しさん
2015/12/13(日) 03:56:34.68ID:liGcPy840842デフォルトの名無しさん
2015/12/13(日) 04:05:13.51ID:jqUVRuk3オブジェクトシステムならCLOSを勉強すればいいし
関数型を勉強したいならS式を追いかければいい
S式を追いかければXMLやJSONなども違和感なく理解できる
それからOSコールとかスレッディングとかGUIフレームワークなんかをかじればいい
再帰に適さない言語、値と参照の区別が明確でない言語から入ると
どうしても複雑なシステムは組めなくなってしまう
そうなってしまっては手遅れだ
プログラムの勉強と、「ライブラリ」の勉強は別ものだし
ライブラリの正しい適用方法を知るためにはまずプログラムの勉強をする必要がある
0843デフォルトの名無しさん
2015/12/13(日) 06:26:36.52ID:WlyYs++B0844デフォルトの名無しさん
2015/12/13(日) 06:41:11.51ID:0R70anXZだーかーらー、
ちゃんとしたプログラミング言語のちゃんとしたMilner型の型推論は
単一化による証明そのものだって教えてやってるのに
お前がバカすぎて理解できないだけだってことを自覚しろバカ。
0845デフォルトの名無しさん
2015/12/13(日) 06:44:28.22ID:/K7CibiU> 例外と型推論ははっきり言って違うんじゃねえの
いったいどこからそんな話が…
0846デフォルトの名無しさん
2015/12/13(日) 08:07:38.32ID:NoovkWNNお前が好きなもの=ちゃんとした物っていう
クソくだらない単純な考えは捨てなさい。
世の中には色んな物があり、型推論もいろんな言語にあって
違いはあっても、それらは全部ちゃんとしたもんなんだよ。
で、Milnerというのは型推論のアルゴリズムの話であり、
今ここで話している、いろんな言語にある型推論機能とは全く違う話。
お前の理屈では「ちゃんとした型推論のアルゴリズムは遅いから、
すべての言語の型推論機能は遅いんだ」という結論に持って行きたいんだろうが、
いろんな言語に備わってる型推論と呼ばれる機能は、実用的な型推論アルゴリズムを
使ってるから遅くならないんだよ。
0847デフォルトの名無しさん
2015/12/13(日) 08:17:56.77ID:tW1uBOyNhttp://tamae.2ch.net/test/read.cgi/prog/1449882422/
0848スッキリ厨
2015/12/13(日) 08:26:15.57ID:Be8+1Kcaオブジェクト指向を学ぶ、究極の一冊!
これに勝る本は、いまだ発見できていないw
スッキリわかる Java入門 第2版、2014
0849デフォルトの名無しさん
2015/12/13(日) 08:54:31.01ID:ChqQhcbA実用的な型推論アルゴリズムを使った型推論を持つ言語をいくつか教えてください
0850デフォルトの名無しさん
2015/12/13(日) 08:58:45.36ID:0R70anXZ現状、実用化されているアルゴリズムで学術的な意味で型推論と呼んでいいのはMilner式の型推論ぐらいなものだから「ちゃんとした」と言っている。
君の知識は浅すぎて話にならない。
0851デフォルトの名無しさん
2015/12/13(日) 09:31:20.95ID:vTsQIIrwC++は一時期Java推しやRuby推しの人々から散々disられた。今はその復讐がゴールですw
0852デフォルトの名無しさん
2015/12/13(日) 09:33:22.49ID:NoovkWNN「型推論」で検索するといいよw
この間出した、F言語にもあったかな。
0853デフォルトの名無しさん
2015/12/13(日) 09:34:09.63ID:NoovkWNN>学術的な意味で型推論と呼んでいいのは
知るかよw
俺が言ってるんじゃない。各言語が「型推論」という
機能を備えているんだよ。
0854デフォルトの名無しさん
2015/12/13(日) 09:36:29.88ID:NoovkWNNhttps://ja.wikipedia.org/wiki/%E5%9E%8B%E6%8E%A8%E8%AB%96
> 型推論を持つ言語としてはHaskell、ML、Vala、C#、Java、Scala、OCaml、
> D言語、Concurrent Clean、C++11、Swiftなどがある。
> 静的型付け関数型言語のほとんどがなんらかの型推論の機能を持っている。
これは事実。事実として型推論を持ってる。
これらが型推論じゃないと言いはるのは勝手だが、
それはお前の希望であって、事実ではない。
事実はこれらの言語は型推論を持ってる。
0855デフォルトの名無しさん
2015/12/13(日) 11:08:17.95ID:pESYzzDm多くの型注釈を省略できる優れた言語から見ると、劣った言語と一緒にされたくないのは分かる
0856デフォルトの名無しさん
2015/12/13(日) 11:13:45.46ID:pESYzzDmc#やJavaのような「劣った」型推論は含まれないことは注意が必要だね
だって省略できるのは極一部で動的型付言語とは似ても似つかぬ冗長さだからね
0857デフォルトの名無しさん
2015/12/13(日) 12:06:32.47ID:G+bJpCOEリアルタイムで解析できないレベルの複雑な推論はあえてしない方針だったはず
コンパイル時の推論だけの言語とは目的が違うから、しょうがないね
0858デフォルトの名無しさん
2015/12/13(日) 12:57:30.72ID:JyylBzJiてか個人的な希望としてはオブジェクト指向の話ならDDDとか設計ベースの話のが為になりそうなんだけど。。
0859デフォルトの名無しさん
2015/12/13(日) 13:14:27.14ID:J2FjjwDn> ファジーであることを強いられる
いい表現だわな。全くもってそうだよな
コード上に明確な表現として現れない暗黙知をあちこちにばら撒くのが非関数型のOOPL
それで抽象化できていると主張しちゃうもんだからタチ悪い
人間がオブジェクト様の機嫌を伺いながらコーディングしなくちゃならない
0860デフォルトの名無しさん
2015/12/13(日) 13:23:11.58ID:0R70anXZ事実として、Milner式の型推論とC#あたりのアドホックな型推論では
技術要素として全くの別物なのだが。
いいかげん自分のバカさに気付けバカ
0861デフォルトの名無しさん
2015/12/13(日) 13:26:19.26ID:JyylBzJi>コード上に明確な表現として現れない暗黙知をあちこちにばら撒くのが非関数型のOOPL
普通は内部メンバに対する型を気にしないで操作できるようにしたり、
テストでそのメソッドの動作を明示したりしないとまともに使えるものにはならない。
少なくとも上の連中みたいに暗黙知を押し付けるような連中が使うととんでもない結果になるだろう。
多分、ソースコードだけではオブジェクト指向は上手く行かないだろうな。
テストコードがある程度ないと糞みたいな抽象化で溢れかえったコードになる。
0862デフォルトの名無しさん
2015/12/13(日) 14:29:42.26ID:Jgh5Vnm+左辺値の型から右辺値の型を推論するような変則的なこともやっているよ
0863デフォルトの名無しさん
2015/12/13(日) 15:18:40.13ID:0QU1fglEコストがほとんど無視できるから、「型推論にデメリットなし」だと主張しただけのことか
0864デフォルトの名無しさん
2015/12/13(日) 15:55:40.98ID:G+bJpCOEそいつは最初から後ろの意味で型推論という言葉をつかってるってはっきりいってると思うが
C#とかではそれを型推論と言ってるわけで、まちがいではない
実際、C#とかでは証明よりも単に型の省略のほうが近いし
0865デフォルトの名無しさん
2015/12/13(日) 15:57:07.81ID:G+bJpCOEint x;
x.
まで打った時点でメンバが表示されることを期待したい
そうするとその後で入力する代入やらを元に型を決めるだと遅すぎる
0866デフォルトの名無しさん
2015/12/13(日) 15:58:21.25ID:pESYzzDm補完が遅くてイライラする言語ってなんだろう?
0867デフォルトの名無しさん
2015/12/13(日) 16:02:58.47ID:pESYzzDmそれ未初期化変数のメソッド呼ぼうとしてるよ
0868デフォルトの名無しさん
2015/12/13(日) 16:08:25.42ID:J2FjjwDn(高ランク型がネストしまくるパターンとか?)
リアルワールドHaskeller的には普段から悩まされたりすんのか?
0869デフォルトの名無しさん
2015/12/13(日) 16:13:37.07ID:NoovkWNN自分が気にいらないからって「なんちゃって」にするな。
お前が求める型推論は遅すぎて実用にならないんだろ?
そっちの方が意味無いじゃんw
0870デフォルトの名無しさん
2015/12/13(日) 16:16:15.80ID:G+bJpCOE例が適当だった
int x = 0;
x.
に訂正で。これでxが型宣言なくて高度な型推論があるとintに決定できない
0871デフォルトの名無しさん
2015/12/13(日) 16:22:33.16ID:J2FjjwDn数値リテラルの型がポリモーフィックとかじゃなけりゃ
0872デフォルトの名無しさん
2015/12/13(日) 16:26:01.42ID:pESYzzDmその場合はintやdouble等に共通の基底型、いわば数値型みたいなもののメンバしか呼べないだろうね
でもそれで充分なケースでは、そっちの方が汎用的なコードになるよ
0873デフォルトの名無しさん
2015/12/13(日) 16:46:29.72ID:G+bJpCOEそれは珍しいパターンとしても、さらに
var x = 0;
hoge( x ).
ってしたときに、複数のオーバーロードがあると戻り値の型が解決できない
補完の為にわざわざもどって型を明示とかすると高度な型推論が活用しにくい
0874デフォルトの名無しさん
2015/12/13(日) 17:01:29.21ID:0R70anXZ0875デフォルトの名無しさん
2015/12/13(日) 17:35:14.94ID:q1Jv4QVgありがとうございます
本屋で探してみます!
0876デフォルトの名無しさん
2015/12/13(日) 18:02:25.39ID:M1GzVrJh自分が気に入っているからって「なんちゃて」程度で十分だと思うな。
お前が求める型推論はバカすぎて実用にならないんだが?
そんな知識、意味無いじゃんw
0877デフォルトの名無しさん
2015/12/13(日) 18:12:18.28ID:ydAgND1J0878デフォルトの名無しさん
2015/12/13(日) 18:21:59.14ID:vZCVcD/l残業代稼げるからいいじゃん。
0879デフォルトの名無しさん
2015/12/13(日) 18:24:22.77ID:NoovkWNN> お前が求める型推論はバカすぎて実用にならないんだが?
お前のの言う実用って、何ができること?
0880デフォルトの名無しさん
2015/12/13(日) 18:25:08.42ID:NoovkWNN型推論を使って、何ができることが実用なのか、
いってみな。
0881デフォルトの名無しさん
2015/12/13(日) 19:02:50.14ID:JyylBzJiいいから型を明示的に書けやカスと。
で、こういう糞みたいな抽象論掲げる奴に限ってテストは書かないから。
0882デフォルトの名無しさん
2015/12/13(日) 19:04:37.06ID:84gYSv9y0883デフォルトの名無しさん
2015/12/13(日) 19:12:28.27ID:4R4l3KWI"初学者にFORTRAN教えると型を宣言ってとこで
もう一段深いこと教えなきゃいけないから進まねぇ
よーし、パパ!宣言不要で単精度と文字列変数だけでいいようにしちゃうぞ〜!"
の尻尾がこんなとこでビクンビクンしてるとは思ってもいるまい。
タイプ減るから!(キリッ)じゃねぇよ。
0884デフォルトの名無しさん
2015/12/13(日) 19:13:06.23ID:lFeNetkBジェネリクスがあるか、HKTがあるか、GADTがあるか、とかで随分変わる。
あと言語がどこで、どこまで型注釈を省略してもいいかにもよるわ。
Haskellみたいにほぼ型注釈不要なものもあれば、関数のシグネチャは省略不可能にしておくことで型推論のコスト抑えたりする言語もある。
Cは型推論とか別に要らないくらい型システムはシンプル。だけど関数ポインタは脳を壊すわ...
0885デフォルトの名無しさん
2015/12/13(日) 19:14:16.37ID:NoovkWNN> いいから型を明示的に書けやカスと
別に(実用的な)型推論がある言語でも、全てを省略できるわけではないので。
(できたとしたらそれは動的型だ)
(実用的な)型推論って機能は、プライベート変数等の省略できる所と
パブリックな省略できない所があるわけで、わかりにくくならないかぎり、
省略できる型記述は省略していいと思うよ。
型推論なんて何度も同じ型を書くのが面倒だから省略できますってだけの機能で、
型は今までどおり静的に決まってるんだからさ。
0886デフォルトの名無しさん
2015/12/13(日) 19:37:57.89ID:pESYzzDmHaskellの型クラスとか勉強するといいよ
解決してるから
0887デフォルトの名無しさん
2015/12/13(日) 20:30:55.33ID:JyylBzJi>パブリックな省略できない所があるわけで、わかりにくくならないかぎり、
>省略できる型記述は省略していいと思うよ。
いやだからこんな単純な結論しかないわかりきった結論に対して
馬鹿がドヤァしたいだけで糞議論をいつまで続けるのかと。
0888デフォルトの名無しさん
2015/12/13(日) 20:59:06.96ID:NoovkWNN俺に言われても困るw
この会話があるかぎり、俺も参加し続けるだけの話。
0889デフォルトの名無しさん
2015/12/13(日) 21:17:33.43ID:vZCVcD/lコメントコメントうるせぇ [無断転載禁止]?2ch.net
http://tamae.2ch.net/test/read.cgi/prog/1449700487/
> 82+1 :仕様書無しさん [↓] :2015/12/13(日) 12:17:03.00
> こういうコメントは必要
> //1なら甲
> //2なら乙
> if(a==1)
>
> 87+2 :仕様書無しさん [↓] :2015/12/13(日) 18:47:57.22
> >>82
> こうすれば、コメント不要
> if(a.isKou())
>
> 88+1 :仕様書無しさん [] :2015/12/13(日) 20:06:54.82
> >>87
> 値が増えるごとにメソッド作る気かバカ野郎。
> 屋上屋を建て増ししていくようなものだろうが。
>>87 のクソザコはありえねえだろ。
>>88 さんってとてもかっこいいよな。
0890デフォルトの名無しさん
2015/12/13(日) 21:18:23.85ID:jYhwAGDq> できたとしたらそれは動的型だ
推論と自明の区別だけじゃなく
静的型付けと動的型付けの区別すらできてないのか…
0891デフォルトの名無しさん
2015/12/13(日) 21:59:56.53ID:ChqQhcbAIntention Revealing Namesパターンを知らない人なんだろうな。
http://objectmentor.com/resources/articles/Naming.pdf
0892デフォルトの名無しさん
2015/12/13(日) 23:00:45.58ID:NoovkWNN型を全て省略できる、静的型付け言語を教えてw
まあ無理だろう。おまえのそのレスからして、
俺の言っていることを一切論理的に否定できてないんだからね。
0893デフォルトの名無しさん
2015/12/13(日) 23:08:18.94ID:NoovkWNN> 推論と自明の区別だけじゃなく
型を推論して、
型が自明な時に限り
省略できる機能が
型推論だよ。
推論と自明の区別をつけるのはあんただね。
0894デフォルトの名無しさん
2015/12/13(日) 23:28:46.16ID:lFeNetkB0895デフォルトの名無しさん
2015/12/13(日) 23:59:40.20ID:liGcPy84なぜなら使われない理由がマイナーであることが理由だからだ。
c++、c#、javaをもっていかにオブジェクト指向が愚かであるか力説してもらわないと。
0896デフォルトの名無しさん
2015/12/14(月) 00:09:25.79ID:YXBLFy0AHaskellやOCamlは低脳なドカタ連中には難しすぎる
0897デフォルトの名無しさん
2015/12/14(月) 00:51:49.29ID:pIJ3pt3j敬遠してる人が多いからかな
0898デフォルトの名無しさん
2015/12/14(月) 00:57:49.10ID:4u8Hbpq9馬鹿が難しくしてるだけだよ。
きれいに書けばかなり簡易な言語ではある。
0899デフォルトの名無しさん
2015/12/14(月) 04:32:33.27ID:PCT38V0VまだいまのところiPhone/iPadのアプリの9割以上がObjective-Cで作られていて
動的型付けのオブジェクト指向言語で作られたアプリが
毎日の通勤電車のそこら中でまったく不具合なく動作してるのが見られるはずですが、それは。
0900デフォルトの名無しさん
2015/12/14(月) 04:43:58.40ID:sXTPVO5Qしかし、c++の圧勝。objective-cは最初から誰にも相手にされなかった。理由は明白だった。仕様がお粗末だったからだ。
そして一度は完全に忘れられ消えた。
それから20年後・・・ 続きはWEBで
0901デフォルトの名無しさん
2015/12/14(月) 04:49:49.38ID:YC/mnP+ViPhoneアプリの開発はObjective Cのみ
とすることで、ようやく日の目を見た。
言語の魅力だけでは普及させることは出来なかったのだ。
0902uy ◆Qawu9.2l1E
2015/12/14(月) 05:51:30.34ID:5XsAAUmf今どきどの言語でも殆ど同じことが出来るようになってきて、あとは単なる構文の違いでしかないのに
好む人間が少数しかいない構文の言語は、これからどう頑張っても主流にならないことが確約されてる
0903デフォルトの名無しさん
2015/12/14(月) 07:40:07.88ID:4tQby545nyの小さな脳を完全にオーバーフローさせるからな
そこから何かを学ぶなんて発想は、まあ出てこないわな
0904名無しさん@そうだ選挙に行こう
2015/12/14(月) 08:09:45.50ID:Tz3Y65AUiOS、Android、Linuxサーバーの三点セット開発
http://peace.2ch.net/test/read.cgi/tech/1449616305/
0905名無しさん@そうだ選挙に行こう
2015/12/14(月) 09:13:26.88ID:gZRCdf8G「適当」っていい意味で使われるのと悪い意味で使われるのが半々くらいだから困る。
0906名無しさん@そうだ選挙に行こう
2015/12/14(月) 12:46:54.61ID:sdoP8av5俺はこう言う掲示板では
いい意味: 適切
悪い意味: テキトー
って使い分けてる
0907名無しさん@そうだ選挙に行こう
2015/12/14(月) 13:36:33.02ID:mDXrbvSN0908名無しさん@そうだ選挙に行こう
2015/12/14(月) 14:19:53.29ID:PCT38V0V>理由は明白だった。
特徴である柔軟な動作を可能とする動的ディスパッチを行うためのランタイムの必要が
90年代の貧弱なCPUパワー下では「無駄なオーバーヘッド」とみなされたのだ。
結果としてOSレベルでランタイムを組み込まれたNeXT(nextstep)でのみ採用となり
そのNeXTは「コンピュータサイエンスを志すものは一度は触るべき」と絶賛されつつも
ビジネス市場で成功することはなく消えていった…かにみえた。
1998年ジョブズが次世代MacOSのベースとしてnexstepを引っさげてAppleに復帰する。
nexstepをベースに再構築されたMacOSXは柔軟な設計により
順調にバージョンを上げつつ成功を収め、そのメイン言語であるObjective-Cは
MacOSXサブセットのiOSを載せたiPhone/iPadの発売,普及により
TIOBE常連言語へと躍進を遂げるのである…
0909名無しさん@そうだ選挙に行こう
2015/12/14(月) 14:31:26.78ID:sXTPVO5Q>>908 を読めば分るようにnextstep、osx、iosのパクリ先であるBSDの話は全くもって出てこない。
ジョブスとマカーは常に嘘をつくのだ。都合の悪いことはすべて隠すのだ。
0910uy ◆Qawu9.2l1E
2015/12/14(月) 15:10:49.93ID:WJU5GahL広く使われているかどうかが、今後残る言語ってわけじゃないよ
ITの進化の方向性とズレたパラダイムは
仮に現在多く使われててもどんどん廃れていく
極まれにIT以外から資金得てるのか知らんけどJAVA、PHPみたいな
キチガイみたいな言語がいつまでも居座る事あるけど
社会の暗部だから
0911名無しさん@そうだ選挙に行こう
2015/12/14(月) 15:44:38.14ID:ETDpPCfc0912名無しさん@そうだ選挙に行こう
2015/12/14(月) 16:38:00.70ID:/LlXQ+YTオブジェクト指向なんて、わざわざプログラマに負担掛けてるようなもの。作るのも面倒。
0913名無しさん@そうだ選挙に行こう
2015/12/14(月) 18:20:47.69ID:gZRCdf8G0914名無しさん@そうだ選挙に行こう
2015/12/14(月) 19:50:17.99ID:RaZIosx/組合せ回路的な状態の保持・管理に
なるべく持ち込まないようにするのが
大規模なソフトウエアの開発における
複雑さの爆発を抑制する上で重要だというのが
ソフトウェア工学の基本だろ
それに反してんだよ
オブジェクト指向脳に毒された初心者は
0915デフォルトの名無しさん
2015/12/14(月) 20:12:10.63ID:RaZIosx/Rubyは色々難点あるとおもう
Scalaは面白い言語だと思うが普及はいまいちで、複雑
0916デフォルトの名無しさん
2015/12/14(月) 20:18:02.70ID:7rbDUyQjScalaはhello worldのコンパイルに30分かかるからなw
0917デフォルトの名無しさん
2015/12/14(月) 20:31:53.04ID:ETDpPCfcという二重のミスをしているからな
世の中を変な角度から見つめなおす言語
宗教なのも頷ける
0918デフォルトの名無しさん
2015/12/14(月) 20:33:46.59ID:YC/mnP+Vそれはオブジェクト指向と何の関係もない。
ソフトウェアの全てが順路回路でできるわけじゃない。
出来ない部分をオブジェクト指向で作るとすっきりする。
できる部分は関数型を使えばいい。
オブジェクト指向(構造部分)+関数型(処理部分)で作るのが
一番バランスが取れている。
0919デフォルトの名無しさん
2015/12/14(月) 20:46:42.40ID:nSHfXMyU不適切は選んだ結果がよくないこと
テキトーは選ぶ過程においてよく考えずに選んでること
微妙にニュアンスが違う
0920uy ◆Qawu9.2l1E
2015/12/14(月) 20:48:42.47ID:WIf5dtaV初見で分かる奴はいない
そもそもシングルトンパターンごときのクラスを実現する為に
特異クラスなんて歪な形にする必要なかったでしょ
0921uy ◆Qawu9.2l1E
2015/12/14(月) 20:56:20.08ID:J5PYIleC今後いつまでも使われ続けるわけはないのだから
それを言語構文レベルで入れたのが間違い
ただライブラリで提供しとけばいいんです
逆にいえばデザパタによって設計概念がまとまっている機能は
長寿言語にしたいなら言語レベルで実装しなくて良いものだった
今後そのパターンが使われなくなってきた時にただ使用頻度の低い言語機能が残るだけ
rubyの特異クラスはその代表例
0922デフォルトの名無しさん
2015/12/14(月) 21:08:28.25ID:p56tRJdhあ、あれ、シングルトンクラスっていうけど
シングルトンパターン向けってわけじゃないから。
0923デフォルトの名無しさん
2015/12/14(月) 21:15:48.08ID:barGDPfiそれは一理あるが、実際には、getter, setterを乱用し
無用な状態変数的なものを格納する入れ物のように
オブジェクトインスタンスを用い、状態管理をロジカルに行おうとし
継承、参照で依存を伝播させ、
混乱したコードが書籍にまで多量にみられるではないか。
0924uy ◆Qawu9.2l1E
2015/12/14(月) 21:20:44.43ID:o+2bPWZu何向け?
0925デフォルトの名無しさん
2015/12/14(月) 21:35:52.87ID:YC/mnP+Vgetter, setterの話は論破してる。過去レス嫁。
どうせ読まないだろうから軽く言っておくと、
getter, setterは、変数のように見える関数なのであって、
このように使う。
Test t = new Test();
t.memberVar = 20;
このmemberVarが、getter, setterだ。
0926デフォルトの名無しさん
2015/12/14(月) 21:38:13.02ID:YC/mnP+V> 混乱したコードが書籍にまで多量にみられるではないか。
現実世界が状態を持っているものなのだから
それを素直に表すとそうなるのは当たり前。
キャラクターごとにHPや動きがあるような
現実世界に近いRPGゲームなんかを作ろうとすると
オブジェクト指向以外で作ると、変換に余計な負担がかかる。
0927デフォルトの名無しさん
2015/12/14(月) 21:38:55.63ID:barGDPfiほんなこたーしっちょるわい。
getter, setterが何かじゃなくて
それを使って無駄な状態管理じみたコード書いてるって話
0928デフォルトの名無しさん
2015/12/14(月) 21:41:08.55ID:YC/mnP+V> それを使って無駄な状態管理じみたコード書いてるって話
お前が言ってるのは、状態がないものを、
状態がないコードで書けと言ってるだけ。
状態がないコードだけを触った経験だけで
状態は要らないと言ってるだけ。
本質的に状態というものはこの世界に存在し、
それを無理やり変換して実装するのは無駄なコスト。
0929デフォルトの名無しさん
2015/12/14(月) 21:42:16.51ID:barGDPfi真に状態があるものは当然問題ない。
そうじゃないとこにオブジェクト指向を適用しようとして、
変な状態管理持ち込むから
0930アイ
2015/12/14(月) 21:45:20.47ID:6cQ1LEo20931デフォルトの名無しさん
2015/12/14(月) 21:46:10.34ID:7rbDUyQj現代のソフトウェア工学ではテストコードをこまめに書いて
動作を保証してリファクタリングを行って
信頼性が高く保守性の高い製品を作るっていうのが常識。
カプセル化は時代錯誤の古臭い、まだソフトウェア工学が
十分に発達しておらずバグだらけのプログラムが世に出回って
いたころの産物。
0932デフォルトの名無しさん
2015/12/14(月) 21:47:30.66ID:YC/mnP+V言い換えると、状態があるものに、関数型を使うのは間違っている。
そういう人たちに言えべき言葉が
「関数型脳に毒された初心者」だ。
>>914で
> オブジェクト指向脳に毒された初心者は
と言ってるのと同様に数が少ないだけで「関数型脳に毒された初心者」だっている。
オブジェクト指向をディスるんじゃなくて、初心者をディスれ。
初心者は技術がない!なんでだ!って言っていればいいだろう。
0933デフォルトの名無しさん
2015/12/14(月) 21:49:29.03ID:7rbDUyQjJavaScriptではprivateなどというテスタビリティを下げるだけの
クソな制限を作らせず、_valueなどのように命名規則で示すようにしている。
こうしておけば、人間が見たときもわかりやすいし、テストコードも書きやすい。
人類の知性の結晶。
0934デフォルトの名無しさん
2015/12/14(月) 21:49:44.24ID:YC/mnP+V> カプセル化はテスタビリティを下げるんだよね。
別に下げないが?
まあコードの1行1行をテストしたい(なんで?どうやって?)
ならば、難しいかもしれないが、
テストなんて入力があって、処理の結果の出力を
テストすればそれだけでいい。
0935デフォルトの名無しさん
2015/12/14(月) 21:52:53.27ID:7rbDUyQjメソッドのアクセス修飾子がprivateだったときのことを想像してみ?
寒気が走るだろ。これぜってーテストされてねえ。
運良く動いてるだけだぜって血の気引くだろ。ミッションクリティカルな
分野で働いてきた俺の感覚では手が震えるレベル。
0936デフォルトの名無しさん
2015/12/14(月) 21:56:04.08ID:7rbDUyQjテストしやすくするためだろうが。
分けたメソッドのアクセス修飾子をprivateにして
これテストしなくていいや(*ノω・*)テヘなんていう
姑息な手段を使ってたら本末転倒。メソッドなんて作らなくていい。
全部main関数に放り込め。
0937デフォルトの名無しさん
2015/12/14(月) 21:58:26.78ID:YC/mnP+V> メソッドのアクセス修飾子がprivateだったときのことを想像してみ?
だから、なんで、そんなテストしなくていい場所までテストしようと考えるんだ?
お前は、関数の中の行、1行1行をテストしてるのか?
関数の入口と出口だけを見ればいいんだよ。
0938デフォルトの名無しさん
2015/12/14(月) 21:59:57.54ID:ETDpPCfcそういう理屈ならメソッドをprivateにしなければよいだけだろう
変数だけprivateにしてメソッドをprivateにしなければ良い話だろう
どうしてもそうしたいならな
0939デフォルトの名無しさん
2015/12/14(月) 22:00:15.81ID:barGDPfi上級者の振りして頓珍漢なこと言えば顰蹙だが
初心者をせめて何の意味がある。
関数型は割りと好きだが、
関数型>オブジェクト指向と 対立軸で単純に批判したいわけではないんだよ。
昨今はやっているオブジェクト指向には問題がるよという話。
ちなみにオレは関数型万せーの立場ではない。
関数型は構造を相似的再帰分割で細分化単純化するので、
抽象的データ方(スコープを持った構造体)のような一段マクロな
構造上の仕様、約束事が細分化の中にシンプルに溶け込んで
あらわに出ない傾向がある。
ピンとこないだろうが、コンピューターサイエンス的には
関数型とオブジェクト指向は原理的に相反するものだという。
一方、モジュラリティーを目的にオブジェクト指向を実用的に
取り入れた言語も存在する。
なお、関数型はそれなりに色々弱点もある。
比較的局所で機能的なコードには強いが、大規模なシステムの中の
部品やグルーみたいな位置づけのコードは、その特徴が生きてにくいなど。
0940デフォルトの名無しさん
2015/12/14(月) 22:01:11.06ID:7rbDUyQj思わなければいけない。カプセル化っていうのはそれくらい現代の
プログラミングにおいては批判の対象になるべきものだし、
それをわかってないやつってSIerでエクセルペタペタやってる奴ばかり。
改修が入るたびに手動でシコシコペタペタ。これ面倒だからやらなくていいや
なんていう怠惰に負けてバグだらけ。テストしやすさをもとにしてリファクタリングを
行っていく現代とは完全に逆行している。
0941デフォルトの名無しさん
2015/12/14(月) 22:03:12.53ID:YC/mnP+V> 上級者の振りして頓珍漢なこと言えば顰蹙だが
> 初心者をせめて何の意味がある。
お前が最初に初心者を責めたんだろw
>>914にしっかりと書いてある
> ソフトウェア工学の基本だろ
> それに反してんだよ
> (オブジェクト指向脳に毒された)初心者は
初心者が間違ったことをしているだけ。
なぜ初心者は間違えるのか?という問題の答えも知らないのか?
0942デフォルトの名無しさん
2015/12/14(月) 22:04:06.01ID:YC/mnP+V> 思わなければいけない。
みなさん、
ID:7rbDUyQj を見つけた時点で、
これ書いたやつ、ヤバイやつだと思わなければいけない。
わかりましたか?
0943デフォルトの名無しさん
2015/12/14(月) 22:05:05.33ID:eAXtYubfそれを使えばいいじゃん
0944デフォルトの名無しさん
2015/12/14(月) 22:05:09.30ID:7rbDUyQjテストしなくていい場所なんてない。一つのバグで会社が潰れることだって
あるんだぞ。尊い命が失われることだってあるんだぞ。
一番外側の関数だけで内部の状態を網羅できるわけがなかろうが。
それをやりやすくするための関数だ。関数は機能ごとに分割しろ。
機能ごとにテストしろ。テストしなくていいと思うのならば、その
機能は使うべきじゃないものだ。そっこく削除しろ。
そんな危険なコードでユーザーの財産を奪うな。
0945デフォルトの名無しさん
2015/12/14(月) 22:05:55.34ID:ETDpPCfc0946デフォルトの名無しさん
2015/12/14(月) 22:06:48.45ID:7rbDUyQjprivateは無理だ。いくらなんでも。
protectedの間違いだろ。
0947デフォルトの名無しさん
2015/12/14(月) 22:11:27.84ID:7rbDUyQj・継承
・多態性
・カプセル化
だが、GOFも言ってるように継承は使うべきじゃない。
上に示したようにカプセル化も現代のソフトウェア工学によって
否定されている。多態性もifでいい。
オブジェクト指向が愚かな考えというのはその通り。
0948デフォルトの名無しさん
2015/12/14(月) 22:11:59.53ID:jswwcRhvカプセル化してもテストできるよ?
0949デフォルトの名無しさん
2015/12/14(月) 22:12:20.73ID:PFyCvZpYJavaScriptってさ、privateってキーワードが無いだけで、見えてはいけないものは、見えないように書けたろう
0950デフォルトの名無しさん
2015/12/14(月) 22:15:30.86ID:eAXtYubf少なくともC#ではある
最近書いてないからどれが最新鋭かは知らんが
https://csharptan.wordpress.com/2011/12/22/単体テスト/
https://msdn.microsoft.com/ja-jp/library/ms245564(v=vs.110).aspx
0951デフォルトの名無しさん
2015/12/14(月) 22:16:37.82ID:7rbDUyQjだが、外からアクセスできないようにするべきではない。
カプセル化はテスタビリティを下げる。これを肝に命じろ。
カプセル化はクソだ。汚いものを押入れの中に隠して見えなくしたところで
汚いことに変わりはない。綺麗したのではなく隠蔽したのだよ。
健全性の欠片もないしチリも積もればいつの間にかゴミ屋敷。
姑息なことをせずクラス設計を洗練させ、堂々と表に出すっていうのが
本当の清潔さ。
0952デフォルトの名無しさん
2015/12/14(月) 22:18:30.08ID:xiCTJUj5ぼくちゃんさあ、そんな80年代のオブジェクト指向を持ち出して何をドヤってるの?
オブジェクト指向の人たちもとっくにそんなの卒業して
現代的なオブジェクト指向を使っているよ?
0953デフォルトの名無しさん
2015/12/14(月) 22:19:31.01ID:7rbDUyQjしょーもない。リフレクション使って仕事した気になるな。
最初っから隠蔽しなければいい。自作自演もいいところ。
自分でテストしづらくしておいてテストするために
リフレクションという裏ワザを使い出す。もっと真正面から
プログラミングというものに向き合って欲しい。
0954アイ
2015/12/14(月) 22:20:08.99ID:6cQ1LEo2ただの関数ライブラリだ。
0955デフォルトの名無しさん
2015/12/14(月) 22:20:50.49ID:7rbDUyQjそうだ、現代的なオブジェクト指向は
当初のオブジェクト指向をすべて否定したところに立脚している。
それは俺もわかっている。お前もわかっていることを願う。
0956デフォルトの名無しさん
2015/12/14(月) 22:26:21.21ID:barGDPfi便宜のためにグローバル変数的なストレージへアクセスする
抜け道て的なみちとして、じつは結構使われてしまい、
小さいプログラムだ、とまだそれがまずいと分かりやすいが、
大規模で複雑なシステムの中では、必要だからそうしているのか否か
良くわからなくて、構造を明らかにややこしくしていくところだ。
異論は認める。
短いステップレベルの局所で見ると、アクセス制限加えて
安全性が増したように見えたり、関数なのでラッピングできるなど
メリットがあるように見えるが、その実確実に参照をややこしくし、
ステップを嵩ませシステムを複雑にさせかねない。
そうしないためには極めて厳し律速がいるがにんげんだもの
てーぬくさ
0957デフォルトの名無しさん
2015/12/14(月) 22:27:05.11ID:barGDPfi現代的なオブジェクト指向ってなによ。
まさか…
0958デフォルトの名無しさん
2015/12/14(月) 22:28:27.43ID:barGDPfi継承もまく
多態もなく
か?
0959デフォルトの名無しさん
2015/12/14(月) 22:29:14.97ID:8CnD743M何故JavaやC++のような不便なprivateやprotectedが脈々と受け継がれてるんだろうな
0960デフォルトの名無しさん
2015/12/14(月) 22:29:20.17ID:barGDPfi0961デフォルトの名無しさん
2015/12/14(月) 22:30:26.01ID:7rbDUyQjクラスはある。
継承はなしだ。
多態は微妙なところだな。
関数オブジェクトも多態の一種だしな。
多態はある意味ありだ。
0962デフォルトの名無しさん
2015/12/14(月) 22:31:09.61ID:7rbDUyQjじゃあ構造体か?
0963デフォルトの名無しさん
2015/12/14(月) 22:31:27.09ID:barGDPfiそらぁ、C++が設計ミスったんだよ。はげ自身も認めてる。
>> (cout)とかさ失敗したーって、
特徴単体だけを聞くとprivateやprotectedってよさ下に聞こえるから
アピールしやすかったんだろ
0964デフォルトの名無しさん
2015/12/14(月) 22:33:57.79ID:barGDPfigoとかSwiftのこと?
mixinなら80年代のflaverからあるからな。treitも結構前からあったと思う。
そういうのの一部を引き継いでいまのJavaとかあるから単純化したんだよ。
0965デフォルトの名無しさん
2015/12/14(月) 22:38:27.58ID:barGDPfiSmalltalk > Cのprepro 拡張 》C++ > c++0x >>変体x14
単純化>Java
Objective-c
見たいな流れ
0966デフォルトの名無しさん
2015/12/14(月) 22:42:52.55ID:barGDPfiいや無用な構造はなるべく設けない。
無駄な仕様、設計の上にぐちゃぐちゃしたこーどが覆いかぶさるだけ
0967デフォルトの名無しさん
2015/12/14(月) 22:55:22.37ID:PCT38V0VObjective-Cがなんでもアリアリからコーディング規則でちゃんと書けよ?ってやってる側からみると
必死に使える範囲を制限したあげくやっぱ使いにくいやっぱ使いにくい言って、ちょーっとずつ例外的な記法足してって
複雑地獄に自分で飛び込んでる自称オブジェクト指向たちの意味がわかんないんだよなぁ…
0968デフォルトの名無しさん
2015/12/14(月) 23:02:41.76ID:v73ucBsk>treitも結構前からあったと思う。
Traitsのことなら2006年発表だから(Mix-inとかからすれば)比較的最近
0969デフォルトの名無しさん
2015/12/14(月) 23:08:34.11ID:PFyCvZpY0970デフォルトの名無しさん
2015/12/14(月) 23:14:55.82ID:p56tRJdhもともとはCLOSのEQLスペシャライザーを意識したもので
Smalltalkのメタクラスを実現するためのものでもある。
0971デフォルトの名無しさん
2015/12/14(月) 23:42:05.29ID:barGDPfiTraits
そやたっけ、Scalaが最初だったっけかな
>>969
変数って概念が古いんだよ。おじいちゃん
0972デフォルトの名無しさん
2015/12/14(月) 23:50:47.77ID:barGDPfiいまはもうGroovyやRacketにもTraitが入ってるね…
0973デフォルトの名無しさん
2015/12/14(月) 23:57:25.10ID:J7Mv5fuRNathanael Scha"rli, Ste'phane Ducasse, Oscar Nierstrasz, Andrew P. Black.
Traits: Composable Units of Behaviour. Proceedings of the European Conference
on Object-Oriented Programming (ECOOP). Lecture Notes in Computer Science,
Volume 2743, Springer-Verlag, 2003, pp. 248-274
Nathanael Scha"rli, Ste'phane Ducasse, Oscar Nierstrasz, and Andrew P. Black.
Traits: Composable Units of Behavior. Technical Report -2, Institut fu"r Informatik,
Universita"t Bern, Switzerland, November 2002
2002~3ころのSmalltalkが最初じゃねーの?
うそこきやがって
0974デフォルトの名無しさん
2015/12/15(火) 06:12:10.52ID:yKCHfRtnID: 7rbDUyQj
ID: barGDPfi
の2人だけじゃねーかw
0975デフォルトの名無しさん
2015/12/15(火) 06:59:51.52ID:yYDdf3CTScalaのtraitは名前だけの別物。ただのmixinだよ。
traitのミソは、複数を同時にuseしたときにフラット化するかどうかだから。
0976デフォルトの名無しさん
2015/12/15(火) 07:08:33.15ID:qjG5txy20977デフォルトの名無しさん
2015/12/15(火) 07:08:58.75ID:qjG5txy20978デフォルトの名無しさん
2015/12/15(火) 07:18:44.55ID:yYDdf3CT疑問の余地ないだろ
0979デフォルトの名無しさん
2015/12/15(火) 07:26:07.16ID:yYDdf3CTいちいちなかったことにしてたらtraitもmixinも区別つかなくなるぞ
0980デフォルトの名無しさん
2015/12/15(火) 07:28:55.22ID:1zInVUKk何が最初かなんてどうでもよくねえか?
歴史を語って技術をわかった気になるな情弱。
0981デフォルトの名無しさん
2015/12/15(火) 08:23:57.76ID:qjG5txy2さてtraitに正確な定義がないとしたら、それは単に似たような用途に対して、
特性というキーワードを使っただけになるわけだが。
本物のtraitの定義はないのか?
0982デフォルトの名無しさん
2015/12/15(火) 08:31:08.46ID:qjG5txy2英単語なわけで、技術用語のように感じるけど
単なる「特性」なわけだ。
だから外国人にとっては、
class A extends B trait C とかいうのは
Bを拡張した種類A (特性Cを持つ)
のように感じるわけだ。
そこれで俺らが、特性とは〜のことであの言語で使ってる
「特性」をパクったということに何の意味があるのだるか?
言語によって特性の意味するニュアンスが微妙に違うだけではないのか?
0983デフォルトの名無しさん
2015/12/15(火) 09:28:37.27ID:cIzoqdye0984デフォルトの名無しさん
2015/12/15(火) 09:40:04.88ID:dWzipLnf0985デフォルトの名無しさん
2015/12/15(火) 09:40:24.27ID:TRpr4+TJ英語文法の目的語はobjectだからobject orientedは「目的語指向」だって主張して
文法にトンデモ解釈つけてバカ全開してたヤツ見かけたことあるけど、あれの類いかな
0986デフォルトの名無しさん
2015/12/15(火) 09:49:30.84ID:ax++RPg4形質という訳語を推したい
0987デフォルトの名無しさん
2015/12/15(火) 10:55:28.13ID:2HcBwVqGそれ以上にrubyのmixinとは違うので、
どういう根拠でmixinと呼んでるのか気になる
あれはscalaのtraitとしか言えないものだろ
0988デフォルトの名無しさん
2015/12/15(火) 11:47:16.73ID:rnQ5rq5Dミックスインというのはクラスやそれに準ずるエンティティ(抽象クラスやRubyならモジュール)を
継承パスに挿入することで実現する多重継承のひとつの手法で、Scalaのトレイトもその範疇。
対して、本来のトレイトというのは端的には、通常はクラスの一部であるメソッド辞書(メソッドの集合)を取り出して
エンティティにしたようなもので、継承パスとは無関係。クラスに組み込む(useする)ことで使用し、
複数useされた場合は合成無名トレイトが作られ(フラット化)、あらためてそれがuseされる。
この無名トレイトが合成されるときにトレイト間にコンフリクトがあれば検知されるから、
それを明示的に解消しないとコンパイルが通らない、というところがポイント。
参考まで、Scalaのトレイトと元ネタのシェルリらのトレイトとの関係についてScala設計者の見解は次のような感じ。
Unlike the original trait proposal [29], traits in
Scala are not different from classes.
[29] N. Sch?rli, S. Ducasse, O. Nierstrasz, and A. Black. Traits:
Composable units of behavior. In Proceedings of the 17th
European Conference on Object-Oriented Programming,
Darmstadt, Germany, June 2003.
http://www.bytelabs.org/pub/tpl/slides/sm@lausanne/expressionProblem.pdf
0989デフォルトの名無しさん
2015/12/15(火) 13:23:34.52ID:Ln94sVRZオブジェクト指向は愚かな考え。この世は計算式 ★2
http://peace.2ch.net/test/read.cgi/tech/1450153388/
0990デフォルトの名無しさん
2015/12/15(火) 16:59:08.09ID:HSnPmHSescalaのtraitも名前衝突してコンフリクトしたらコンパイル通らないよ
静的に検査されるところはsmalltalkより遥かに優れてるけど
0991デフォルトの名無しさん
2015/12/15(火) 23:06:52.10ID:NSMNq7E60992デフォルトの名無しさん
2015/12/16(水) 00:20:54.71ID:R3uzXom/(Scala のトレイトが Ruby のモジュール同様にミックスインだって話は納得していただけたんですかね…?)
たしかに、Scalaのトレイト同士のコンフリクトは override修飾子付き同名メソッド再定義で
回避する必要があり結果的に解消できますが、コンフリクト解消のためだけにメソッドを再定義する
という手段は、言語機能と呼ぶにはちょっとスジが違うような気がします。
あと、ミックスイン、つまりScalaのトレイト等、クラス様エンティティを継承パスに挿入する古典的な方式の問題は、
継承パスが汚染されて、super によるスーパークラスのメソッド呼び出しが素直に振る舞わないことじゃないかと。
たとえばこんな感じに、
http://ideone.com/v4MJE0
継承した B ではなく、ミックスインした T2 の同名メソッドがコールされてしまうところとか、
そうならないように、継承した B のメソッドを呼ぶには super[B] などと明示的にしないといけないところとか。
(ミックスインといっても継承なので、super でミックスインが呼ばれるのは当たり前といえば当たり前なのですが…)
なお、仕組み上、継承とは関係ないトレイトにはそういった制約は生じないので素直に書けるし振る舞います。
(ideone.com の Smalltalk はトレイトが使えなさそうな GNU Smalltalk なので、PHP で)
http://ideone.com/qFM4xa
蛇足ですが念のため、この振る舞いに関しては Ruby は super ではスーパークラスの別メソッドが呼べない仕様から
それを回避するトリッキーな手段をとると(そこで使う superclass が M2 ではなく B を返す細工があることも幸いして)
後者のトレイトと同じ結果になってしまいます。けれど、これは super が M2#m を呼ぶことを鑑みても
たまたまそうなっただけだと考えるのがよさそうです。
http://ideone.com/aFL0sL
0993デフォルトの名無しさん
2015/12/16(水) 00:31:06.80ID:oNo3I5guScalaの明示的に書かないとエラーになるのは
うっかりミスを防ぐ良い仕組みだね、って感想しか出ないな
やっぱり静的型付けって素晴らしいね
0994デフォルトの名無しさん
2015/12/16(水) 00:39:35.06ID:oNo3I5gu>この無名トレイトが合成されるときにトレイト間にコンフリクトがあれば検知されるから、
>それを明示的に解消しないとコンパイルが通らない、というところがポイント。
まさにココがポイントで、それをコンパイル時に発見できるScalaはSmalltalkより進歩してると言わざるを得ない
0995デフォルトの名無しさん
2015/12/16(水) 01:00:12.38ID:R3uzXom/いや、Smalltalkだってコンパイル時に発見できてますよ?
なんか、決定的な勘違いしてませんか?(たとえばSmalltalkがコンパイル言語と知らないとか)
0996デフォルトの名無しさん
2015/12/16(水) 01:01:55.94ID:r9ejGnsb0997デフォルトの名無しさん
2015/12/16(水) 01:07:43.78ID:oNo3I5guSqueakってやつのは実行時に例外が出るだけらしいけど?
http://d.hatena.ne.jp/nishiohirokazu/touch/20130306/1362557967
動的型付けのSmalltalkでコンパイル時にエラー出す処理系を教えてよ
0998デフォルトの名無しさん
2015/12/16(水) 01:14:48.04ID:R3uzXom/それは、コンパイル時には(検出はするが)あえてエラーは出さずに
実行時にエラーを出すスタブメソッドを動的に生成しているからですよ。
0999デフォルトの名無しさん
2015/12/16(水) 01:19:10.72ID:oNo3I5guあえてエラーを出さないw まったく意味ねーw
Smalltalkには無縁な話だけど、実務で使われる言語はデフォルト動作が大事なんだぜ
1000デフォルトの名無しさん
2015/12/16(水) 01:20:55.92ID:oNo3I5guあとコンパイル時にやってんのか動的に生成してんのかハッキリしろ
たった2行の文章で矛盾してるぞ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
10021002
Over 1000Thread運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
http://pink-chan-store.myshopify.com/
レス数が1000を超えています。これ以上書き込みはできません。