トップページ⇒tech
1002コメント394KB

オブジェクト指向は愚かな考え。この世は計算式 [転載禁止]©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:QlSu2hgW
ハゲ
0004デフォルトの名無しさん2015/11/20(金) 14:15:39.74ID:Wts0ZYH4
>>2
> 関数は肥大化すると昔ながらのグローバル変数となんら変わらんからな

うむ。そのとおりだと思うが。オブジェクト指向と何か関係あるのか?
0005デフォルトの名無しさん2015/11/20(金) 15:25:25.91ID:Ki8Q89YZ
>>4
純粋関数は副作用がないのが売りだろ?
0006デフォルトの名無しさん2015/11/20(金) 15:27:20.37ID:PQKonL9c
オブジェクト指向は3次元の建造物。
関数型は2次元の建造物。
0007デフォルトの名無しさん2015/11/20(金) 15:30:06.83ID:hg0nWx/i
すべて関数で表せば掘り下げる方向に成長する。
仮説の間違いでの手戻りも少なく、後世で解明された事実も簡単に実装できる。

オブジェクト指向は積み上げる一方なので根幹に誤りがあると総崩れになる。

Smalltalkの本来のオブジェクト指向であれば掘り下げる方向への改良もできる。
残念なことにC++やJavaなどの誤ったオブジェクト指向が広まってしまった。
0008デフォルトの名無しさん2015/11/20(金) 15:52:58.95ID:Wts0ZYH4
>>5
純粋じゃない関数は?
0009デフォルトの名無しさん2015/11/20(金) 16:17:36.93ID:AihHZrPe
>>8
不良関数
0010デフォルトの名無しさん2015/11/20(金) 16:18:05.96ID:4XBGvvmH
>>8
不順関数
0011デフォルトの名無しさん2015/11/20(金) 16:18:35.43ID:XsuuLzWL
>>8
不純関数
0012デフォルトの名無しさん2015/11/20(金) 16:19:43.53ID:XcKIoIaZ
>>8
不純異性交遊
0013デフォルトの名無しさん2015/11/20(金) 16:21:03.58ID:OhmGz24D
>>8
淫行関数
0014デフォルトの名無しさん2015/11/20(金) 16:40:53.16ID:jk/0Ka+T
汚染関数
0015デフォルトの名無しさん2015/11/20(金) 17:31:29.95ID:kZGuPtHC
汚物指向
0016uy ◆Qawu9.2l1E 2015/11/20(金) 20:35:47.09ID:QlSu2hgW
プロジェクトが肥大すれば
スコープを最小限にしても
生成するインスタンスに画像や大きなファイルが含まれたりするだろ
で、そのオーバーヘッドはどう解決するか

まさか、まとめてグローバル変数に格納(笑)?

>>1
の設計はそこら辺で現実的な速度から離脱して理想しか見てないコードになっていく
0017デフォルトの名無しさん2015/11/20(金) 20:48:09.98ID:+xrFJJW/
>>16
「純粋なコードで構成するのが 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:lO8t8nHT
自分が対応できない物を悪く言うことはよくあることだ
0020デフォルトの名無しさん2015/11/21(土) 10:34:20.65ID:tpVicDIN
争いは同じレベルで起きる カンガルーの名言
0021デフォルトの名無しさん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
>>21
> 本当に情報遮蔽できてるの?むしろデータ構造にアクセスするのになぜ(関数)が必要なんだい

うん。だからC#のように、プロパティと呼ばれる、
変数と同じように使えるけど、後から関数に変更できて、
それでもまったく使い方が変わらない。という便利な機能がある。
0024デフォルトの名無しさん2015/11/21(土) 11:44:04.40ID:PKr4CHye
血管も関数で表せるって凄いことだよね
0025デフォルトの名無しさん2015/11/21(土) 12:36:07.20ID:0ocHuz5N
アンギオか、すごいな
0026uy ◆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
オブジェクト指向のメリットの大半はFactoryMethodを使ったポリモーフィズムに集約されてる

>>26
Observerとかあるだろアホなのか
0028デフォルトの名無しさん2015/11/21(土) 16:41:47.58ID:10IsCnzu
>>26
おまえは本当にバカだなあw
0029uy ◆Qawu9.2l1E 2015/11/22(日) 02:08:16.67ID:+n9aAbt6
「ゲッター・セッター」というデバッグ用の機能を使って
アルゴリズムを記述している知恵遅れがいる事は把握している

「デザパタ」とかいうゴミがゴミを作ったような概念を
「本に書いてあったからw」という理由で間に受けるドアホがいる事もまた把握している
0030デフォルトの名無しさん2015/11/22(日) 02:21:29.68ID:3kzs1pKz
>>21
自由に書かれすぎたクソコードと直面してみろ。嫌って程解る

getter/setterが必要なのは、アクセス手段を制御可能にするためだ。
クラスなんてものを用意するのは、実装意図を明確にし、そぐわないものを機械的に弾けるようにすることで実装者の負担を減らすことができるからだ。
ソフトウエアの規模が大きくなってくると、この差が複雑さの制御可否を分けるようになる
0031uy ◆Qawu9.2l1E 2015/11/22(日) 02:22:50.09ID:+n9aAbt6
↓ ちなみにrubyでは、
↓ メンバ変数を宣言し、使用した時点で、他言語でいうゲッターセッターを定義して使っているのと同じ

↓ なので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:PUPqVJFy
Rubyなんかでオブジェクト指向騙った気になってるバカがいるねw
0034デフォルトの名無しさん2015/11/22(日) 07:06:33.14ID:LiruJHlu
プロパティーを自慢してるのかな?
0035デフォルトの名無しさん2015/11/22(日) 08:40:11.86ID:DDbKY7qA
>>310
> プログラマがgetter、setter関数を宣言する事自体が

お前、オブジェクト指向言語って言ったらJavaしか知らんの?
0036デフォルトの名無しさん2015/11/22(日) 10:48:53.45ID:V6CRtxuk
> プログラマがgetter、setter関数を宣言する事自体が、冗長and冗長

アクセッサへの批判があったから
設計上の批判かと思ったら実装上の手間の話だったでござる の巻
0037uy ◆Qawu9.2l1E 2015/11/22(日) 11:38:38.78ID:hFpqZnLD
ここまで反論なし

ソースコード上に自分でgetter,setter書いて使う奴はアホって事でFAな
0038デフォルトの名無しさん2015/11/22(日) 11:57:49.17ID:+9yGsSZo
この論旨だとC#のプロパティも冗長なのかな。
0039デフォルトの名無しさん2015/11/22(日) 11:58:35.95ID:TE9fVwTN
>>34
そのようだね
0040uy ◆Qawu9.2l1E 2015/11/22(日) 12:33:21.65ID:hFpqZnLD
言語以前にgetter,setterの概念は不要
値の参照と変更時に、何らかのログ集計が
どこかでされれば良い
追加処理を書けるよう機能を入れたとしてもそれを推奨すべきじゃないし

セッターやゲッターに処理書いて
double.x = 4 # => 8


とか本当にこれが便利だと思ってる?
= の記号の意味を書き換えるオーバーライドだ
そもそも = 使った時点で副作用作ってるのにさらにバグを混入しやすくしてる

またセッターには書かずゲッターに書いた場合
double.x = 4 # => 4
double.x # => 8

↑ wwwwwwwww

こんな事をアルゴリズムに普通に混ぜていくと
ソースコード中のすべての = 記号に疑心を以て立ち向かわないといけなくなるね
0041デフォルトの名無しさん2015/11/22(日) 12:45:50.77ID:V6ng9nqz
いまだにオブジェクト指向の概念が明確にならないのはなんでなの?
0042uy ◆Qawu9.2l1E 2015/11/22(日) 12:52:11.26ID:hFpqZnLD
C#が = 記号のオーバーライドに走ってるのは
double.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
>>41
根底からして間違っているから

論破されそうになると
「じゃあこれもオブジェクト指向な!」

を続けてきた結果
0044デフォルトの名無しさん2015/11/22(日) 13:30:01.65ID:+9yGsSZo
C#はイコール記号をオーバーロードできないよ
0045デフォルトの名無しさん2015/11/22(日) 13:44:45.76ID:QRD2Q6hy
>>40
疑心というかオブジェクトが公開しているインタフェースについて
オブジェクトに責任を持たせるわけなんだから、オブジェクトが4を8として
扱いたいならば、オブジェクトが4を8に置き換えることは自然なことだと思うが。
0046uy ◆Qawu9.2l1E 2015/11/22(日) 13:47:24.76ID:hFpqZnLD
>>44
どこからイコール記号のオーバーロードの話になったんですか?
たまに居るけどオーバーライドとオーバーロードを混ぜて考えるゴミクズは死んでくださいね
0047uy ◆Qawu9.2l1E 2015/11/22(日) 13:51:06.62ID:hFpqZnLD
>>45
それがメソッドだったら普通だけど
セッターの戻り値はどうするの? C#に規約とかあるの?
0048デフォルトの名無しさん2015/11/22(日) 13:54:36.12ID:hFpqZnLD
>>40
てかrubyで
double.x = 4 # => 8
これ書けなかったから無し
セッターに何書いても戻り値は4固定だった
0049デフォルトの名無しさん2015/11/22(日) 13:57:27.60ID:/G9D5sfy
だからObserverって言ってんだろ
デザパタ語が嫌いなら内部状態の変化でイベント駆動やりたいときどうすんだよ
このクソコテまともなシステムの設計したこと無いだろ
0050デフォルトの名無しさん2015/11/22(日) 13:58:00.10ID:hPpTOXHB
2015年第3四半期のクライアントPC、総出荷台数237万台、前年同期比21.9%減――IDCが発表

IDC 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
>>47
セッターは値を設定するものだから戻り値なしだよ。
値を取得するならゲッターを使ってくだせえ。
0052uy ◆Qawu9.2l1E 2015/11/22(日) 14:10:41.77ID:hFpqZnLD
>>49
Observerって全く関係ないワードを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:hFpqZnLD
そうだね超音波テロだね
0056デフォルトの名無しさん2015/11/22(日) 14:31:48.22ID:QRD2Q6hy
>>54
わからん。お前が言ってることはわからん。
0057uy ◆Qawu9.2l1E 2015/11/22(日) 14:32:06.80ID:hFpqZnLD
getter / setter の本質はデバッグ です


デバッグ機能としても使えるけど、実装としても使える多態化とかいらないんだよ

分離が出来ていないよ



その分離の出来ていないアホ機能で、砂上の楼閣を立てたデザインパターンの一例としてObserverを挙げたカスがいるけど


そもそもこれって初心者がゲームプログラムを記述するとき以外に使いどころあったっけ?


初心者用に作られた三輪車みたいな概念をハイレベルな議論してるスレで3度も描きこまれても正直ちょっと反応に困ってるところ
0058デフォルトの名無しさん2015/11/22(日) 14:45:48.38ID:DDbKY7qA
要約すると

getter / setter 使っても何の意味もない!
読み取り専用にしたくても書込みできちゃう!


↑ だったらsetter書くなよw

何も考えずに、getter と setter を書くからいかんのだろ。
setterに値チェック機能を入れると、特定の値しか入れられない
フィールドができて便利だぞ。
0059デフォルトの名無しさん2015/11/22(日) 14:47:25.76ID:DDbKY7qA
getter / setter の本質は堅牢性にある。

大規模プログラムを作ると、誰がどこで
どういうミスをしてしまうかわからない。

だから不正な状態を作らないような仕組みを作れる。
0060デフォルトの名無しさん2015/11/22(日) 14:52:02.26ID:+9yGsSZo
本質がデバッグっての繰り返してるようだけど素で意味が分からなくて困惑する
0061デフォルトの名無しさん2015/11/22(日) 15:00:43.56ID:QRD2Q6hy
>>59
いやそれアクセサいらなくね?
オイルマッチは息を吹きかけると火を消せるから安全と
言ってるようなもの。そもそも使わないのが一番安全。
アクセサ厨はお部屋丸焼きおじさん。
0062デフォルトの名無しさん2015/11/22(日) 15:10:07.98ID:DDbKY7qA
>>61
> いやそれアクセサいらなくね?

むしろパブリック変数が要らないと思うよ?

だって関数経由で書き込み、取得すればいいからね。


君の理屈だと、こういうことになる。
0063デフォルトの名無しさん2015/11/22(日) 15:16:23.71ID:QRD2Q6hy
>>62
パブリック変数はいらないよ。そしてアクセサもいらないよ。
僕の理屈は正しく伝わっているようだ。僕のコミュニケーション能力も捨てたものじゃない。
0064デフォルトの名無しさん2015/11/22(日) 15:23:24.36ID:DDbKY7qA
まず話をわかりやすくするためにサンプル

class 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
>>63
俺のに皮肉を理解できなかったから、
お前のコミュニケーションはアウトだよw
0066デフォルトの名無しさん2015/11/22(日) 15:25:48.01ID:QRD2Q6hy
>>65
皮肉をわかったうえで皮肉で返したつもりだったのだけど・・・(ドヤ
0067デフォルトの名無しさん2015/11/22(日) 15:28:38.17ID:QRD2Q6hy
>>64
getter / setter の本質は堅牢性にあることの説明にはなっていないようだけど。

アクセサはCOMやそれを真似て作ったJavaBeansのレガシー技術の名残でしかないからねえ!!!そこんとこよろしくねえ!!!
0068デフォルトの名無しさん2015/11/22(日) 15:33:40.27ID:QRD2Q6hy
VBやSwingがもてはやされた時代はもう終わったのだよ。
アクセサの時代ももう終わったのだよ!!
これからはWebアプリを中心にしたクロージャと非同期の時代。
アクセサなんていらない。
0069uy ◆Qawu9.2l1E 2015/11/22(日) 15:37:34.74ID:hFpqZnLD
ソースコードを推敲すれば副作用はなくなるのだから
get setにありがたみを持つ事がまずズレてる
そこまで使用頻度は高くないはずだよ
普通はインスタンス生成時に全ての初期化が終わってる
0070デフォルトの名無しさん2015/11/22(日) 15:39:13.90ID:QRD2Q6hy
>>69
俺もそれに賛成だわ。初期化のタイミングが違うものが一つの
オブジェクトにあるなら、設計が間違ってる。
0071デフォルトの名無しさん2015/11/22(日) 15:51:44.93ID:KDgQ57Ye
getter / setter 強制するプロジェクトほどデスマーチ。理由は簡単だ。作業量、コード量がやたらと増えるからだ。
そして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
>>70
ところがオブジェクトの初期化というものを積極的に行うと
コンストラクタの引数の個数やその型(<-これなんか特有の言い方があった気がするけど忘れた)
が、そのそれぞれのオブジェクトによって異なってくるでしょう

そうなるとインターフェースの宣言とその実装時に困ったことになるから
インターフェース指向のプログラムだと
結局オブジェクトをコンストラクタで初期化しないという設計になってると思うよ
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
>>64
> 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
>>72
> 普通にpublic変数でいいと思うしな

それは、gotoだとなんでもできるから、
gotoがあれば、ループや例外入らないと言ってるのと同じだよ。

それの代替となるなんでもできるものがあるのは知っている。
なんでもできるのは、問題があるから、用途ごとに特殊なものがあると便利。
そうやって、アセンブラの時代から、高級言語へと進化してるんだぞ。

アセンブラはなんでもできることの究極系。
0077デフォルトの名無しさん2015/11/22(日) 16:15:13.89ID:NW0PnoYA
>>75
でもゲッターセッター通してアクセスできるんでしょ?
クロージャーとかだったらスコープでアクセス範囲が決まるから堅牢だとは思うけど
private変数に対して「public」メソッドでアクセスできることに
どれだけの堅牢性があるの?もちろんpublicセッターは実装しないという方法でいけば
副作用は抑えられるけど、
コンストラクタでのみ初期化できるというのは
結局のところインターフェースの宣言の柔軟性が損なわれることで
実際にpublicセッターを実装しないっていうのは特有の事情を除いて考えにくいんだけど
0078デフォルトの名無しさん2015/11/22(日) 16:16:21.77ID:NW0PnoYA
>>76
それはセッターゲッターが必要な理由を何一つ語っていないよね
それはクラスがあればなんでもできるから
クラスがあればクロージャーはいらないと言ってるのと同じことだよ
0079デフォルトの名無しさん2015/11/22(日) 16:18:10.68ID:DDbKY7qA
>>77
> でもゲッターセッター通してアクセスできるんでしょ?
できなくすることもできるし、制限もかけられる。

面白い使い方の一つとしては、オブジェクトのインスタンスを生成する時に
自分のアクセス権を渡す。

権限があれば、プロパティから値を取得できるし、
権限がなければ、取得できない。

といったこともできるし、

あとからそうしたいと、仕様が変更になっても
利用側には一切修正する必要が無いようにもできる。
0080デフォルトの名無しさん2015/11/22(日) 16:19:04.94ID:KDgQ57Ye
すべてのクラスのフィールド値に適正チェックなんかやってらんない。何より面倒だし、致命的に遅くなる。
単体テスト、機能テスト一通りすれば、運用で誤ったデータはセットされない。つまりその実行時チェックコードはもういらないわけだ。
チェックは完全な外用のフィールドだけでよい。
0081デフォルトの名無しさん2015/11/22(日) 16:19:58.87ID:DDbKY7qA
>>78
> それはセッターゲッターが必要な理由を何一つ語っていないよね

書いてるぞ? ○は問題がある=問題をなくした△が必要。

いや、俺は、問題があるとだけ主張して、代替案をださない
キチガイアンチじゃねぇからw
0082デフォルトの名無しさん2015/11/22(日) 16:21:35.16ID:DDbKY7qA
あー、わかったわ。セッターゲッターが要らないって言ってる人は、

中で何も処理しないで値返しているだけで、
セッターとゲッターの両方がある場合だけを想定してるんだ。

なるほどねw
使い方がわかってなかったのね。
0083デフォルトの名無しさん2015/11/22(日) 16:25:36.59ID:NW0PnoYA
>>82
ようやくセッターとゲッターが両方ある場合は
public type memberVar;
って宣言してもいいということに合意していただけましたか
0084デフォルトの名無しさん2015/11/22(日) 16:29:20.60ID:DDbKY7qA
>>83
いやだからね。

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
>>85
> 何かを処理する必要があるならそのときに関数を容易すればいい。それは必要なのだから。

関数に書き換えるってことは、パブリックフィールドはセッターゲッターの
代替にならないと認めているようなもん。

パブリックフィールドはセッターゲッターの
機能の代替にはならないんだから、
「関数があればセッターゲッターは要らない」って言い直せ!
0088デフォルトの名無しさん2015/11/22(日) 16:35:29.08ID:NW0PnoYA
>>84
C#での(自動)プロパティ宣言は
public type memberVar{get;set;}であって
public type memberVarと同じではないんだよな

もちろん我々は関数教徒であるので、(アクセサ)メソッドの柔軟性というものはわかりますね
だが、多くの場合において必要でないメソッドまで宣言させられるということに対して
違和感を覚えないのでしょうか
0089デフォルトの名無しさん2015/11/22(日) 16:37:25.82ID:KDgQ57Ye
>>86
パブリックフィールド
 メリット:高速、楽
 デメリット:バグが入るかも

セッターゲッター
 メリット:バグの排除、コード量が増えてお金をふんだくれる。
 デメリット:遅い、手間、コードが増えて読むのが面倒。

処理内容は同じ。
0090デフォルトの名無しさん2015/11/22(日) 16:37:38.80ID:DDbKY7qA
>>88
> だが、多くの場合において必要でないメソッドまで宣言させられるということに対して

必要ないものがあるからって、
必要な事例が無くなったわけじゃないしw

それにセッターゲッターを使うことを強制されているわけじゃないだろ。

なぜ、パブリックフィールド "も" 使えると思ってるんだ?
必要なければ使わず、必要なときだけ使えばいいだろ。

お前に宣言を強制しているのは、お前の会社だろ。
0091デフォルトの名無しさん2015/11/22(日) 16:40:07.61ID:DDbKY7qA
>>89
> 処理内容は同じ。

違うぞ。だからパブリックフィールドでは出来ない問題があって
>>85みたいに
> 何かを処理する必要があるならそのときに関数を容易すればいい。それは必要なのだから。

パブリックフィールドでは出来ない! 関数を用意しなけりゃ!って
話になってるんだろ。


お前が言ってるのは、関数と同等のセッターゲッターの使い方のうち
パブリックフィールドでも実装可能な場合に限定して、同じだと言ってるに過ぎない。


セッターゲッターと比較するならば、それは関数だ。
「関数があればセッターゲッターは要らない」って言い直せ!
0092デフォルトの名無しさん2015/11/22(日) 16:44:08.34ID:NW0PnoYA
>>90
> 普通に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
>>92
> ならなぜC#はgoto文を廃止しなかったのでしょうか?

なんでもできるgotoを
なんでもできるわけじゃないgotoに変えたから
0095デフォルトの名無しさん2015/11/22(日) 16:49:11.39ID:KDgQ57Ye
多重ループの脱出はgotoが一番かっこいいから。
0096デフォルトの名無しさん2015/11/22(日) 16:49:54.97ID:nE/Af/g5
>>84
> これと全く一緒なんだって。

ダウト
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:QRD2Q6hy
>>94
gotoがあればわりとなんでもできるが。
現に俺はgotoできれいな彼女と知り合った・・・マジで・・・嘘だけど。
0098uy ◆Qawu9.2l1E 2015/11/22(日) 17:30:22.47ID:hFpqZnLD
>>82
そういう使い方があるなら>>74の質問に答えてほしいんだけど?
0099uy ◆Qawu9.2l1E 2015/11/22(日) 17:32:35.84ID:hFpqZnLD
>>79
User.new( 権限の種類 )

↑これは

Admin.new
Anonymous.new

↑これでも書ける
0100デフォルトの名無しさん2015/11/22(日) 17:44:30.31ID:+9yGsSZo
読み込み専用、書き込み専用はgetter/setterアクセスの便利な例じゃないかな
0101デフォルトの名無しさん2015/11/22(日) 18:32:45.35ID:REz3UHto
>>99
君はバカすぎるからもう二度と書くな。
0102uy ◆Qawu9.2l1E 2015/11/22(日) 18:42:08.70ID:hFpqZnLD
>>100
それをコード上でどう書くかって話でしょ
変数名の名前ひとつで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
>>101 んんんんwwwwwwwwwww
>>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:KDgQ57Ye
なるほど。言語仕様のゲッターセッターをみな使いたがらない理由がよく分ってきた。
0107デフォルトの名無しさん2015/11/22(日) 21:40:48.18ID:YVzGxfBt
オブジェクト指向って、言語レベルでのパッケージソフト提供手段でしょ?
0108デフォルトの名無しさん2015/11/22(日) 23:44:21.34ID:qQCBPK1+
C#みたいに自然にかける文法ならフィールドを公開する利点は特にない

セッターはイベントの発火とかによく使うけど、そういうことじゃないの?
0109デフォルトの名無しさん2015/11/23(月) 00:27:08.27ID:otL1GttM
>>105
getter/setterの存在意義は前提条件を縛るためだ。
Design By Contractって知ってるか?

フィールドに入る値に複雑な制約や業務ルールがあったり、外部要因(非スレッドセーフだったり、外部に依存要素がある)場合、アクセス方法を縛らないと容易に破損する。
実装対象が簡素なうちは解らないかもしれないが、
業務で書いてるなら実装対象の複雑さに苦しんだことがあるはず。
ひとつふたつなら注意で何とかなるが、これが何十何百となれば、拡張が困難になる。
getter/setterがあって、やりとりする型が保証されてさえいれば、この複雑さと直面しなくて済むんだよ。
これがメリットじゃなくてなんだと。
0110デフォルトの名無しさん2015/11/23(月) 00:31:36.58ID:HhkR6v5p
オブジェクト指向はバグの温床
0111デフォルトの名無しさん2015/11/23(月) 00:54:25.15ID:vrm5F+mP
関数型言語推し?
printfデバッグが恋しくなるんだよな
ただ、出来上がったものは確かに無駄を作りにくい言語仕様に助けられてる感覚

オブジェクト志向言語の中で、例えばC#でLINQとRx系ライブラリ使って部分的に関数型の良さを作り込むような運用が一番手軽に感じる
0112デフォルトの名無しさん2015/11/23(月) 01:23:39.10ID:553ghpA5
おまえらプロパティも知らなかった奴のスレでよく議論できるな。
オブジェクト指向の目的は「部品化による問題の局所化」と「部品化による再利用性の向上」だぞ。
つまりオブジェクト指向は関数型部品を内包するのだ。
ソースは俺だ。じゃあさいなら。
0113uy ◆Qawu9.2l1E 2015/11/23(月) 01:41:54.31ID:tOBxxsaN
>>109
アクセス制限かけるだけなら自分でset getメソッドを書く必要が無い言語を使ってるんだけど

その上で自分でget / setを定義する場合はそこに何らかの追加コードを書きたい時以外に無い
その場面をget set厨に聞きたい
0114デフォルトの名無しさん2015/11/23(月) 01:45:47.62ID:cUxBXTI5
get setラジオフューチャー
0115uy ◆Qawu9.2l1E 2015/11/23(月) 02:01:02.68ID:tOBxxsaN
まず、話が交差してるから整理すると
1 アクセサを作る事と、
2 get set内に追加コードを書くのは別の話



https://msdn.microsoft.com/ja-jp/library/x9fsa0sw.aspx
こういうコードはあり得ないと思ってる


アクセサ内に追加コードを書けるようにしておく必要性は、将来的になくなるよねって意見
0116デフォルトの名無しさん2015/11/23(月) 02:07:52.82ID:Vp6QUK7G
はいはい
0117uy ◆Qawu9.2l1E 2015/11/23(月) 02:15:22.17ID:tOBxxsaN
>>116
アクセサ内に追加コードを書かれている方ですか?
サンプルコードお願いして良いですか?

アクセサ内に追加コードを書くくらいなら
横着しないで初期化メソッドとアクセス用のメソッド作らないと後で詰むんじゃねーのアホかよという固定概念にハマってるのでこの辺よくわかりません
0118デフォルトの名無しさん2015/11/23(月) 02:28:57.76ID:Ts2SAeJV
じゃあ、それみたいに内部で秒で管理してて、時間単位でset/getしたい場合はどうかくの?
0119デフォルトの名無しさん2015/11/23(月) 02:38:57.65ID:Ts2SAeJV
>>102 のoutput1とかってgetterじゃん
0120デフォルトの名無しさん2015/11/23(月) 04:05:31.30ID:y7rZkBPC
uyがバカすぎてかわいそう…
0121uy ◆Qawu9.2l1E 2015/11/23(月) 04:23:09.37ID:tOBxxsaN
w

もう降参かよ
0122デフォルトの名無しさん2015/11/23(月) 04:41:30.72ID:y7rZkBPC
>>121
躁鬱病、はやくなおるといいな。
0123デフォルトの名無しさん2015/11/23(月) 04:45:43.23ID:bOR9krpk
関数型なら全く意識しないことをオブジェクト指向では意識せざるをえない
名詞指向といいつつ、結局はメソッド頼みなところが違和感ありまくり
アクセサメソッドとかいう特殊な名前がついちゃう時点で汎用性に疑義ありなんだが

関数型がs式やjsonやxmlやクロージャで処理することをクラスで処理した結果
再利用するためにデータ構造を読みとかなきゃいけないというね
オブジェクト指向は少なくともwebの流儀に反する
そしてスケールアウトできない
0124デフォルトの名無しさん2015/11/23(月) 06:02:54.43ID:otL1GttM
>>113

> アクセサ内に追加コードを書けるようにしておく必要性は、将来的になくなるよねって意見

限定的な条件下では同意する。
静的型付けな純粋関数型言語とかなら、確かに不要だよ。

でも、現実にプログラミングで課題を解決する時、十分な条件が整わないことも多い。
ハードに近い部分や外部API、クソみたいなライブラリを叩かされざる得ないことなんてザラだ。
そんな時、スレッドセーフにしたりインピーダンスミスマッチを吸収する遊びは必要。

getter/setterで解決するのが不適切なことも多いけど、選択肢としては入るでしょ。
0125デフォルトの名無しさん2015/11/23(月) 06:53:57.40ID:RfUMCgBD
お前らに足りない能力は共感力だ
0126デフォルトの名無しさん2015/11/23(月) 09:18:35.66ID:kd01VOk3
>>112
プロジェクトが肥大化すると部品の動きを把握するのが絶望的。
プロパティ次第でメソッドの動きが変わるんだぜ?
それを全部把握しておかないと使えない。

C言語でグローバル変数を使ったものの方がメンテナンス性は上なくらい
0127デフォルトの名無しさん2015/11/23(月) 09:20:13.66ID:HGLgGmqe
オブジェクト指向は愚かな考えなのか
0128デフォルトの名無しさん2015/11/23(月) 09:29:28.42ID:HGLgGmqe
オブジェクト指向に救いはない
0129デフォルトの名無しさん2015/11/23(月) 09:30:52.49ID:PMgWFLTK
セッターって、この掲示板でいうところの、「名前」欄や「E-mail」欄、「本文」欄のことだろ?
ゲッターって、この掲示板でいうところの、「★スマホ版★」「掲示板に戻る」「全部」「前100」「次100」「最新50」のことだろ?

んーないと困るにゃー
0130デフォルトの名無しさん2015/11/23(月) 09:41:02.93ID:Cb6WNNAz
>>127
オブジェクト指向でも貧血モデルとトランザクションスクリプトを
使ってデータを中心にしてロジックを組み上げるといい感じになる。
モデルに振る舞いまで持たせたらクソになる。
0131デフォルトの名無しさん2015/11/23(月) 11:14:46.84ID:bOR9krpk
>>130
結局ドメイン駆動は使い物にならんのか
ドメインの境界を見つける暇があったらJsonにシリアライズして越境させることを考えたほうがいいのか
0132デフォルトの名無しさん2015/11/23(月) 17:09:36.82ID:QX2C8YaD
大抵の悩みはブラウザでやってる事を参考にすれば解決するけど古い人間はそれが分かってないから
紙取り出して設計()とかしたがる
0133デフォルトの名無しさん2015/11/23(月) 17:15:36.86ID:OK+rBFmG
新しい人間は何を言ってるかよく分らないや。
0134デフォルトの名無しさん2015/11/23(月) 17:40:56.90ID:otL1GttM
>>130 >>131

ユビキタス言語についてどう思う?
DDDの本質はこちらで、モデルに振る舞いってのは実装手段だと思うんだが
0135uy ◆Qawu9.2l1E 2015/11/23(月) 22:33:16.05ID:QX2C8YaD
自分が思うに新しいゲームや本やエンタメをちゃんと見て生きないと
違う世代との感覚に差異が出てくるから、
そのせいで若い人間が何言ってんのかわかんなくなるんだよ
発想の根源はプログラミング以外の場所だよ
0136デフォルトの名無しさん2015/11/23(月) 22:36:24.90ID:s0Z0TZyN
なんのこっちゃ
0137uy ◆Qawu9.2l1E 2015/11/23(月) 22:39:10.29ID:QX2C8YaD
マイクラやってくる
0138デフォルトの名無しさん2015/11/24(火) 18:14:51.63ID:gi4wRhoM
>>135
皮肉って知ってる?
0139uy ◆Qawu9.2l1E 2015/11/25(水) 04:10:18.12ID:Qex1VIVs
1〜8を飛ばして9.10しか言わないけれど
それで理解しない人間と会話してもこちらが一方的に教えるだけにしかならない
0140デフォルトの名無しさん2015/11/25(水) 10:34:36.61ID:s9hTLLjK
若いな。

こういう若さ故の過ちというものを誰もが経験して大人になるのさ。
0141デフォルトの名無しさん2015/11/25(水) 12:36:30.55ID:LoKzz2Cb
関係ないけど、乱数発生オブジェクトにランダマイズのための初期値(現在時刻とか)を設定するメソッドがあるとして、それを「セッター」と言う?
0142デフォルトの名無しさん2015/11/25(水) 12:40:27.73ID:LoKzz2Cb
乱数オブジェクトの内部状態は多次元ベクトルなど複雑な作りになっているという前提で。
0143デフォルトの名無しさん2015/11/25(水) 13:39:23.50ID:SmR+c8iP
>>141,142
どうでもいいよ。
オブジェクトに対してtell/askするだけだから。
0144デフォルトの名無しさん2015/11/25(水) 14:20:20.67ID:LoKzz2Cb
>>143
どうでもいい、という意見は健全すぎて...
強硬な意見を聞きたかった。
0145デフォルトの名無しさん2015/11/25(水) 14:31:26.11ID:SmR+c8iP
>>144
実際、アクセサとそれ以外を区別する必要が無いんだよ。
引数があればセッターなのかとか、
外からはセッターに見えるけど内部変数を持ってるのかとか。
0146デフォルトの名無しさん2015/11/25(水) 17:01:01.21ID:Sra0FKsR
ある意味では、アクセサ以外のメソッドは、邪道だよな
0147デフォルトの名無しさん2015/11/25(水) 19:46:23.25ID:LoKzz2Cb
>>146
アクセッサなんて邪道。
コンストラクタ、デストラクタ、operator ( ) この3つだけでいいだろう。
0148デフォルトの名無しさん2015/11/25(水) 19:56:36.81ID:iOeAQZmr
オブジェクトは関数だけを持つ。って
定義するのが一番わかり易いんだろうね。

変数はすべてプライベート。
0149デフォルトの名無しさん2015/11/25(水) 20:00:49.06ID:LoKzz2Cb
しまった
0150デフォルトの名無しさん2015/11/27(金) 05:22:14.87ID:2RpgJ5AO
o.var_setter(2) とか
メンバ関数越しに値を変更してるような時代があったのかも知れないけど

それを推奨してたやつの頭がおかしかっただけ
0151デフォルトの名無しさん2015/11/27(金) 09:47:06.34ID:vrZOFMnm
今の時代はプロパティがあるからo.var = 2 とかくだけで、
内部的には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
>>151
たいして嬉しくないような気がする。
むしろ楽にできちゃう分、乱用されて困るってことない?
0153デフォルトの名無しさん2015/11/27(金) 20:18:48.86ID:rL8jDZxa
乱用されようが仕様通りに動作すればいい。
困るのはそのオブジェクトの使い方を間違ってるか、仕様通りに動作してないかだ。
0154デフォルトの名無しさん2015/11/27(金) 21:24:48.23ID:yE5slmiS
>>153
乱用ってのは安易にそういうクラスを設計してしまうのではないか?
ってことで、使う側の行動のことを言ってるんじゃないんだ。
0155デフォルトの名無しさん2015/11/27(金) 21:47:02.86ID:D0U2RhLm
そういうクラスっていうのが何のことかわからん。

クラスなんて、メソッドとプロパティしか公開していない。

メソッドは、obj.method(value) 形式で呼び出す関数。
プロパティは、 obj.prop = value 形式で呼び出す関数。

後者は関数に見えないかもしれないが、内部でトラップして
処理を入れられるのだから、書き方が違うだけで本質的には関数と同じだ。

オブジェクトにメッセージを送信する時の書き方が違うだけ。
0156デフォルトの名無しさん2015/11/27(金) 22:07:38.18ID:yE5slmiS
なんだ構文糖だったのか。トラップできるだけで内部構造を晒してしまうものなのかと思っていた。
0157デフォルトの名無しさん2015/11/27(金) 22:45:43.13ID:D0U2RhLm
トラップして全く別の値を返したり例外を出したりできるからね。

結局の所、どちらも、"関数" なんだよ

パブリック変数っていうのは悪で、なんで悪かというと
トラップして別の値や例外を出すように変えたい時に、
関数に変えないといけないから、呼び出し側に変更が生じてしまう。
だからパブリック変数を禁止するというのは理にかなっている。

パブリック変数をなくして、関数の構文糖であるプロパティを実装したC#と
本当に関数で実装するというルールを作るだけだったJavaという違いがあるだけ
0158デフォルトの名無しさん2015/11/27(金) 23:01:11.52ID:yE5slmiS
>>157
内部構造を変えるとプロパティってやつも合わせて変える必要があるのかと勘違いしてたよ。
まあ俺が言いたいのは内部構造と一対一に対応するようなアクセッサは悪だってこと。
0159デフォルトの名無しさん2015/11/27(金) 23:40:59.58ID:D0U2RhLm
アクセッサだからといって一対一に対応させる必要はない。
アクセッサはインターフェースであって内部構造とは別。

ただし、Javaにおいてはプロパティがなくパブリックフィールドへの
読み書きをトラップする方法もないのでクラスにプロパティを追加しようと
思ったらアクセッサにするしか無い。

もしくは、あとからインターフェースが変わってしまうかもしれないのを
承知でパブリックフィールドに直接アクセスさせるかだ。

これはJava特有の制限であって、C#などのアクセッサはこれらの
問題を解決しているので何の問題もなく使える。
C#ではパブリックフィールド(のように見える物)はすべてアクセッサだ。
0160デフォルトの名無しさん2015/11/28(土) 02:38:17.45ID:hrBHzyLE
C#では相互運用みたいな特殊な時以外はフィールドを公開する利点はないからね
Get○○だらけにならなくて見た目もすっきりして非常に便利
0161デフォルトの名無しさん2015/11/28(土) 04:11:48.93ID:gDtavKFE
つーか、パブリックフィールド使うなんて例外中の例外。
使った時点でオブジェクト指向ではない。
0162uy ◆Qawu9.2l1E 2015/11/28(土) 06:15:47.98ID:lBYFUN9m
副作用だらけの冗長したコードがオブジェクト指向の特徴だよ
0163デフォルトの名無しさん2015/11/28(土) 07:54:41.62ID:W/xTcAqm
>>161
ただのアグリゲーションが欲しい場合はどうするの?
0164デフォルトの名無しさん2015/11/28(土) 08:03:38.79ID:uUr7rQGR
ちょっと待て...
ゲッタ、セッタに、1対1で内部変数が紐づいてると思ってる奴がいるのか?
0165デフォルトの名無しさん2015/11/28(土) 08:39:37.38ID:jvaToXPw
>>164
>>151なんかは得意気にそういうことを語ってるように思えるね。
0166デフォルトの名無しさん2015/11/28(土) 09:14:36.10ID:gDtavKFE
>>163
クラスを構造体替わりにでも使えばいい。
0167デフォルトの名無しさん2015/11/28(土) 09:21:37.29ID:gDtavKFE
Javaってデフォルトがpackage protectedなのか?
これって実質publicだよな。
副作用がーって言ってるのは、これをあちこちから書き換えまくってるんじゃないの?
0168デフォルトの名無しさん2015/11/28(土) 09:29:04.79ID:W/xTcAqm
>>166
それは>>161の発言とは矛盾しないの?
0169デフォルトの名無しさん2015/11/28(土) 09:33:19.25ID:gDtavKFE
>>168
オブジェクトと構造体を同一視して語ってるのか?
0170デフォルトの名無しさん2015/11/28(土) 09:44:03.47ID:W/xTcAqm
>>169
>>161の発言は対象を限らず包括的に語っているようだが?
同一視ということなら>>166の発言こそがその表現にふさわしい。
0171デフォルトの名無しさん2015/11/28(土) 09:50:25.24ID:gDtavKFE
>>170
今語られている文脈でのオブジェクトとは、ただのデータの入れ物ではない。
言わなくてもわかると思うが、>>161はオブジェクトについて語っている。
実際構造体の無い言語ではクラスで代用するしか無いだろ。
で何が疑問なの?
0172デフォルトの名無しさん2015/11/28(土) 11:33:08.51ID:W/xTcAqm
>>171
>>そもそも161の書き方が悪い。文脈に関係なく語っているように見える。gDtavKFE としての最初の発言だしな。

それを 「言わなくても分かると思うが、オブジェクトについて語っている」
などと言える神経が非常に疑問だ。
0173デフォルトの名無しさん2015/11/28(土) 12:29:18.73ID:tjeMQY13
http://pbs.twimg.com/media/CGKcoJfVAAE_K_8.jpg
0174デフォルトの名無しさん2015/11/28(土) 12:38:36.65ID:W/xTcAqm
それは、二人三脚とかそういう・・・?
0175デフォルトの名無しさん2015/11/28(土) 13:00:16.00ID:rTI66XO9
>>161
アホかと。継承と多態こそオブジェクト指向の真髄。カプセル化なんてのはオブジェクト指向前からあり、C言語でも実装可能。
0176デフォルトの名無しさん2015/11/28(土) 13:09:47.25ID:gDtavKFE
>>175
真髄って程でもないだろ。
それに継承も多態もカプセルの中でやるものだ。
カプセルが外に公開するインターフェースこそが重要。
0177デフォルトの名無しさん2015/11/28(土) 13:28:39.82ID:rTI66XO9
>>176
オブジェクト思考前からカプセル化は一般的に使われてると何度言ったら。
カプセル化なんてアセンブラ時代から使われてるよ。カプセル化はオブジェクト指向を支える一つではあるが、
カプセル化してるからこれはオブジェクトだとかオブジェクトの定義を勘違いしすぎだろう。C言語はオブジェクト指向言語かっての。

日本人型とアメリカ人型があって他のシステムがどっちも人間型として扱えるのをオブジェクト指向つうんだよ。
つまり、重要なのは継承と多態を言語が機能として備えているかどうか。
0178デフォルトの名無しさん2015/11/28(土) 13:41:09.14ID:gDtavKFE
>>177
いつの昔からあるかとか、OOLの機能とかは本質じゃないだろ。
OOLはOOPをやり易くするものであって、非OOLでOOPができないわけじゃないだろ?
日本人をアメリカ人と交換しても成立するその構造こそが重要なんだよ。
0179デフォルトの名無しさん2015/11/28(土) 13:48:32.98ID:rTI66XO9
やっと分ってくれたか、その構造こそが継承と多態なんだ。
おまえの言ってたことはモジュール化プログラミング。
0180デフォルトの名無しさん2015/11/28(土) 13:55:28.59ID:gDtavKFE
>>179
継承、多態を使わなくてもプロトコル準拠なりで実現できる構造だよ。
つまりそれらOOLの機能に先立って構造が重要って事。逆なんだよ。
あとソフトウェアアーキテクチャでまず重要なのは構造化だ。
0181デフォルトの名無しさん2015/11/28(土) 14:08:17.45ID:jvaToXPw
>>177
あんたのはどちらかというとクラス指向じゃないかね?
0182デフォルトの名無しさん2015/11/28(土) 14:25:47.70ID:CP1qN2KL
>>177
継承は必ずしも必要とは言えない
継承が必要に見えても、実は継承してはいけないことは多々ある。
0183デフォルトの名無しさん2015/11/28(土) 14:49:00.27ID:5QpRQDP+
(gDtavKFEのOOL=OOPL?)
0184デフォルトの名無しさん2015/11/28(土) 15:08:32.08ID:W/xTcAqm
オブジェクト指向は、考え方でありアセンブラでもできる。
オブジェクト指向言語は、その考え方を簡単に記述できる
構文を持った言語。"簡単に記述できる"ってことが重要な所。

あんたらが本当にいいたいのは、オブジェクト指向なのか
オブジェクト指向言語なのかはっきりしろ。

継承、 多態性、カプセル化というのは、どれもオブジェクト指向の特徴。
C言語やアセンブラで実装できるかどうかは関係ない。考え方なんだから。
そしてこれらを簡単に記述できるのが、オブジェクト指向言語。
0185デフォルトの名無しさん2015/11/28(土) 15:09:53.22ID:W/xTcAqm
>>177
> オブジェクト思考前からカプセル化は一般的に使われてると何度言ったら。
それはファイルの中にカプセル化(単なるスコープ)だろ?

オブジェクト指向におけるカプセル化とは
クラスの中にカプセル化だ。
0186デフォルトの名無しさん2015/11/28(土) 15:13:28.47ID:W/xTcAqm
クラスというのはデータとメソッドをまとめて扱うこと。

C言語でもクラス(のようなものを作って)データとメソッドを
一つにまとめて扱っているかのように感じる特殊な書き方

例えばこういうのがある。

  C 言語によるオブジェクト記述法 COOL ver.2
  http://www.sage-p.com/process/cool.htm

そういう書き方をするのであれば、それはオブジェクト指向だ。
だが、これは書き方であって言語の構文ではないので

C言語でカプセル化をやっていたとしても、それはオブジェクト指向を
やってるだけでオブジェクト指向言語にはならない。
0187デフォルトの名無しさん2015/11/28(土) 15:32:24.95ID:rTI66XO9
>>185
なにが違うねん。外から隠蔽するかしないかだろ。それをカプセルと呼ぼうがモジュールと呼ぼうがやってることは同じだ。
ただ隠蔽することがオブジェクト指向だと言われれば、それは違うと言えよう。
だいたい隠蔽する粒度、ファイル単位かモジュール単位かクラス単位か程度で、
それはオブジェクト指向で、こっちはオブジェクト指向ではないとか意味不明。
いつからオブジェクト指向は規模の話になったんだ?

とてもオブジェクト指向を最後まで勉強したとは思えない。
ここにいるのは最初のカプセル化まで理解して後の継承、多態は挫折した学生みたい。
昔、多くのじじぃがオブジェクト指向についていけなかったようにな。
0188デフォルトの名無しさん2015/11/28(土) 15:34:00.47ID:W/xTcAqm
>>187
それでどこが具体的に間違っているのか
オブジェクト指向が詳しいあなた、
早く説明してくれよw
0189デフォルトの名無しさん2015/11/28(土) 15:36:43.51ID:W/xTcAqm
なにが違うねん。外から隠蔽するかしないかだろ。それをカプセルと呼ぼうがモジュールと呼ぼうがやってることは同じだ。(←理由書いてないよ)

ただ隠蔽することがオブジェクト指向だと言われれば、それは違うと言えよう。(←理由書いてないよ)

だいたい隠蔽する粒度、ファイル単位かモジュール単位かクラス単位か程度で、
それはオブジェクト指向で、こっちはオブジェクト指向ではないとか意味不明。(←理由書いてないよ)

いつからオブジェクト指向は規模の話になったんだ?(←規模の話してないよ)


とてもオブジェクト指向を最後まで勉強したとは思えない。(←お前の思い込みだよ)

ここにいるのは最初のカプセル化まで理解して後の継承、多態は挫折した学生みたい。(←お前の思い込みだよ)

昔、多くのじじぃがオブジェクト指向についていけなかったようにな。(←満足したかい?)
0190デフォルトの名無しさん2015/11/28(土) 15:51:44.98ID:jvaToXPw
やっぱりバズワードだったんや・・・
0191デフォルトの名無しさん2015/11/28(土) 16:28:53.95ID:Fi4wDTmy
Wikipedia
>オブジェクト指向
>オブジェクト指向(オブジェクトしこう)とは、オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方である。
>考え方である
>考え方である
>考え方である

つまり、リベラルだとか新自由主義だとかといった、思想の仲間
ゆるふわ
0192デフォルトの名無しさん2015/11/28(土) 17:02:50.92ID:W/xTcAqm
> つまり、リベラルだとか新自由主義だとかといった、思想の仲間

↑ この理由は?

重要な点はリベラルとか新自由主義ではなくて「考え方」とキーワードが入っているからかな?w

仏教という考え方も、科学者としての考え方というのも同じ理由で、仲間になりそうだw
0193デフォルトの名無しさん2015/11/28(土) 17:05:36.00ID:8rz9DMpx
>>185
>オブジェクト指向におけるカプセル化とは
>クラスの中にカプセル化だ。

はずれ。
クラス単位でカプセル化する言語もあれば
インスタンス単位でカプセル化する言語もある。
0194デフォルトの名無しさん2015/11/28(土) 17:14:29.96ID:jvaToXPw
>>191
ソフトウェアの書き方の一分野だよ。
自然科学や数学だって個別の概念はとても厳密に定義されてるけど、「分野」にそんな定義はなく境目は結構あいまいだ。
それをゆるふわと言って貶す必要はない。
でもやっぱりオブジェクト指向はバズワード。
0195デフォルトの名無しさん2015/11/28(土) 17:16:56.82ID:W/xTcAqm
>>193
じゃあ「クラスまたは、クラスのインスタンス単位で
やるのがカプセル化」に訂正すれば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
>>195
全てのオブジェクト指向言語にクラスがあると思うなよシロートかよ
0200デフォルトの名無しさん2015/11/28(土) 17:52:19.20ID:uUr7rQGR
>>198
君の言うレベルでオブジェクトが全ての面倒を見てくれるなら、そもそも、プログラマなんぞ要らんがな...
0201デフォルトの名無しさん2015/11/28(土) 17:54:31.47ID:W/xTcAqm
>>197
> プロパティ   副作用 = 中
> 関数      副作用 = 小

これはおかしいな。上でも書いたようにプロパティは
関数(メソッド)と同等の物なので同じになるはずだ。

プロパティは取得と代入がある。取得は何度取得しても同じ(冪等性)
関数から何度取得しても同じ、であればプロパティの取得と同じ。
これは純粋関数と同じように副作用は無しという意味でもある。

そして取得するたびに状態が変わるプロパティは作れる。
取得するたびに状態が変わる関数も作れる。これは副作用のレベルは同じだ。

次に代入だが何度呼び出しても状態が変わらない関数もある。
それが純粋関数であるが、純粋関数を別に用意して「関数 副作用 小」と書いてあるので
関数を呼び出すと状態が変わるもののことを「小」と言ってるのだろう?
だがそれはプロパティと同じなのだから「小」にならなければならない。



さて、例えばこんなプロパティはどうだろう?
関数(メソッド)でオブジェクトの状態を変更し、プロパティは読み取り専用。
これは実際によくあるパターンだ。例えばファイルをopenメソッドで呼び出し
ファイルハンドルはプロパティから取得するなどのパターンだ。

この場合、関数は副作用があって、プロパティは副作用がない。
0202デフォルトの名無しさん2015/11/28(土) 17:55:48.86ID:W/xTcAqm
>>199
> 全てのオブジェクト指向言語にクラスがあると思うなよシロートかよ

じゃあ全てのオブジェクト指向言語に、インスタンスはあるということでいいかな?
0203デフォルトの名無しさん2015/11/28(土) 18:03:11.73ID:IVslLxwX
オレが今直観的に思いついたオブジェクト指向の問題点は
結局「情報遮蔽」に失敗しているということだな

純粋関数てあればその、純粋なる手続きを簡潔なinとoutとして
そしてその関数が何をするかを示せば、モジュールとしてパッケージ化、すなわち情報遮蔽できる

一方でステートを持つオブジェクトを情報遮蔽しても
結局そのステートが何を示しているのか、どういう作用をもたらすのか
という風に下って行かないと、正確な動作が予測できなくなる

これがオブジェクト指向のライブラリを読み解く面倒さであり
情報遮蔽に失敗しているということである
隠してはいけないものまで遮蔽の海の投げ込まれると、ファジーに処理しなければならなくなる

ファジーに処理できるのではなく、ファジーであることを強いられるわけだ
0204デフォルトの名無しさん2015/11/28(土) 18:14:30.30ID:JZIr9Jhy
>>203
一番の問題点はメソッドの呼ぶ順番で挙動結果が変わる恐ろしさ。
0205デフォルトの名無しさん2015/11/28(土) 18:16:17.35ID:Rc2MJzM/
>>204
怖がることはない上から順番に実行されるんだ。
0206デフォルトの名無しさん2015/11/28(土) 18:22:30.98ID:JZIr9Jhy
>>205
数が多くなると呼び順を把握するだけで頭が破裂する
0207デフォルトの名無しさん2015/11/28(土) 18:24:42.05ID:Rc2MJzM/
>>206
分割するんだ。頭が破裂しない程度に関数を分割するんだよ。
0208デフォルトの名無しさん2015/11/28(土) 18:29:37.67ID:JZIr9Jhy
>>207
分割したら呼び出し順序が増えた
なにを言ってるかわからねーと思うが
0209デフォルトの名無しさん2015/11/28(土) 18:31:04.24ID:W/xTcAqm
上から順番に関数は実行されます。


main() {
・・・
}

foo() {
・・・
}

bar() {
・・・
}

baz() {
・・・
}
0210デフォルトの名無しさん2015/11/28(土) 18:37:38.71ID:Rc2MJzM/
>>208
大丈夫です。
0211デフォルトの名無しさん2015/11/28(土) 18:37:50.46ID:JZIr9Jhy
これと
var 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/
>>211
じゃあお前はお風呂に入るとき服を先に脱いでから湯船に入るのか
湯船に入ってから服を脱ぐのか悩むのか?あ?
後先考えればわかるだろうが。引数がない時点で何らかの
副作用があるのは明らかなのだから何をしようとしているのか
きちんと考えてプログラム組むべきだし、湯船で着衣プレイはお前にはまだ早い。
0213デフォルトの名無しさん2015/11/28(土) 18:45:58.91ID:lKEWLS4S
>>212
これよ
0214デフォルトの名無しさん2015/11/28(土) 18:51:26.93ID:eJVnMSEL
時間が存在しなければ全ては同時に起きるからな
0215デフォルトの名無しさん2015/11/28(土) 18:55:20.03ID:W/xTcAqm
>>212
> 引数がない時点で何らかの
> 副作用があるのは明らかなのだから

get_version()  (アプリのバージョン番号を返す)

これって副作用ありますか?
0216デフォルトの名無しさん2015/11/28(土) 18:58:24.87ID:Rc2MJzM/
>>215
文脈からわかると思うが、戻り値の間違いだ。
0217デフォルトの名無しさん2015/11/28(土) 19:10:20.60ID:W/xTcAqm
じゃあ俺が訂正しておくか

引数がない時点で何らかの
戻り値があるのは明らかなのだから
0218デフォルトの名無しさん2015/11/28(土) 19:20:35.13ID:BVJTL3ly
>>164
結構居るんじゃないのかな?
でもそれだと意味が無いから不要だと言ってるかと。
0219デフォルトの名無しさん2015/11/28(土) 20:04:41.95ID:oWRhnwkW
プログラミングをお仕事としたときに細分化と下請けに丸投げするのに便利な方法がオブジェクト指向なんじゃないの?
上流工程のコードを書かないで仕事した気分になりたい人と、
実際にコード書いて馬鹿馬鹿しい仕様にファックファック言う人じゃ好き嫌いも分かれるよ!
0220デフォルトの名無しさん2015/11/28(土) 20:51:35.64ID:DqKP/LxN
>>177
それ言い出したら継承や多態も関数ポインタでやってただろ
そもそもオブジェクト指向って最初の提唱者の意図したものと
大分ずれてるし、それまで現場で経験的によく使われてた
パターンを言語でサポートしたぐらいのものでしかない
多人数開発での自衛的プログラミングから発したものだし
カプセル化が本質というのもあながち間違ってないよ
0221デフォルトの名無しさん2015/11/28(土) 22:10:43.99ID:8WrkOG/L
>>206
? オブジェクト指向で呼んでる側の上位クラスが複雑なことさせられてるなら
そりゃ、要素の分解に失敗してんじゃねぇの。
オブジェクト指向の基本はある単位に"仕事を任せる"ことで
委託元は相手先の状態を知らなくてよい状態にして
ユニットの独立性をあげ、取り回しを楽にし、修正範囲を局所化することだから。
0222デフォルトの名無しさん2015/11/28(土) 22:43:33.10ID:W/xTcAqm
>>203はアンフェアな人間
0223デフォルトの名無しさん2015/11/28(土) 22:44:19.81ID:W/xTcAqm
変だな
他人になりすましてしまった
0224デフォルトの名無しさん2015/11/29(日) 00:09:49.32ID:WH+mhkGZ
>>218
居ないと信じたい...
俺は、プライベートの無い生活なんてしたくないよ...
0225デフォルトの名無しさん2015/11/29(日) 00:49:04.34ID:KrqWIN7R
>>224
ゲッタ、セッタという名前からしてあやしいじゃないか。だって値の取得と設定だぜ。
0226デフォルトの名無しさん2015/11/29(日) 02:51:22.20ID:KrqWIN7R
>>225
最初から日本語で言ったほうがいいって話?
0227デフォルトの名無しさん2015/11/29(日) 04:57:44.49ID:JoBbAgA7
下駄、雪駄ってことか?
0228uy ◆Qawu9.2l1E 2015/11/29(日) 05:05:17.16ID:RQPUWZLH
カスが混ざってるからuyさんが副作用のおさらいしてやるよ

例えば
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
>>228
アホか?dは値では無くて値への参照だ
どっちの方法でも新しい値は作られる
0231デフォルトの名無しさん2015/11/29(日) 05:26:18.25ID:6xzhksi7
>>228
束縛された値だってプ

束縛されるのは変数のほうだボケ
0232デフォルトの名無しさん2015/11/29(日) 05:29:40.59ID:6xzhksi7
>>228
> c = "abcd"
>副作用有り↓
>c.setter("Abcd")
>func(c.getter())

バカすぎて頭がおかしいレベル。
そのsetterってのは"abcd"という文字列オブジェクトのメソッドなのか?
おまえは言語よりまず自分の頭を疑え。
0233デフォルトの名無しさん2015/11/29(日) 05:32:08.26ID:6xzhksi7
>>228
>"abcd"から"aBcd"というデータが欲しくなった時に、良いメソッドがない為に、新たな値を必要としてしまう

おまえは本当にバカだなあ。
そんなの、文字列クラスにpublic String capitalized(int pos)なメソッドを定義すればいいだけじゃないか。
もう一度言う。言語を疑う前に自分の頭を疑え。それがバカの義務だ。
0234uy ◆Qawu9.2l1E 2015/11/29(日) 05:42:31.86ID:RQPUWZLH
勉強しろゴミ
0235uy ◆Qawu9.2l1E 2015/11/29(日) 06:04:16.21ID:RQPUWZLH
勉強以前の問題かw
「副作用」の事を説明したら

何故かお前ら「ゴミカス」の頭からは「Haskell」や「関数型」といった記憶が同時に引き出されちゃって混乱し始めてるみたいだけど
センスねーから死ねよw
0236デフォルトの名無しさん2015/11/29(日) 06:17:38.75ID:DszlBPxJ
>>206
オブジェクトは、生成初期化以外ではどういう順番で呼んでも正しく動作するように作る。
オブジェクトは基本的に他に依存せず完結するように作るので、一度に全部のオブジェクトの状態を把握する必要は無い。

例外的に初期化がデリケートだったり、複数オブジェクトが依存しあってクラスターを構成する場合もあるが、
原則は上に書いた通り。だから頭は爆発しない。
0237uy ◆Qawu9.2l1E 2015/11/29(日) 06:18:52.96ID:RQPUWZLH
良いですか?w

副作用と関数型は関係ないしww
そこで使ってるアホの子が作った用語を引っ張ってくる意味もないしwww
ましては関数型言語の実装なんてもっと関係ないwwww
まぁ少ない知能で無能が一生懸命理解した概念だから、無関係の記憶まで頭の中でリンクされて覚えちゃってるのは仕方ないとしようかwwwww

副作用を持つクラスと持たないクラスはオブジェクト指向でも重要なのにwwwwww
そこを一切考えずにgetter /setter (笑)を基本としwwwwwww
カプセル化(爆)を効果的に行おうとしているけどwwwwwwww

本来カプセル化(笑)を効果的に行おうとするのではなくwwwwwwwww
頭が足りてれば副作用を減らす事を考えているはずwwwwwwwwwww

君たちはIQが低いんですよwwwwwwwwwwww

------------------------------------


ようはカプセル化というのは副作用を(自分の思考能力では)消せない時の妥協案なわけです
0238uy ◆Qawu9.2l1E 2015/11/29(日) 06:20:40.95ID:RQPUWZLH
デザパタの名前を出すのはイヤだけど
Stateパターンで脳内メモリが足りずスタックオーバーフローしてる奴が
このスレに名無しいるかと思うと
とても議論を出来る席ではないので退席させて頂きます
0239デフォルトの名無しさん2015/11/29(日) 07:42:51.55ID:6xzhksi7
>>234
勉強すべきなのはおまえだバカ。
バカはバカなりに自省しろバカ。
おまえのようなバカがバカなバカ話を垂れ流している様ほどバカなバカはいないぞバカ。
0240デフォルトの名無しさん2015/11/29(日) 07:43:55.50ID:6xzhksi7
>>237
オブジェクト指向と副作用も関係ないことに気付けバカ。
まずは自分のバカさ加減に気付けバカ。
バカはバカなりにバカを自覚しろバカ。
0241デフォルトの名無しさん2015/11/29(日) 09:48:23.77ID:mstAENSD
これがニッポンの民間・国家資格別平均最低月給ランキング。

将来有望な資格も見えてくる。
資格別の求人件数と平均最低月給ランキング。
あなたの資格の市場価値が一目瞭然!

http://jobinjapan.jp/license/
ぼくらの大切な資格は正当に評価されているか確認しよう。
0242デフォルトの名無しさん2015/11/29(日) 10:01:35.10ID:WH+mhkGZ
>>225
確かに、ゲッタ、セッタを値の取得と設定と思ってたら、不要なものだよなぁ...

つーか、そうなってくると、オブジェクト指向も関数型も必要ないじゃんって話になると思うけどな...
0243デフォルトの名無しさん2015/11/29(日) 12:30:09.40ID:F5L+GOgj
>>211
ほんとこれ
0244デフォルトの名無しさん2015/11/29(日) 12:47:47.79ID:KrqWIN7R
>>211
> これと
> 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
>>221>>244
オブジェクト指向は見えない係数が存在してる可能性があるのが問題点な。

その例であればadd4でグローバル変数の書き換えを行っている可能性もありえる。
0246デフォルトの名無しさん2015/11/29(日) 13:18:07.56ID:PDzYlTyK
WindowsにしろMacにしろX11にしろ
ほとんどのOSのグラフィック周りはオブジェクト指向風に実装されているせいで
この問題に直面してシングルスレッドでしか動かない。
0247デフォルトの名無しさん2015/11/29(日) 14:00:48.37ID:7sIA5lEw
> ほとんどのOSのグラフィック周りはオブジェクト指向風に実装されているせいで
> この問題に直面してシングルスレッドでしか動かない。

オブジェクト指向風(?)に実装されていなくてマルチスレッドで動く例は?
0248デフォルトの名無しさん2015/11/29(日) 14:05:02.24ID:KrqWIN7R
>>245
> オブジェクト指向は見えない係数が存在してる可能性があるのが問題点な。

見えない?

xの代わりにxオブジェクトが存在してるだけだろう?

y=add4(x);
y=x.add4();

引数が前に来るか後ろに来るかだけで、なーんもかわらん。
0249デフォルトの名無しさん2015/11/29(日) 14:07:24.59ID:KrqWIN7R
>>246
> ほとんどのOSのグラフィック周りはオブジェクト指向風に実装されているせいで

UI(グラフィック)なんてのは、副作用の塊なんだから
オブジェクト指向風に実装するか
(関数型では)実装できないかだろ
0250デフォルトの名無しさん2015/11/29(日) 14:40:25.07ID:4SB95NTF
>>246
…MacOSXはNeXTから継承したわりとガチのオブジェクト指向で設計されてるから
グラフィックパーツは最終的にQuartz Compositorまで送られて
勝手にハードウェアアクセラレーションまでやってくれるが
その動作について人間まで含めた上位オブジェクトは一切関知する必要がないのだが…

副作用?なんのこと、それ?
0251デフォルトの名無しさん2015/11/29(日) 14:46:49.29ID:KrqWIN7R
俺が言ってる副作用っていうのは、グラフィクス処理じゃなくてUIの話ね。
それはそもそも>>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
>>253
最近は、オブジェクト指向は全体の入れ物・構造を作るもので
その中は関数型風に処理するって多いよね。

RADとかフレームワークを使った開発とかまさにそれで、
フレームワークそのものと、フレームワークを呼び出す所までは
オブジェクト指向になっていて、その中に処理を書く。
0256デフォルトの名無しさん2015/11/29(日) 16:19:41.99ID:KrqWIN7R
>>252
o に送る命令に含まれるxとかyとかzというのは引数じゃなきゃ何なんだ?
0257デフォルトの名無しさん2015/11/29(日) 16:28:08.12ID:JoBbAgA7
文字列
0258デフォルトの名無しさん2015/11/29(日) 16:33:35.82ID:KrqWIN7R
正確には、文字列型の引数
0259デフォルトの名無しさん2015/11/29(日) 17:45:32.21ID:6+8Z39Kk?2BP(1001)

>>248
状態の話なのに何も変わらんはないでしょ。
0260デフォルトの名無しさん2015/11/29(日) 17:55:17.49ID:k+2nqD55
>>228
説明にセンスなさすぎだろwww
getter/setterと非破壊的メソッドじゃなくて、破壊的と非破壊的で比較しろよ
0261デフォルトの名無しさん2015/11/29(日) 18:16:03.14ID:FLk+0ip4
>>248
クラスだとメソッド内部でインスタンス変数が使われている可能性を排除できないって意味だろ
0262デフォルトの名無しさん2015/11/29(日) 18:21:58.81ID:KrqWIN7R
>>261
関数でもグローバル変数や参照で渡された引数の変更
その他のリソースの書き換えの可能性も排除できないが
0263デフォルトの名無しさん2015/11/29(日) 18:23:04.88ID:Co3W2iFa
>>261
それxがデータのみの構造体だったとしても
関数内でどの要素を変更してるかなんて
外から分かんないじゃん
0264デフォルトの名無しさん2015/11/29(日) 18:35:24.95ID:Co3W2iFa
よくCで書かれたライブラリとかで見るよね
ほんとはオブジェクト指向で書きたいんだろうけど
可搬性考えてC採用してるやつ
FooData foo;
Foo_Init(&foo, 0);
Foo_calc(&foo, 999);
Foo_final(&foo);
0265デフォルトの名無しさん2015/11/29(日) 20:42:29.07ID:ryBUNuVd
>>262
可能性の問題だろ。
出来る出来ないではなく、そういうのが平然と行われている文化と、そういうのを忌み嫌う文化の違い。
0266デフォルトの名無しさん2015/11/29(日) 21:21:22.81ID:KrqWIN7R
>>265
じゃあ実例出す必要ないだろ。
所詮文化の話なんだから。

それで俺が気になるのは副作用無しでGUIアプリや
ゲームなんかが作れるのか?ってというところなんだが。

攻撃受けたらHPが減る。回復アイテム使ったらHPが回復する。
みたいなものをどうやって副作用無しで自然な形で表現するのかが知りたい。
0267デフォルトの名無しさん2015/11/29(日) 23:01:26.93ID:XdAOMKyx
>>266
グラディウス
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
モナドって書いてるじゃんw
モナドは関数型じゃない。
0269デフォルトの名無しさん2015/11/29(日) 23:24:34.24ID:KrqWIN7R
> Haskellでもどうにかゲームは作れるぞということは示せましたが、
> 実行してたら遅くなるとかいった、Haskellの仕組みをよく知らないと分からない問題はお手上げです。
> もっともっとゲームを作りやすくする方法があるはず。 つぎは、みんなにまかせた!


なんかエクセルででゲーム作るぞ!
エクセルでもどうにかケームは作れるぞということは示せましたが
みたいなレベルなんだよなぁw
0270デフォルトの名無しさん2015/11/29(日) 23:33:41.25ID:4SB95NTF
副作用ガーもなんも「副作用」って入力Aに対して出力Bが返るなら
A入力に対して常にBが返るべきで、ここで場合によってCが返る
これこそがプログラムの厳密化を壊すバグの温床!!ってこって。
ところがオブジェクト指向はオブジェクトに対して「これをやれ」と命令すると
オブジェクトは責任を持って作業を行い、出力Bが返せないからエラー放棄じゃなくて
できれば自分の職責で「ではCで」を出すぐらいのことまでやれ。だから
方法論のベクトル自体が真逆に近いもんなぁ。
0271デフォルトの名無しさん2015/11/29(日) 23:35:20.28ID:KrqWIN7R
> 出力Bが返せないからエラー放棄じゃなくて
> できれば自分の職責で「ではCで」を出すぐらいのことまでやれ。

それ、お前が例外しらんだけだろw
知っててもトラップして例外無視してるだけだろ

ほんと知らんやつほど、ディスるんだよな。
0272デフォルトの名無しさん2015/11/29(日) 23:37:19.08ID:KrqWIN7R
>>271
まだ>>270のほうがマシかも
0273デフォルトの名無しさん2015/11/29(日) 23:41:01.72ID:KrqWIN7R
理由書いてないから説得力0w
0274デフォルトの名無しさん2015/11/29(日) 23:58:29.01ID:KrqWIN7R
この状態はなんなんだ?
0275デフォルトの名無しさん2015/11/30(月) 00:04:52.45ID:JF8UCarw
方法論が逆と言うより、問題意識が逆なのだ
0276uy ◆Qawu9.2l1E 2015/11/30(月) 04:36:25.49ID:K9XXst/g
関数型とオブジェクト指向は方向性が違うから歩み寄っても融合はしないのです。

これから大事な事を言います。
言語が多機能になり柔軟性を持つと「神オブジェクト指向」が可能になります。

神オブジェクト指向でソースコードを書いても、
言語仕様上で詰む事がなくなってきています。
神オブジェクトクラスの実装をeval以外で行える事が重要です。
言語性能が大分それを実装する為のスペックに追いついてきました。
それが次の世代のプログラミング技法となるのです。
0277uy ◆Qawu9.2l1E 2015/11/30(月) 04:49:45.91ID:K9XXst/g
◇ オブジェクト指向

class 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
オブジェクトの生成、作成でnewはないよな
生成はCreateかGenerationでしょうに、この簡単なことが
疑問に持てない言語設計者
絶対にnewは無いな
0279デフォルトの名無しさん2015/11/30(月) 07:50:49.02ID:7BdzR/6V
>>278
uy=うるさい 幼稚園生
0280デフォルトの名無しさん2015/11/30(月) 08:37:24.34ID:3thMnOBn
>>274
きみが味方に殴りかかっただけw
0281デフォルトの名無しさん2015/11/30(月) 08:41:18.16ID:JF8UCarw
殴りに行こうか、やーやーや。
0282デフォルトの名無しさん2015/11/30(月) 09:38:51.46ID:/xVWkcP2
gettersetter必要ないってプログラミング覚えたてだった頃の俺じゃねーか
0283デフォルトの名無しさん2015/11/30(月) 09:55:33.63ID:pqu72bQD
お薬の副作用でも出てるんじゃね?
0284デフォルトの名無しさん2015/11/30(月) 10:24:03.75ID:ul1nMABE
>>282
今はどうしてんの?
0285デフォルトの名無しさん2015/11/30(月) 10:29:39.15ID:JF8UCarw
プロパティを使えば
obj.value = 1
ってかけるよ。

必要ならば、これにsetter/getterを追加するだけ。
0286デフォルトの名無しさん2015/11/30(月) 10:30:19.66ID:JF8UCarw
>>275
おい、お前。勝手に俺のID使うな。
0287デフォルトの名無しさん2015/11/30(月) 11:06:30.22ID:ul1nMABE
>>286
後から書いといて何だよw
0288デフォルトの名無しさん2015/11/30(月) 11:11:50.13ID:ul1nMABE
>>282
以前はvalueをパブリックフィールドにしてたけど、今はプロパティを使って
obj.value = 1としたり、必要ならsetter/getterを追加してるってこと?
それだと>>164の質問に対して"yes"と答えることになるな。
0289デフォルトの名無しさん2015/11/30(月) 11:25:14.91ID:JF8UCarw
>>288
> それだと>>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:pqu72bQD
つーか、まだアクセサにこだわってんのかバカじゃねーの。
0291デフォルトの名無しさん2015/11/30(月) 14:00:42.54ID:ul1nMABE
>>288
「以前はvalueをパブリックフィールドにしてたけど」
という仮定部分を読み飛ばすなよ
0292デフォルトの名無しさん2015/11/30(月) 14:02:03.79ID:ul1nMABE
間違えた
>>289だった。
0293デフォルトの名無しさん2015/11/30(月) 16:18:38.78ID:JF8UCarw
>>291
読み飛ばさなかったらかと言って何が変わるのか?

本来クラスは、インターフェースとして考えたものを
公開するべきであって、中身を晒すべきじゃない。
基本的な考え方として、インターフェースを変えてはならない。


クラスがインターフェースとしてvalueを持つのであれば、
中身がどうなっていようが、どう変わろうが、変えるべきじゃないわけ。

以前はクラスのインターフェースがvalueであった。それはこれからも変わらない。
以前は、内部変数に直接結びついていた。あとから直接結びつかないようになった。
内部実装が変わっても、インターフェースを変えずにすむのがsetter / getterなんだよ。
内部実装が変わった時、内部変数に直接結びつかないのは、普通にある話。
0294デフォルトの名無しさん2015/11/30(月) 16:40:42.45ID:Ee9Jt/HC
ゲタセタはシュガー
0295デフォルトの名無しさん2015/11/30(月) 16:46:09.58ID:ul1nMABE
>>293
それは異論ないけど>>282からの答えが聞きたいのだ。
0296デフォルトの名無しさん2015/11/30(月) 16:46:39.88ID:JF8UCarw
シュガーだからなんだって言うんだろうか?

プログラミング言語はアセンブラの時代から
発展=シンタックスシュガーを追加してきた。
for文ですらアセンブラからすればシンタックスシュガー。

高級言語の本質はシンタックスシュガーなわけで、
無くてはならない便利なものだよ。
0297デフォルトの名無しさん2015/11/30(月) 16:47:11.30ID:JF8UCarw
>>282
俺は>>282じゃないんで知らん
0298デフォルトの名無しさん2015/11/30(月) 17:00:48.28ID:Ee9Jt/HC
>>296
カプセル化こそオブジェクト指向というこのスレの流れ。今日オブジェクト指向覚えました感がするんだよ。
0299デフォルトの名無しさん2015/11/30(月) 17:07:55.96ID:JF8UCarw
>>298
知らんがな。

カプセル化こそオブジェクト指向というのが、このスレの流れ今の流れじゃん?

って言われても、お前にはそう見えるんだなぁーぐらいにしか思わん。
0300デフォルトの名無しさん2015/11/30(月) 20:20:31.35ID:KJhtuNJw
関数型言語にカプセル化に相当する機能がないわけじゃないしなぁ
多態もそうだけども
アランケイ自体もメッセージ送信がキモでOOPって名付けは失敗だったと言ってるし

今の流れってOOPやカプセル化そのものの話みたいな一般化した話にはなってなくて、単にゲッターセッターについて各々が思い思いに語ってる状態だよね

前提も揃ってないし、議論のゴールもない状態
0301デフォルトの名無しさん2015/11/30(月) 20:27:47.11ID:yj2fjbPw
しょーがない、uyがバカだから。
0302デフォルトの名無しさん2015/11/30(月) 20:38:13.31ID:Ee9Jt/HC
FILE* f = fopen();
fprintf(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/HC
歴史を知らないのか。オブジェクト指向は元々シミュレーションを書くために出てきた概念だからさ。
0305デフォルトの名無しさん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/HC
オブジェクト指向なしで書いてみればいい。シムシティみたいなの。
0308デフォルトの名無しさん2015/11/30(月) 21:45:00.93ID:G/1u/u7p
そもそもこの世は神がオブジェクト思考で作ったんだが…
0309デフォルトの名無しさん2015/11/30(月) 21:47:30.13ID:JF8UCarw
>>308
結局そこにたどり着くんだよね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
Windowsのメッセージシステム見ればいいじゃねーか。
セッセージなしでどうやって個々のアプリを実装する気だ?
すぺてのアプリがマウスや他のアプリのウインドウの位置をリアルタイムで監視する気か?
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:KChypJW3
人を物のように見る酷い人も居たもんだ
0319デフォルトの名無しさん2015/11/30(月) 22:25:05.22ID:JF8UCarw
>>318
お、オブジェクト指向の代わりに
人をなんと見る指向を作るんだい!?
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
>>319
その人の成し遂げたことで見ればよいだろう
0323デフォルトの名無しさん2015/11/30(月) 22:41:12.03ID:JF8UCarw
>>322
意味わからんw
人を物と見てはいけない○○指向は
物を○○とみる○○指向なんでしょ?

せっかくつき合ってあげてるのに
面白いことの一つぐらい言えよw
0324デフォルトの名無しさん2015/11/30(月) 22:42:57.89ID:CwTedwfo
>>303
カプセル化ってデータと処理をまとめるだけのことなんだが、データを隠す意味で使っている阿呆が多い。
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:mJ6qKlWc
SVOかSOVか → どっちでもいいw
0329デフォルトの名無しさん2015/11/30(月) 23:08:23.28ID:ul1nMABE
つまんねえ戯れ言ばっかしだな。
それはともかく、オブジェクト指向は突き詰めると「言語的」じゃなくなってくるな。言語外の何かを指向している。
0330デフォルトの名無しさん2015/11/30(月) 23:13:29.51ID:JF8UCarw
>>325
物理現象って言ってる時点で
物だけどなw
0331デフォルトの名無しさん2015/11/30(月) 23:26:44.47ID:6KblLTEL
>>330
文系のアホは知らないかもしらんが、物理では力とか熱とか速度とか扱うんだよ
どこが物だよ
0332デフォルトの名無しさん2015/11/30(月) 23:40:05.57ID:JF8UCarw
物にかかる力
物の発熱
物の速度
ついでに物の質量
エネルギーとは物体のry
0333デフォルトの名無しさん2015/11/30(月) 23:50:39.82ID:waNGyKqN
突き詰めると全てオブジェクトだからね
0334デフォルトの名無しさん2015/11/30(月) 23:52:02.51ID:WElGpwgj
宇宙というオブジェクトに属するメソッドね、それらは
0335デフォルトの名無しさん2015/11/30(月) 23:57:33.71ID:JJB/qb+3
現象や概念はオブジェクトの要素
0336デフォルトの名無しさん2015/12/01(火) 01:23:14.73ID:2HxO424O
ビックバンは
無から物に変わるから
newか?
0337デフォルトの名無しさん2015/12/01(火) 02:40:34.66ID:RG+5ewvC
>>303
ロボットに命令して仕事をさせることをイメージしてるから。
もっと言ってしまえば人間社会での現実の仕事分担がそうなっていて
末端の「チョコバットが20円から30円になりました」みたいな変更は
下層オブジェクトの責任と判断、作業範囲の中に内包されていて
部長がいちいち「チョコバット…20円から30円…と」のように上層の仕事に波及しない。
そこのユニットで情報と判断の波及をストップさせて独立を担保するための
メッセージコマンドによる抽象化。

具体例が知りたければObjective-C辺りを調べりゃガチ勢のやりかたがわかるよ。
0338デフォルトの名無しさん2015/12/01(火) 03:00:07.68ID:eT3ZeD+F
それはObjective-Cである必要性がないw
0339デフォルトの名無しさん2015/12/01(火) 07:16:49.74ID:eT3ZeD+F
>>337
それを「メッセージ」と表現するのは違和感があるな
0340デフォルトの名無しさん2015/12/01(火) 08:12:57.71ID:q73BSp0r
C++の様な、無制限に「継承」の出来る言語が広まったのが不幸の始まり
VBScriptでクラス設計を学習し直すと違う世界が見えてくる
0341デフォルトの名無しさん2015/12/01(火) 08:36:23.49ID:pviAfNpj
なんのジョーク?
0342デフォルトの名無しさん2015/12/01(火) 09:46:57.05ID:71MtHfWW
is-a, has-a, interface/protocol, category, factory(poly-morph) 
適材適所だ好きなの使え。
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
それは10年前の話
今は静的型に回帰している
静的型でも型推論やジェネリックがあれば記述性に問題ないことが分かったから
静的型の方が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のようにOS=開発環境
というシステムが作られないのは何故?

それがSmalltalkの大きな欠点ではないのかな?
0350デフォルトの名無しさん2015/12/01(火) 14:31:06.50ID:QTLgm2hp
>>349
> SmalltalkのようにOS=開発環境
> というシステムが作られないのは何故?

それは逆のような。

どうしてSmalltalkのように(定式化が困難ながらも)うまく動くシステムが他のパラダイムで作られていないのか?かと。
0351デフォルトの名無しさん2015/12/01(火) 14:36:13.89ID:eT3ZeD+F
>>350
逆?

あんたは俺と同じことを言っている。
Smalltalkのようなシステムが作られないと。


動く動かないじゃない。事実としてSmalltalkのような
システムが作られないと俺もあんたも言ってるわけさ。

いいものなら真似て作られるはずだよね。
0352デフォルトの名無しさん2015/12/01(火) 14:36:51.12ID:QTLgm2hp
ちょっと捕捉すると、
SmalltalkはOSでいうなら、休止状態で運用されているシステムで
1970年代からほんの数回しか再起動されていません。
常に動かしながら拡張されていて、ここまで来ているわけです。
このようなソフトウエアは他に例をみません。

アラン・ケイのメッセージを方便にして遅延・動的結合の重要性に関する主張はそういう意味で説得力があります。
0353デフォルトの名無しさん2015/12/01(火) 14:46:00.37ID:eT3ZeD+F
だが、再起動しないことが凄いことだと
だれが言ったのだろうか?
0354デフォルトの名無しさん2015/12/01(火) 14:49:07.68ID:WjsyHeKQ
>>352
それだけ使われていないというわけだな。
0355デフォルトの名無しさん2015/12/01(火) 14:57:42.74ID:QTLgm2hp
>>353
再起動しないことが偉いのではなくて、
たとえばシステムの根幹に関わる何かを改変しても、
そのまま動かし続けていられる変化への強さが強調されるべき点です。

あと、動的型であることが時代遅れとの指摘があるようですが
動的で遅延結合なシステムが構築できるのであれば、動的型であることにはこだわらないともケイは言っています。
いちおう、念のため。
0356デフォルトの名無しさん2015/12/01(火) 15:10:20.80ID:eT3ZeD+F
>>355
いえ、だから変化ならどんなものでもできるわけで、
再起動しないで変化できることが偉いんでしょう?
0357デフォルトの名無しさん2015/12/01(火) 15:14:09.69ID:QTLgm2hp
>>354
OSでいうなら休止状態で連続運用されるこのしくみは1974年ごろのSmalltalk-74で
採用された機構ですが、それから今のSqueakやPharo、あるいは別の進化の道をたどった
VisualWorksといった最近の、しかし直系のSmalltalkまでの長い歴史の中でそれなりの人数には使われています。
なにより、Smalltalk-72をベースにした74から76を経て80までになると
ほぼ別の言語処理系といってもよいくらい変革を遂げてもいます。参考まで。
0358デフォルトの名無しさん2015/12/01(火) 15:18:44.97ID:eT3ZeD+F
OSでいうなら休止状態で連続運用されるこのしくみ

を作るために、OSと開発環境が一体となり、
このOSでは、別の言語を使うことができなくなってしまった。
0359デフォルトの名無しさん2015/12/01(火) 15:18:52.05ID:QTLgm2hp
>>356
件の文献でケイも書いていますが、再起動しなくてもよい、という意味には
メモリ上の(あるいはOODBであればストア内に永続化された)オブジェクトを継続利用できる
つまり、システム改変のたびに作り直さなくてよい、ということも含まれています。
0360uy ◆Qawu9.2l1E 2015/12/01(火) 15:22:59.51ID:p3g6QuXB
ゴミ
0361デフォルトの名無しさん2015/12/01(火) 15:26:26.27ID:d/SZPXKT
>>359
それは保存形式が標準化されるだけでいい話ですよね?
例えばJSONとか。
0362デフォルトの名無しさん2015/12/01(火) 15:26:28.74ID:QTLgm2hp
>>358
もともと Smalltalk はケイのダイナブック向けの暫定OSなので、一体もなにもそのものです。
Smalltalk のようなシステムを、他の言語で作ることは可能だと思いますよ。
ちなみにケイは静的型についても動的遅延結合を実現できればこだわらないと言っていますから
最近はやりのダックタイピングが可能な静的型言語でトライしてみるのも面白いでしょう。
0363uy ◆Qawu9.2l1E 2015/12/01(火) 15:27:43.76ID:p3g6QuXB
>>362
さっさと死ね老害
0364デフォルトの名無しさん2015/12/01(火) 15:28:02.69ID:d/SZPXKT
オブジェクトを継続利用できるようにするために、
保存形式が変更できないというデメリットが生じた。

Smalltalkったって完璧ではなく、
いろんなものを切り捨ててしまっているんだよ。

その切り捨てたものが、再起動しないことよりも重要だった。
0365デフォルトの名無しさん2015/12/01(火) 15:28:50.56ID:QTLgm2hp
>>361
オブジェクトをシリアライズせずにそのまま永続化できる世界もまた面白いものですよ。
0366uy ◆Qawu9.2l1E 2015/12/01(火) 15:30:13.88ID:p3g6QuXB
ID:QTLgm2hp = ゴミ
0367デフォルトの名無しさん2015/12/01(火) 15:30:40.00ID:d/SZPXKT
>>362
可能だけど、多様性を諦めるしか無いですね。

つまり全部自分自身で作って全部管理できるならば可能ってことですよね。

いろんな人がいろんなソフトを作って、しかも複数のバージョン
(Windows 8と10のような)が同時に稼働するような現在の世の中では、
複雑になりすぎて標準化やら何やらで互換性を切り捨てるような修正ができなくなる。
0368デフォルトの名無しさん2015/12/01(火) 15:34:42.80ID:pviAfNpj
各オブジェクトが制御を持ち続けているというならわかるが、達成できてない理想に基づいた用語(メッセージパッシング)を振り回すのはやめよう。
0369デフォルトの名無しさん2015/12/01(火) 15:45:48.55ID:UT6gApH3
ブーメランしてるんだよなぁ、uy
0370uy ◆Qawu9.2l1E 2015/12/01(火) 15:47:28.37ID:p3g6QuXB
オブジェクト指向厨の特徴
自分の頭で計算出来る程度の都合良い"大きな単位(オブジェクト)"でいきなり世界の構造を語りだす

まさにいま

ID:QTLgm2hp
↑
こいつが必死にレスしてる古いパラダイムと同じ
繋げなくて良いものとものを繋ぎ合わせて柔軟性を欠いたシステム

世界をオブジェクトという単位で切り取って表現するというのはそういう事
0371デフォルトの名無しさん2015/12/01(火) 15:54:04.27ID:UT6gApH3
>>370
じゃあお前は世界が何で出来てると思ってんだ?
0372デフォルトの名無しさん2015/12/01(火) 16:12:40.00ID:WjsyHeKQ
特定の言語がどうのこうのってスレ違いもいいところだな。
0373デフォルトの名無しさん2015/12/01(火) 16:51:09.64ID:D3RTrC4Y
SmalltalkはOOPの元祖かもしらんけど、今となってはアランケイの世界に過ぎず、運用機会も触れる機会も限られてて浮いてる感じ
もちろん偉大な一里塚であることは認める
0374デフォルトの名無しさん2015/12/01(火) 16:59:41.64ID:QTLgm2hp
最近は若い人もいろいろと発見して楽しんでいるようですし
http://phaendal.hatenablog.com/
LISPがそうであるように、古いから無価値と決めつけず学ぶべき点はまだあると思いますよ。
0375デフォルトの名無しさん2015/12/01(火) 17:14:39.00ID:pviAfNpj
個人崇拝のにおいがして気持ち悪い。
余計なものまでモデル化してんじゃねーよ。
0376デフォルトの名無しさん2015/12/01(火) 17:17:38.51ID:QTLgm2hp
Smalltalkはサビ付いたまま進化がないという人もいますが、(知り尽くしたアラン・ケイが言うならまだしも)
こうした意見の多くは、それを言う人の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
>>376
それってSmalltalk自体は進化してないんじゃね?
昔から搭載されていたってだけで、
その昔で止まってしまってるでしょ?
0379デフォルトの名無しさん2015/12/01(火) 17:26:29.01ID:QTLgm2hp
>>367
たしかに、Smalltalkシステムは(過去そうであったように、今後変遷を遂げて別の言語に生まれ変われるという
可能性を秘めてはいるものの現状)Smalltalkという言語に限定されているという意味でおっしゃるとおりです。

たたオブジェクト指向の特にメッセージに象徴される動的遅延結合システムをどのように実現し活用するか
という議論においては、Smalltalkにこだわる必要はまったくなくて、たとえばケイらがここのところ
取り組んでいるSTEPSプロジェクトの成果物のように、多様な言語を適材適所でシステムの記述に
使い分けるという方法で多様性とそのメリットを享受することは可能かと思います。

STEPS プロジェクトご紹介その2
http://d.hatena.ne.jp/propella/20111022/p1
0380デフォルトの名無しさん2015/12/01(火) 17:30:33.11ID:QTLgm2hp
>>377
まったく使われてない、使うことができないということはないですよ。
最近話題になったところでも、日本でも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
>>371
何で出来ているか?というのは愚問過ぎる

例えばそれを「uy」としましょう
「uy」から派性したAやBといった概念から「uy」を辿る事は出来る

例えばこの世界にある「オブジェクト指向」という概念や「量子ビット」といった概念から
「uy」を辿る事が可能なので、
それらで世界が出来ているといった勘違いが可能なのです
でもそれは、一体いくつ「uy」から継承がネストしていて、プログラム等でいえばメソッドが追加されてしまった純粋性のない概念なのでしょうか?
それを知っているのは「uy」だけです

この世界にあるすべての概念は「uy」へと通じているので、
料理人は料理を通じて世界を知り、スポーツ選手はスポーツを通じて世界を知ります

誰も「uy」からは逃げられないんだよ
0382デフォルトの名無しさん2015/12/01(火) 17:38:05.78ID:UT6gApH3
>>381
世界が派生するんだな?
0383デフォルトの名無しさん2015/12/01(火) 17:39:33.84ID:BYRY3bxz
このように、動的遅延結合システムなど、必要とされていないのでした
トラブルの元だからね
0384デフォルトの名無しさん2015/12/01(火) 17:40:07.03ID:d/SZPXKT
>>380
> まったく使われてない、使うことができないということはないですよ。

大丈夫。わかってる。
だから、ほとんど使われていないと言った。

君のレスは俺のレスと矛盾してないし、
「まったくというわけではない」というならば、
俺の言ったことが正しいということの補完になってる。
0385uy ◆Qawu9.2l1E 2015/12/01(火) 17:48:38.06ID:p3g6QuXB
>>371
ちなみにNULLという概念の誕生は「uy」にとって想定外でした
相反するんです
「ゼロではなく、そこに何も無い」といった表現は確かに必要です
でも、「この先に何かあるけど決してそれは見えない概念」 = 「uy」であるべきだった
しかしその「ゼロ以外の何か」という居場所をNULLが受け持ったおかげで「uyなんかいらねーよ」という人が出てきた
よく、世界は「無」から生まれたなどという世迷言を言う人はいますが、
本来「NULL」という概念は「無」ではなく「uy」であり、「uy」の代替概念が「NULL」です
0386デフォルトの名無しさん2015/12/01(火) 17:48:53.72ID:d/SZPXKT
Smalltalkが再起動していないというけれど、
それが止まらないシステムであるかということは別問題なんだよな。

止まらないシステムで、止まってはいけないのはOSじゃなくて、サービスだから。
そういう意味でSmalltalkという実行環境(OS)が止まらないことにさほど大きなメリットはない。
Smalltalkが理論上止まらなくてもハードウェアが故障したらどうなるの?って話。

そして、今の時代、動的遅延結合システムは多数のクラウドによって実現されてる。
各サーバーを一つのオブジェクトとみなして、サーバー単位で入れ替え可能な
システムになってるわけさ。
0387uy ◆Qawu9.2l1E 2015/12/01(火) 17:50:39.36ID:p3g6QuXB
>>382
世界を派性と表現するなら
さらにその上にBASIC世界ががある事になります
0388デフォルトの名無しさん2015/12/01(火) 18:02:38.07ID:tjGT2L+4
>>384
古いから無価値なのではなく、実用用途としてほとんど使われてないから無価値なのだ。
価値があったとしても、情報処理技術者のCASL程度の勉強用途としての価値しかない…
というふうに>>377を読んだのですが、どうも当方の勘違いだったようですね。失敬、失敬。
0389デフォルトの名無しさん2015/12/01(火) 18:17:27.81ID:RG+5ewvC
>>351
nextstep.
現在一般的に知られてる名前はMacOS X及びiOS.
記述言語はObjective-C及びObjective-C++
0390デフォルトの名無しさん2015/12/01(火) 18:22:54.46ID:d/SZPXKT
>>388
その通り勘違い。

実用用途として殆ど使われてないから、
実用用途としか価値があるかどうかはわからない。
価値が有るかどうかを判定できるレベルじゃないということ。
0391デフォルトの名無しさん2015/12/01(火) 19:06:56.95ID:pviAfNpj
動的結合って現実の世界の中に言語がしゃしゃり出てくる感じ?
0392デフォルトの名無しさん2015/12/01(火) 19:17:06.65ID:d/SZPXKT
>>391
あー、なるほど。言語レベルでやることじゃなかったことか。

Smalltalkみたいな仕組み、やろうと思えばできるだろうけど
やらないのは、言語よりも下のレベル、マシンレベルで
やることにしたからなんだろうな。
0393デフォルトの名無しさん2015/12/01(火) 19:32:24.50ID:QTLgm2hp
Smalltalkのことは興味がなければどうぞ忘れてください。例として適当ではなかったようです。ごめんなさい。
>>345で言いたかったのは、オブジェクト指向で(抽象データ型ではなく)メッセージを引き合いに出した場合、
その本質は動的遅延結合性をどのようにシステムに持たせるか、だということです。
そして使うのは動的型である必要はありません。近年のスマートな型システムも活用できると思います。

短く言うと、あなたは何か時計のような単純なものを作り壊れたら直せる。
しかし大きなシステムでは成長する際や、変化する際の擦り合わせが必要だ。
〈略〉大きなシステムは単純な歯車の機構よりも生態系のように振る舞う。
単純で強力なものの秘密は〈略〉どうすればできるだけ深く「システムについて
考えるか」であり、できるだけ頻繁に「謙虚に考えるか」である。

「ソフトウェア工学」は矛盾語法か? - アラン・ケイ
http://metatoys.org/oxymoron/oxymoron.html
0394デフォルトの名無しさん2015/12/01(火) 19:34:38.14ID:d/SZPXKT
つまり、多態こそがオブジェクト指向といってるだけですね。
0395デフォルトの名無しさん2015/12/01(火) 19:42:20.46ID:pviAfNpj
>>393
ピラミッドをバカにしているようだが、とんでもない思い違いかも知れんぞ。
0396デフォルトの名無しさん2015/12/01(火) 19:44:38.68ID:d/SZPXKT
短く言うと、あなたは何か時計のような単純なものを作り壊れたら直せる。

従来のサーバーは、構築したあともソフトウェアの更新や設定変更を繰り返して使って行くのが
一般的だった。特に、物理的なサーバー(コンピュータ)を用意して運用している場合、
新しいサーバーに切り替えるのは容易ではなかった。

大きなシステムでは成長する際や、変化する際の擦り合わせが必要だ。

 また、サーバー更新の際は事前にテスト運用するものの、実際に稼働してからトラブルが発生するリスクが伴う。

 最近は、クラウドサービスを利用して比較的簡単に仮想サーバーを構築できるようになっている。
そこで、現在稼働しているサーバーとは別に新たなサーバーを構築し、準備ができたら
スパッと切り替える。もしも新しいサーバーに問題があったら、即座に古いサーバーに
戻すという手法が提唱された。この方式を、ブルーグリーンデプロイメントという。

大きなシステムは単純な歯車の機構よりも生態系のように振る舞う。

継続的インテグレーションとは、ソフトウェア開発において、ビルドやテストを頻繁に
繰り返し行なうことにより問題を早期に発見し、開発の効率化・省力化や納期の短縮を図る手法。

ソースコードの追加や更新が行われる毎に、あるいは1日1回など定期的に、プロジェクト全体の
ビルドや各モジュールの単体テスト、変更のあったモジュール間の結合テストなどを実施する。
短いサイクルで頻繁にこれらを実施することで、問題点を早期に発見・修正でき、不具合の原因究明も容易になる。
0397デフォルトの名無しさん2015/12/01(火) 19:47:00.93ID:RG+5ewvC
(なんだろうこの、高校生がよくわかってない用語で政治談義してるみたいな状態は…w)

あの…普通にスマホのアドレス帳を開いたときにアプリが
連絡先データの数を「動的に」読んで、リストオブジェクトの中に
「動的に」名前とアドレスの描かれたボタンオブジェクトを生成するとか
毎日あたりまえに目にしてるはずですが…w
0398デフォルトの名無しさん2015/12/01(火) 19:52:07.69ID:d/SZPXKT
>>397
あぁ、めんどくさいから、どっかからコピペしだけだよ。

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:D3RTrC4Y
ダウンタイムが長くてどうするw
0402デフォルトの名無しさん2015/12/01(火) 20:25:49.81ID:eT3ZeD+F
>>397
それ、動的に取り込まれているのは単なるデータだから。
0403デフォルトの名無しさん2015/12/01(火) 20:35:14.89ID:S8usJREu
>>402
そりゃそんなこと言い出したら、何でもデータだよ w
そんな風にしか考えられない人には OOP は向いてない
素直に VBA とか COBOL でもやってなさい
0404デフォルトの名無しさん2015/12/01(火) 20:42:07.76ID:eT3ZeD+F
>>403
>>391をよく読むがいい
0405デフォルトの名無しさん2015/12/01(火) 20:43:21.82ID:pviAfNpj
>>403
よく考えよう
0406デフォルトの名無しさん2015/12/01(火) 21:23:26.79ID:ANDpHpim
老害は具体的に何も言えないから黙ってりゃいいのに
0407デフォルトの名無しさん2015/12/01(火) 21:28:45.78ID:CZwn6lvg
具体的に言う、すなわちテストドリブンで議論すべきだということです。
0408デフォルトの名無しさん2015/12/01(火) 21:57:59.42ID:eT3ZeD+F
だって>>397の「連絡先データ」なんてほんとのただのデータじゃん。
実行時に与えられるってだけだろ。そんなののどこが動的なんだよ?
動的ってのは実行時に与えられたデータを再び言語の欠片として解釈して実行することじゃないのか。
0409デフォルトの名無しさん2015/12/01(火) 22:21:28.35ID:RG+5ewvC
>>402
いいえ。

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
>>409
俺が言ってるのは「連絡先データ」の事だボケ
それにiPhoneのことなんて知らんわ
0412デフォルトの名無しさん2015/12/01(火) 22:35:27.51ID:eT3ZeD+F
>>409
iPhoneアプリではなく「連絡先データ」が本当に動的データなんだな?
0413デフォルトの名無しさん2015/12/01(火) 22:37:49.05ID:D3RTrC4Y
obj-cはver2でプロパティついた時点でSmalltalkな世界観に拘ってないな
ポージングの代わりにメソッド交換を用意してるあたりは動的言語のお化けのままではあるが、続いて発表したSwiftは完全に今時のいいどころ取り言語になったし

で、あらためて>>397見ると「Smalltalk+c」である必要性はなにもないんだよな

それこそJavaでもやってる事だ。動的かどうかよりバインドの仕組みがライブラリ提供されてるかどうかであって、UIKitにSmalltalkの世界はない

そもそもApple製品のかなり高次なところまで支えてるCoreFoundationなんかは、純粋にCによるOOPだ
0414デフォルトの名無しさん2015/12/01(火) 22:40:20.38ID:ANDpHpim
>>408
ボタンオブジェクトの生成には全く触れないのな w
0415デフォルトの名無しさん2015/12/01(火) 22:47:02.23ID:BYRY3bxz
今は再起動無しでプログラムを差し替えるような事について話している流れなので
遅延ロードはまるで関係ない
0416デフォルトの名無しさん2015/12/01(火) 22:50:05.10ID:eT3ZeD+F
>>414
それは悪いけど俺の発言のきっかけは>>402であって、>>397に対するコメントだ。
アプリが動的な振る舞いをするのはあたりまえじゃないか。
ボタンを生成するのもアプリがやってるんだろ?それがどうしたんだよ。
0417デフォルトの名無しさん2015/12/01(火) 23:01:40.26ID:d/SZPXKT
再起動無しが必要なのは大規模システムだろうけど、
その大規模システムはクラウドのおかげで再起動無しで
プログラムを差し替えることの意味が無くなったよね。

どっちみちハードウェアトラブルで再起動は免れない。
なので仮想マシンをたくさん用意して、個々のノードが
再起動しつつもシステム全体は止まることなく動作する。

これはまさに生物に動きそっくりで、幾つかの細胞が
死滅しつつも再生をすることで生命活動をしているのと同じ。
止まらずに動かさなければいけないという方向性が間違いだった。
0418デフォルトの名無しさん2015/12/01(火) 23:02:49.11ID:ANDpHpim
>>416
> ボタンを生成するのもアプリがやってるんだろ?それがどうしたんだよ。

マジで手続き型の発想しかできないんだな w
どうせ爺いだろ?
今更オブジェクト指向理解するなんて無理だから、おとなしく COBOL でもコーディングしてろよ
0419デフォルトの名無しさん2015/12/01(火) 23:12:47.68ID:D3RTrC4Y
>>417
そういう可用性の話になると、もうアプリ実装言語の特性とか関係なくなっちゃうよねえ
Dockerコンテナをどうやってラクに自動で冗長化しようか、というスレ違いな話というかw
0420デフォルトの名無しさん2015/12/01(火) 23:25:33.24ID:eT3ZeD+F
>>418
具体的な反論ができない婆は死ぬがよい
0421デフォルトの名無しさん2015/12/01(火) 23:32:30.59ID:ANDpHpim
>>420
いや、発想の問題だから
具体的に言っても理解できないでしょ w
0422デフォルトの名無しさん2015/12/01(火) 23:36:30.68ID:eT3ZeD+F
>>409は冒頭で「いいえ」とはっきり言っているのだから、>>397にある「連絡先データ」は単なるデータではない、と明言しているわけだ。
『コンパイルされたクラスの実体が動的にメモリ上に生成されています。』とも言っているので、連絡先データがそういう実体なんだろ?
0423デフォルトの名無しさん2015/12/02(水) 00:02:13.15ID:idJaUIFX
>>422
中学生なのか還暦越えどっち由来のバカの壁だか知らんが
とりあえず言われてることを正しくイメージできてないことはわかった。
0424デフォルトの名無しさん2015/12/02(水) 00:06:22.44ID:QJpsouE4
>>423.
ごまかすなよ
話の流れはそうなっているだろうが
0425デフォルトの名無しさん2015/12/02(水) 00:31:12.53ID:mFwhNXbQ
>動的ってのは実行時に与えられたデータを再び言語の欠片として解釈して実行することじゃないのか。
ない。

もうこれ「せんそうってひとをころすことだろ?」って言ってる小学生に
そうじゃないって説明してるみたいになってんぞ?
0426デフォルトの名無しさん2015/12/02(水) 00:43:26.91ID:QJpsouE4
>>425
じゃあ>>409冒頭の「いいえ」ってのはその意味の「いいえ」だったのか?
>>402に対して「いいえ」と答えていたが?
0427デフォルトの名無しさん2015/12/02(水) 01:22:44.43ID:tY3PsYOb
キチは相手するな
0428uy ◆Qawu9.2l1E 2015/12/02(水) 07:41:25.99ID:znqtbEKc
古いPGが知識を更新しないとこうなるっていう例
0429デフォルトの名無しさん2015/12/02(水) 07:43:24.62ID:UkYZlpUx
>>428
そんなレス残してるなら、早く再帰関数板の問題解いてこいよ、能無しクズuy。
0430デフォルトの名無しさん2015/12/02(水) 08:34:15.23ID:1aVlPH12
>>409の言ってることって、オブジェクト生成のための情報を受け取ったアプリが生成とイニシャライズを実行してる、と読めるんだけどそうなのかな?
デシリアライズと呼ぶべきなのか。
0431デフォルトの名無しさん2015/12/02(水) 11:41:21.05ID:8RJQTOkn
UIButtonへのalloc initって、単にUIKitライブラリ使って、他言語で言うnewしてるのと変わらないよ。
obj-cの文法上メッセージ式の形を取ってるだけ
デシリアライズに当たる処理はないね
0432デフォルトの名無しさん2015/12/02(水) 11:46:14.09ID:1aVlPH12
>>431
そうなんですか。
読み込まれてるデータはnewの引数ってことですか?
0433デフォルトの名無しさん2015/12/02(水) 11:51:22.45ID:1yjNHDc1
関数型はどうやって計算しているのか分からないから
コードを自分で最適化するのが難しいよね
0434デフォルトの名無しさん2015/12/02(水) 12:08:15.80ID:8RJQTOkn
>>432
元の話を追うと、アドレスブックデーターベースから取得してテーブルビューソースに適用するという流れになるかと。Androidのリストビュー、内包するボタンへの適用と構図は一緒すね
要するにobj-cも普通に作ると他の言語と何も変わらない感じになって、ただメッセージ式という記法を取ってるという事

もちろんobj-c自体に特徴がないわけではなく、c/c++のネイティブバイナリを吐きつつ、obj-cの中間ランタイムを使った動的処理にも強いという変態さはあるんだけども。
メッセージ記法もc/c++の文法を壊さず追加で言語機能を混ぜ込むという無茶をやってのけてるあたりはすごいことやってるしw
0435デフォルトの名無しさん2015/12/02(水) 12:38:55.73ID:mFwhNXbQ
変わらないっつか、当時の「これがオブジェクト指向だ!」ってC++の変則オブジェクト指向に対して
JavaがObj-Cとかから持ってきたのがメソッドだからね。ドット構文は後でObj-Cの方に逆輸入された。
0436デフォルトの名無しさん2015/12/02(水) 13:26:12.15ID:xfNgImPx
C++が変則的だろうが、それを参考にしたのだから
C++から持ってきたことになるよw
0437デフォルトの名無しさん2015/12/02(水) 13:40:22.41ID:8RJQTOkn
obj-cとC With Classesって初版の登場年月が一緒だし、一概にc++だけが起点とするのはどうかと思うよ
Javaなんて1995年だから、目ぼしい言語はだいたい参考にしただろうし
0438デフォルトの名無しさん2015/12/02(水) 13:43:41.27ID:xfNgImPx
だよな! Obj-C押ししている奴うざい。
別にお前がオリジナルでもなんでもないんだからさ。
0439デフォルトの名無しさん2015/12/02(水) 14:02:44.47ID:mFwhNXbQ
? C++はSimula側から影響を受けたオブジェクト指向言語で
継承による再利用こそが"オブジェクト指向"である!ってやったせいで
現代まで尾をひく混乱を引き起こしてるんじゃないの。
「メソッドとは構造体に内部操作するための関数をつけたものだ」的な
まるで"自動車は馬車から馬を外し操舵機をつけたものだ"バリの解説が出てくるような…
0440デフォルトの名無しさん2015/12/02(水) 14:24:42.73ID:1aVlPH12
>>439
尾は引いてないでしょ。もうさすがに。
0441デフォルトの名無しさん2015/12/02(水) 14:48:33.62ID:/oudx+3q
数あるパターンの内のひとつだね、継承は。
0442デフォルトの名無しさん2015/12/02(水) 16:21:01.70ID:tY3PsYOb
一番尾を引いているのは
obj.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:xfNgImPx
さてここでネタばらし

Perlでは

new Foo と Foo->new のどちらでも呼び出せる。
0445デフォルトの名無しさん2015/12/02(水) 16:49:21.03ID:xfNgImPx
なおPerl で new というキーワードはない。
ただの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:xfNgImPx
このようにC++ですら成長しているが、Smalltalkではそういった話題はない。
0448デフォルトの名無しさん2015/12/02(水) 19:43:11.25ID:1aVlPH12
C++はコア言語の進歩がすごいからすごい。
0449デフォルトの名無しさん2015/12/02(水) 19:50:07.27ID:FJJB5UGr
>>447
Smalltalkは70年代に10年かけて-72(全部リーダーマクロ)、-76(メッセージ式+一部マクロ)、
-80(全部メッセージ式で一部インライン展開)とさんざん試行錯誤して結局今のかたちに
落ち着いた経緯があるからなぁ…。いまさら変えるとして何?
0450デフォルトの名無しさん2015/12/02(水) 20:00:55.87ID:xfNgImPx
可読性と生産性。シンタックスシュガーを増やすこと。
0451デフォルトの名無しさん2015/12/02(水) 20:08:14.26ID:FJJB5UGr
>>450
可読性は英語が読み書きできる人間であれば十分高いし、
生産性は他の言語の2〜3倍は優にあるからもういいよ。
https://smalltalkrenaissance.wordpress.com/2015/02/16/smalltalks-proven-productivity/
シンタックスシュガーはもうちょっとあってもいいかもね。
0452デフォルトの名無しさん2015/12/02(水) 21:18:47.85ID:xfNgImPx
そんな表はどうでもいいよ。バイアスかかってて何の参考にもならん。
0453デフォルトの名無しさん2015/12/02(水) 21:40:11.65ID:/IlXJQs0
>>452
確かに。
バイアスのかかり具合はキミの言う可読性だの生産性だのとたいして変わらんから、
結局のところどっちも参考にならなさそうだ。
0454デフォルトの名無しさん2015/12/02(水) 21:42:13.84ID:ZMObsz9q
>>452のコードの可読性と生産性がなにで書いても低そうだということはわかった
0455デフォルトの名無しさん2015/12/02(水) 22:58:04.54ID:XxNTxugt
https://www.youtube.com/watch?v=zfjTtTeycZ4
0456デフォルトの名無しさん2015/12/02(水) 23:10:52.42ID:3P59l0JH
>>454
わかったというやつは実際なにもわかってない
0457デフォルトの名無しさん2015/12/02(水) 23:11:14.26ID:xfNgImPx
>>456
俺もそう思う。
0458デフォルトの名無しさん2015/12/02(水) 23:47:00.23ID:XSP7Cjkq
>>446
また一歩 c++ は糞化すると。。
0459デフォルトの名無しさん2015/12/02(水) 23:50:25.67ID:1aVlPH12
糞おもしろい
0460デフォルトの名無しさん2015/12/03(木) 00:07:13.33ID:AjKMzEFB
継承ってオワコンなんですか?
0461デフォルトの名無しさん2015/12/03(木) 00:23:41.84ID:oCcO9mV3
Smalltalkerの動的結合/動的生成厨またこないかな・・・
0462デフォルトの名無しさん2015/12/03(木) 04:29:14.15ID:PFXaBZth
uy がバカすぎることがよくわかる流れだったw
0463デフォルトの名無しさん2015/12/03(木) 08:48:13.06ID:FO9WIiRD
Smalltalkで開発失敗した案件をVBで開発し直したら上手くいったなんて話あったよね?
失敗プロジェクトなんて幾らでもあるけど、別の言語で再開発したら上手くいった話は面白い
そのプロジェクトでは、まさにVB以下の生産性だったわけだよね
0464デフォルトの名無しさん2015/12/03(木) 09:29:19.69ID:f0dL0w0J
そういうのって開発メンバー総入れ替えという事なんだろうか?
0465デフォルトの名無しさん2015/12/03(木) 09:45:01.12ID:VTR6VCGQ
>>463
あれは利益を他社にもってかれそうになった日本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
>>465
そのリンク先は情報が断片的すぎる
こっちのが良くわかるよ

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:BNEsovgQ
そもそもオブジェクト指向ですべて完結しない現実を離れて議論しても意味がない。
0469デフォルトの名無しさん2015/12/03(木) 11:33:30.49ID:f0dL0w0J
これだと九大病院の担当者の趣味に振り回された側面も大きそうだ。
0470デフォルトの名無しさん2015/12/03(木) 11:36:09.92ID:+bg8U2A+
でお前らはsmalltalk使えるの?
0471デフォルトの名無しさん2015/12/03(木) 11:55:56.00ID:f0dL0w0J
>>470
おまえがSmalltalkになるんだよ。
0472デフォルトの名無しさん2015/12/03(木) 12:07:28.61ID:PdOTTTXT
>>470
バカにすんな!Smalltalkくらいさらっと書いたるわい
http://ideone.com/EYsLTE
0473デフォルトの名無しさん2015/12/03(木) 12:34:14.88ID:mlsAipyf
FizzBuzzくらいは…

http://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+Wdq
そういうのは覚えたとは言わないだろ
0477デフォルトの名無しさん2015/12/03(木) 18:55:36.42ID:oCcO9mV3
C++は書かなくなってから10年経っても覚えていたのでC++11以降分の学習で済んだ。
0478デフォルトの名無しさん2015/12/03(木) 19:04:17.99ID:W6SHvClG
実務で半年なりでもみっちり使えば、自転車の乗り方忘れないようなレベルで身につくよね

たまにしか書かないシェルスクリプトとかすぐ忘れる
0479デフォルトの名無しさん2015/12/03(木) 19:05:56.07ID:bPLvcOxv
>>473
Rubyに直訳するとこんな感じか?
http://ideone.com/apeubF
0480デフォルトの名無しさん2015/12/03(木) 19:26:04.76ID:z7gVyZ5r
FizzBuzzのコードとかどうでもいいよ。

コード自体に意味があるんじゃなくて
このネタを知らない人を足切するためのものなんだから。
0481デフォルトの名無しさん2015/12/03(木) 20:00:05.85ID:dIBnSjdv
ウチでは15の時の処理を書いた奴も足切りする
0482デフォルトの名無しさん2015/12/03(木) 20:00:16.24ID:fkQyPreg
>>468
むしろ、末端オブジェクトが外界の矛盾だらけのふるまいを自身の責任で処理することで
上位への伝達が抽象化されてシステムがオブジェクト指向だけで完結するのに
副作用がーって内部ロジックの無駄な堅牢性にこだわる妙な一派は
「副作用があるから『外の現実世界』の方を変えろ!」って最後は言い出すのかなーと常々。
0483デフォルトの名無しさん2015/12/03(木) 20:12:28.28ID:6ftnQR2g
>>463
>>465
すげえ、みんな詳しいな。
0484デフォルトの名無しさん2015/12/03(木) 20:15:34.68ID:z7gVyZ5r
まあな!
0485デフォルトの名無しさん2015/12/03(木) 20:17:16.04ID:z7gVyZ5r
> XP駆使してドヤ顔進行したけど、結局、COBOLを置き換えられなかったというあれ。

XPは最高のOSだな!
0486デフォルトの名無しさん2015/12/03(木) 20:22:45.72ID:+bg8U2A+
100までの数というのが味噌だからな
3と5で割り切ない数を配列に初めから入れ置くというのが
もっとも正しいんだよな
0487デフォルトの名無しさん2015/12/03(木) 20:39:52.11ID:k2Nrngjk
>>485
おまえそれ、たとえ冗談だったとしても言ったらドン引きされるレベルだぞ…
0488デフォルトの名無しさん2015/12/03(木) 21:04:21.60ID:z7gVyZ5r
え? 明らかな冗談を何、本気にしてるの!?
0489デフォルトの名無しさん2015/12/03(木) 21:14:49.13ID:W6SHvClG
これは「寒い」ってことではないかと
笑いどころがあるなら説明してくれよ
0490デフォルトの名無しさん2015/12/03(木) 21:49:29.57ID:4rUKwdGH
XPは人気のあったOSなので
皮肉にもなってないんだよな
0491デフォルトの名無しさん2015/12/03(木) 23:29:30.20ID:V6LAtq6h
>>486
どゆこと?
0492デフォルトの名無しさん2015/12/04(金) 00:29:03.13ID:hYxOV08j
横からだけど、計算量の最小化とコード削減になるなと思う
メモリ効率は下がるが「では次は100万までお願いします」と言われてもFizzBazz程度なら屁でもないなと思った

普通に実行時メモリ効率を最小化するように書いても「FizzBazz程度」の話だけども
0493デフォルトの名無しさん2015/12/04(金) 07:33:15.91ID:8RLdjU2U
>>491
配列に
string a={1,2,buzz,4,fuzz,....,fuzz};
こんなかんじ
0494デフォルトの名無しさん2015/12/04(金) 08:30:24.26ID:0uyUSAF4
節子、それやったらあかんやつや…
0495デフォルトの名無しさん2015/12/04(金) 14:10:22.91ID:YEfoDPnk
一発で試験落ちるな
0496デフォルトの名無しさん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
string配列へのアクセスとか剰余計算+条件分岐よりよっぽど遅いだろ
キャッシュ考えろ馬鹿
0499デフォルトの名無しさん2015/12/04(金) 16:41:07.14ID:8RLdjU2U
buzzfuzzの問題を理解しないな
buzzfuzz問題とはとは100までのbuzzfuzzのリストを作ることだよ
俺のやり方だと計算する前に初めから出来ているということだから
計算量は0なわけ
0500デフォルトの名無しさん2015/12/04(金) 16:53:42.79ID:YEfoDPnk
そういう無駄な最適化を考えるやつは真っ先に落とさないとな
0501デフォルトの名無しさん2015/12/04(金) 16:56:26.01ID:DVlNZsBT
土方…
0502デフォルトの名無しさん2015/12/04(金) 17:24:07.87ID:v6cmpHJC
歳三
0503デフォルトの名無しさん2015/12/04(金) 17:25:44.67ID:v6cmpHJC
constexpr fizzbuzz なんて簡単だろ
0504デフォルトの名無しさん2015/12/04(金) 19:02:24.26ID:abMxFNxB
ここの人いつもイライラしてて面白い
0505デフォルトの名無しさん2015/12/04(金) 19:49:40.30ID:v6cmpHJC
犬はイライラすると自分の尻尾を追いかけ廻すんだぜ
0506デフォルトの名無しさん2015/12/04(金) 20:10:54.36ID:aSdPuQok
実家の猫が子猫の時よくやってた
あと電球のヒモの影を追い回しててつい遊んでた
いつまでも取れずストレスだったんだろうな、悪いことした
0507デフォルトの名無しさん2015/12/05(土) 12:05:35.64ID:kPO9yvRD
アスペっぽい独り言だね
0508デフォルトの名無しさん2015/12/05(土) 12:49:36.07ID:g0FYSvJL
これがオブジェクト指向なの?
0509デフォルトの名無しさん2015/12/07(月) 16:16:53.98ID:wr11zZ6x
死ねキチガイ
0510デフォルトの名無しさん2015/12/08(火) 01:34:04.92ID:P4pWRW2p
釣りスレとして立ててみるものの
当人が知識足りないからマジで議論展開されると
立てたバカがついてけないという一連のクソスレ群
0511デフォルトの名無しさん2015/12/08(火) 07:48:27.05ID:yfzIYMuc
オブジェクト指向のスレっていつもこんなんばっかだな。
0512デフォルトの名無しさん2015/12/08(火) 08:02:36.12ID:rWGldP9u
オブジェクト指向に憧れてるだけの雑魚が集まるスレだからな
0513デフォルトの名無しさん2015/12/08(火) 08:33:16.61ID:W1o0a1vT
動的動的いうから動的言語特有の話かと思ったら、ただオブジェクトを動的生成するだけの話を得意気にしてるやつもいた。
用語の統一をしないと不毛だが、言語を越えて通用するものは少ないのかね?
0514デフォルトの名無しさん2015/12/08(火) 15:07:32.47ID:XWTC8s4u
動的言語の動的って言ったら、クラスを実行時に動的に生成もしくは修正することだろう。
0515デフォルトの名無しさん2015/12/08(火) 15:11:27.59ID:W1o0a1vT
>>514
知らんけど、JavaやC++で出来るようなことを動的とは言わんよな
0516デフォルトの名無しさん2015/12/08(火) 15:38:18.99ID:XWTC8s4u
JavaやC++はコンパイラを呼ばずに
実行時にコンパイルすることは出来ない。
動的言語はできる。
0517デフォルトの名無しさん2015/12/08(火) 16:05:11.96ID:P4pWRW2p
まだあの子は>>391で読んでた周りが一斉に噴き出したのを理解してないのか。
0518デフォルトの名無しさん2015/12/08(火) 16:07:05.10ID:DoKjgXRa
真の動的言語ならインスタンスが自らが属するクラスを自由に変えられるとか?
0519デフォルトの名無しさん2015/12/08(火) 16:11:12.88ID:P4pWRW2p
"属する"というか自分の中で使用(コンポジション)してるクラスを
アタッチメントを差し替えるみたいに切り替えて
動作したまま違う動作をするクラスになるぐらいはできるねぇ。
0520デフォルトの名無しさん2015/12/08(火) 16:13:31.49ID:65xd0bro
ruby最強
0521デフォルトの名無しさん2015/12/08(火) 17:46:07.82ID:DoKjgXRa
>>519
そんなのJavaでもできるし
0522デフォルトの名無しさん2015/12/08(火) 17:58:44.37ID:ZssUlu9R
>>518
まあ普通できるわな、それぐらい。
0523デフォルトの名無しさん2015/12/08(火) 17:58:48.23ID:W1o0a1vT
>>519
その説明は"属する"とは意味が全然違う
0524デフォルトの名無しさん2015/12/08(火) 18:07:21.80ID:cOLkCVz/
Javaも動的言語だからそりゃできるだろ。
そして、単純な話、動的言語でコンパイルしたコードがそういう動作してんだから
アセンブラで人が一からコードゴリゴリ書いても動的動作できるに決まってるし。
関数とかクラスとかメソッドという便利機能が言語に備わってるかだけの話なんだが
理解できてるか?
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/
>>523
親クラスと強力に結びついてしまうため安易な継承そのものが最近は推奨されていない。
単にカプセルの中で使用するだけで継承しなくても機能は使えるから。
0528デフォルトの名無しさん2015/12/08(火) 18:23:52.00ID:Egvwb8wm
>>526
コーディングする時点で型を知らなくていいんだよ。コードにNewする型を書いてたら静的生成。
0529デフォルトの名無しさん2015/12/08(火) 18:30:35.55ID:cOLkCVz/
>>525
…あったなぁ…受け渡し型が強力に縛られる言語方面からの
「動的ってのはクラスの型が自由ってことだよ!」って謎解説…
もともとクラスに型がないのが普通な言語からすると
なんで"型"なんて特殊用語が出てくるんだ?って感じだったけど。

受け渡しを縛るために型を指定する記法も文法上設定されてはいるけどw
0530デフォルトの名無しさん2015/12/08(火) 18:35:37.88ID:DoKjgXRa
とりあえずまず、動的(実行時)にあるクラスのスーパークラス(基底クラス)を
すげ替えることができる言語ってあるの? PythonとかCLOSとかはできそうなんだが探せなかった。orz
0531デフォルトの名無しさん2015/12/08(火) 18:42:06.76ID:Egvwb8wm
>>529
昔から動的生成はそう定義して使われてる。
定義されてるにも関わらず不勉強な奴が妄想して謎解説とか言い出して、混乱させてるだけ。
だいたい型のない言語に動的生成、静的生成なんて概念あるのかね? 型がないのに。

キミのいうその動的生成、静的生成の概念がある型のない言語とはなんだね?
0532デフォルトの名無しさん2015/12/08(火) 18:47:01.57ID:DoKjgXRa
>>530
どうやら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:DoKjgXRa
>>530
Pythonもふつーにできたわ。こりゃどんな言語でも(動的言語なら)楽勝だな。
http://ideone.com/TFd9Hn
0535デフォルトの名無しさん2015/12/08(火) 19:11:00.66ID:9ML4qWmN
動的型付けのメリットがわからん
0536デフォルトの名無しさん2015/12/08(火) 19:22:32.23ID:NMHe7TFl
>>535
適当なコードで良い時はダックタイピングが楽
0537デフォルトの名無しさん2015/12/08(火) 20:15:29.00ID:ZssUlu9R
>>536 は典型的な無知
0538デフォルトの名無しさん2015/12/08(火) 20:34:58.52ID:NMHe7TFl
>>537
(笑)
0539デフォルトの名無しさん2015/12/08(火) 20:41:02.45ID:Egvwb8wm
>>533
静的生成でコンパイル時に型を決定してもメモリ確保、オブジェクト生成されるのは実行時だろ。
つまりコンパイル時に型が決定しているか、してないかの違いだ。
0540デフォルトの名無しさん2015/12/08(火) 20:59:15.90ID:4cJ0X+3R
>>539
コンパイル時に●が決定しているか、してないかの違い

「型に限らず」だ
0541デフォルトの名無しさん2015/12/08(火) 21:00:12.73ID:ZrcjdAX/
>>539
だから型は関係ないんだって
static memory allocationと言えばコンパイル時だし、それこそ実行時確保=動的確保の事でしょ?
0542デフォルトの名無しさん2015/12/08(火) 21:03:59.04ID:W1o0a1vT
はあ、動的言語といったら動的型付のことなの?
0543デフォルトの名無しさん2015/12/08(火) 21:08:19.34ID:Egvwb8wm
>>540
メジャーなオブジェクト指向言語、クラスライブラリのオブジェクトの動的生成の仕様を見てもどれも「型」のことだが、
型に限らずと説明している言語はなんという言語だね?さっきの知ったか馬鹿も逃げて答えないし。
0544デフォルトの名無しさん2015/12/08(火) 21:17:51.60ID:P4pWRW2p
そもそも動的言語じゃクラスがクラスを返すようにできて
そのクラスそのものが動的にインスタンス生成されるし
クラスの構造自体もやりたきゃ実行時に変化させられるんだから
よくわかってない子がプログラムについてどういうイメージと理解をしてるのかが謎
0545デフォルトの名無しさん2015/12/08(火) 21:40:36.10ID:Egvwb8wm
じゃあアセンブラもCも動的言語だな。無意味な定義だ。ハーバードアーキじゃなければ大抵の言語で可能だ。
0546デフォルトの名無しさん2015/12/08(火) 21:58:23.30ID:v8fEJfJs
>>545
>>524
0547デフォルトの名無しさん2015/12/08(火) 22:32:41.97ID:ZrcjdAX/
動的型付け言語と違って「動的言語」って定義らしい定義ないし
0548デフォルトの名無しさん2015/12/08(火) 23:15:15.25ID:XWTC8s4u
>>528
> コーディングする時点で型を知らなくていいんだよ。コードにNewする型を書いてたら静的生成。

型を知らないで、どうやってオブジェクトに
そのメソッドがあるって認識するの?

変数には型を書いてないだろうけどさ、
コードはこのオブジェクトはこのメソッドと
このメソッドがあるということを前提として書くわけでしょう?

それって型を意識しているのと何が違うの?
0549デフォルトの名無しさん2015/12/08(火) 23:37:29.66ID:FKC63taK
>>548
こういうOOPの切り分け、まったく理解できないクチなんじゃない?
http://blog.kokuyouwind.com/archives/1189
0550デフォルトの名無しさん2015/12/08(火) 23:49:09.91ID:CeuzkA+c
>>548
メソッドがなければ例外が出る。
それを考慮してれば型は気にしなくて良い。
0551デフォルトの名無しさん2015/12/08(火) 23:49:38.99ID:ZrcjdAX/
>>548
だよなー
そこだけ切り取ればそんなん型推論でいいしな
動的静的って言葉を各々いろんなスキームで説明なく使ってて、しかも各々が思い入れ込めてて理解し合えてない感じだなw
0552デフォルトの名無しさん2015/12/08(火) 23:54:17.38ID:ZrcjdAX/
>>550
おいおいwww
そっちにブレると収拾つかんし、そういう話じゃないだろ
それにその発言だけだと、結局例外出さずに動かすには気にする必要があるわけでしょうに。説明になってない

そういう迂闊な発言からテストすれば良いんだ云々の話になられても困るし
0553デフォルトの名無しさん2015/12/08(火) 23:54:58.64ID:XWTC8s4u
>>550
いや、だから例外出るならば動かないってことなので、
そのオブジェクトの型は、コードが期待する型と
互換性がないってことでしょう?

渡せりゃいいって問題じゃない。
動かなければ意味が無い。
0554デフォルトの名無しさん2015/12/08(火) 23:58:52.92ID:4cJ0X+3R
自分は動的型のことなんて眼中になく「evalがあるかどうか」だけしか考えてなかったから
まさか動的型が話題になっているなんて。
0555デフォルトの名無しさん2015/12/08(火) 23:59:52.92ID:XWTC8s4u
それからさ言い方を変えると、Javaとかでも
「コーディングする時に型を知らなくていい」って事にならない?

なぜならfooメソッドとbarメソッドがある型なら
どんな型でもいい=型を知らなくていいということならば、
Javaだってfooとbar(があるインターフェース)を
継承した型なら、どんな型でもいいわけで。
0556デフォルトの名無しさん2015/12/09(水) 00:00:55.63ID:pqe3smnr
>>555
「継承した型なら、」って条件はかなり大きいと思うんだが。
0557デフォルトの名無しさん2015/12/09(水) 00:02:39.55ID:ZwktDk40
>>556
だってメソッドがなければ例外が出るじゃん?
それじゃ意味ないよね?

動的型だって、メソッドがなければ正しく動かないわけで
いけないわけで。

メソッドが1個しかないインターフェースを
継承してるのと何が違うの?
0558デフォルトの名無しさん2015/12/09(水) 00:08:41.42ID:Nwi0kic/
>>548
そういや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:PAqE7lrN
あ、悪い>>560は>>558宛
0562デフォルトの名無しさん2015/12/09(水) 00:22:21.20ID:ZwktDk40
>>558
Javaだと、class.getDeclaredMethodsだね。

静的型だと実行時に型情報はなくても良いものだったから
パフォーマンスのために保存していない情報で、
従来は取得できないものだった。

今はあったら便利ってことで実行時型情報を
リフレクションと呼ばれるカテゴリの関数で
取得できるようになってる。

少し物々しくなるけど、今ではほとんどの言語で
メソッド一覧は取得可能だよ。
0563デフォルトの名無しさん2015/12/09(水) 00:25:33.14ID:Nwi0kic/
>・動的型・・・実行しないとエラーがわからない
いや、普通にコンパイル時にコネクションチェックしてくからエラーは出るぞ。
致命的エラーじゃなくてワーニングだけどな。
0564デフォルトの名無しさん2015/12/09(水) 00:26:38.33ID:ZwktDk40
コネクションチェックってなんだよ?
0565デフォルトの名無しさん2015/12/09(水) 00:29:30.37ID:ZwktDk40
>>560
動的型だと、メソッド一覧の取得はあまりないが、
メソッドが存在するか?のチェックは時々ある。

それは変数に型がないので、型の違いによるディスパッチ。
要するに、引数の型が違う同じ名前のメソッドを定義する
多重定義(オーバーロード)が使えないから、

プログラマが自分で、メソッドがあればこっち、
なければこっちって書く必要があるから。
0566デフォルトの名無しさん2015/12/09(水) 00:40:12.17ID:PAqE7lrN
>>565
うん、まあそうなるのは分かる
静的型付けでエラーにして欲しいかどうかの考えが分かれるところだね

rubyのmethod missingを例にとると、個人的には黒魔術の入り口が広すぎると感じて嫌い。だけど便利なのは分かる。respond_toが許せる限界
コンパイラエラー盲信かテストかって話になりがちだけど、どちらも重要だと思ってるので悪しからず
0567デフォルトの名無しさん2015/12/09(水) 00:48:55.46ID:pqe3smnr
>>559
>○○型を継承とコードに書く必要があるか?
>・静的型・・・書く必要がある

それは総称型(C++のtemplate、将来的にはコンセプト)によって必要なくなる
0568デフォルトの名無しさん2015/12/09(水) 00:49:21.60ID:ZwktDk40
> コンパイラエラー盲信かテストか

コンパイラエラーを盲信している奴なんて居ないと思うけど?

コンパイラエラーをバグだと思うのは初心者ぐらいで
普通は誤字脱字程度の扱いでしょ?
レビューやテストに出す前の簡単なチェック

その誤字脱字程度の簡単なチェックが、テストとか大きな話になるのが動的型なだけで。
0569デフォルトの名無しさん2015/12/09(水) 00:50:13.38ID:pqe3smnr
・・・ことがある
0570デフォルトの名無しさん2015/12/09(水) 00:53:28.18ID:Q8p7CoT8
>>568
>普通は誤字脱字程度の扱いでしょ?
それはさすがに認識を改めるべきだ。
0571デフォルトの名無しさん2015/12/09(水) 00:57:22.11ID:ZwktDk40
>>570
え? 何か間違いでもある?
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
>>568
盲信は言い過ぎだったねごめん。
コンパイルエラーに助けられる事が多い、程度に読んでもらえれば幸い。

型チェックや動的静的問わず、今時のコンパイラエラーって防波堤としてほんとよくできてると思うんだ。
非到達エラーから制度劣化、未定義の可能性とかありがたいじゃない。

動的型付け言語では根本的にエラーとして検出しにくいケースが、静的型付けよりは多いよね。良し悪しじゃなく仕組み上の話だし、当然妥当なテストがあれば補える問題だけどと。

コンパイル通ってからの、本当の戦いを少しでも軽減したいってことだよw
0575デフォルトの名無しさん2015/12/09(水) 01:24:14.77ID:EfFDGPMf
>>573
ほんとそれw

コンパイル通ってからだよ…ほんとに…
0576デフォルトの名無しさん2015/12/09(水) 02:38:19.01ID:ZwktDk40
>>574
> コンパイル通ってからの、本当の戦いを少しでも軽減したいってことだよw

そうそう。

動的言語だとコンパイルってものがないから、
本当の戦いにどうでもいいようなものまで連れて来てしまう。

そりゃテストを書けば見つけられるだろうけど、
テストが漏れていたりすればテストではわからない。
それだと見つけるまで時間がかかってしまう。
0577デフォルトの名無しさん2015/12/09(水) 04:04:00.95ID:xvODQKwr
なんだ、動的言語ってインタプリタのことか。
0578デフォルトの名無しさん2015/12/09(水) 04:32:58.97ID:ZwktDk40
インタプリタは1行毎に意味を解釈して実行する。
0579デフォルトの名無しさん2015/12/09(水) 05:07:44.62ID:xvODQKwr
なんだ、複数行を解釈して実行するインタプリタを動的言語というのか。
0580デフォルトの名無しさん2015/12/09(水) 05:27:33.68ID:ZwktDk40
うん、大体あってる。1行ごとじゃない時点でインタプリタではないけれど。
あとインタプリタは同じ行を毎回解釈するって点も違う。
0581デフォルトの名無しさん2015/12/09(水) 05:42:18.67ID:L2N/sqSc
動的言語というのは実行時にプログラム自身を書き換え可能な言語だろ。
動的OO言語というのは実行時にクラスを書き換え可能な言語だろ。
当然、既存のオブジェクトを実行時にクラス変更することも含む。
それができなければ動的OO言語とは言えない。
0582デフォルトの名無しさん2015/12/09(水) 05:47:11.44ID:xvODQKwr
なんだ、ゆとりはインタプリタの実装したことないのか。ゲイツでも若い頃に実装してるというのに。
0583デフォルトの名無しさん2015/12/09(水) 06:15:38.80ID:ZwktDk40
インタプリタは簡単だよね。
0584デフォルトの名無しさん2015/12/09(水) 06:59:52.46ID:AQfN6yiZ
動的言語のたとえばRubyがインタープリターっていうなら
Javaもインタープリターだな。(もちろん反語的に)
0585デフォルトの名無しさん2015/12/09(水) 07:03:13.71ID:AQfN6yiZ
>>581
> 当然、既存のオブジェクトを実行時にクラス変更することも含む。
> それができなければ動的OO言語とは言えない。

Smalltalk以外でそれを簡単にやってのける言語ってあるの?
0586デフォルトの名無しさん2015/12/09(水) 07:32:11.19ID:AQfN6yiZ
>>585
あ、プロタイプベースのOOPLなら簡単なことか。
委譲先オブジェクトをクラスと見なしてよい、という条件付きでだけれど。
0587デフォルトの名無しさん2015/12/09(水) 07:36:24.78ID:eZdYKXJt
動的型付けのメリットが手軽に書ける事だとしたら、pythonって手軽に書ける訳でもないし動的型付けだしなんなんこいつ
0588デフォルトの名無しさん2015/12/09(水) 07:41:58.30ID:S9JjB3pt
型エラーのコンパイラチェックなんて不要
むしろ型が複雑すぎるがゆえのキャストミスのほうが多い
0589デフォルトの名無しさん2015/12/09(水) 08:43:09.26ID:dpMFVJ21
>>2
は?
0590デフォルトの名無しさん2015/12/09(水) 14:24:31.32ID:7dqQv49h
>>1
数式は多態使い捲りだが?
0591デフォルトの名無しさん2015/12/09(水) 14:45:51.19ID:ZwktDk40
>>588
> むしろ型が複雑すぎるがゆえのキャストミスのほうが多い

動的言語は大変だね。キャスト出来ないことを
コンパイル時にわからないから、そういうことになる。
0592デフォルトの名無しさん2015/12/09(水) 15:08:28.76ID:Nwi0kic/
いや、普通にコンパイル時に動作追ってくからワーニングでるけど…?
0593デフォルトの名無しさん2015/12/09(水) 15:37:51.16ID:ZwktDk40
>>592
その言語とでてくるメッセージを教えて下さい、
0594デフォルトの名無しさん2015/12/09(水) 15:56:17.74ID:r1pqWhI4
動的言語は型は一種類しかない
Void型のポインター型ね
Void型のオブジェクトでメソッドを呼び出すと
どんなメソッド名も定義されているから
エラーにはならない
例外を投げるだけだから問題にならない
0595デフォルトの名無しさん2015/12/09(水) 16:05:34.93ID:r1pqWhI4
Javaは動的言語だけど実行時のとコンパイル時の両方で
型チェックするから静的型付け言語なのにキャストしてもエラーにならない
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:ZwktDk40
例外を投げたら止まるわけだからまずいよね?
0600デフォルトの名無しさん2015/12/09(水) 17:16:13.41ID:r1pqWhI4
キャッチすれば止まらないよ
0601デフォルトの名無しさん2015/12/09(水) 17:17:00.19ID:ZwktDk40
>>600
つまりキャッチしなければ、止まるっていうことだよね?

システムは止まったら行けないよ。それは
エラーということ。
0602デフォルトの名無しさん2015/12/09(水) 17:20:32.72ID:r1pqWhI4
逆にいうと止まってほしい場合はキャッチしなければいい
0603デフォルトの名無しさん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
>>602
今は、正常に動作するためには
どうするかって話をしているだよ。

例外すら出てはいけない。キャッチしないなんてもってのほかだ。
キャッチしても正常に動作しなければ、それも意味がニア。
0606デフォルトの名無しさん2015/12/09(水) 17:23:18.22ID:ZwktDk40
タイプミスしたw

× それも意味がニア。
○ それも意味がない。
0607デフォルトの名無しさん2015/12/09(水) 17:24:02.66ID:ZwktDk40
当たり前だと思うけど、メソッドがないという
例外が出るときはバグだよ。
0608デフォルトの名無しさん2015/12/09(水) 17:25:38.34ID:r1pqWhI4
例外はエラーじゃないからね
0609デフォルトの名無しさん2015/12/09(水) 17:28:27.85ID:ZwktDk40
>>608
言葉遊びがしたいの?

正しく動作しないならば、
それはシステムエラーだよ。

画面に「システムエラーです」って表示されたら
それはエラーなのは当たり前。

システムエラーですっていうメッセージを表示するという処理をしているので
正常に動作していますって言う奴は某社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:xvODQKwr
型が不明確な言語は馬鹿が使う言語という風潮は40年前からだろうに。
0615デフォルトの名無しさん2015/12/09(水) 17:42:31.05ID:r1pqWhI4
いやいや、動的言語は動的型チェックというのをしてるから
動的言語は型チェックしてないわけじゃないよ
動的型チェックしないとエラーになるからな
0616デフォルトの名無しさん2015/12/09(水) 17:45:04.46ID:xvODQKwr
>>615
次から次へと後からおれおれ仕様出すなよ。

典型的な無能SEじゃねーか。
0617デフォルトの名無しさん2015/12/09(水) 21:16:34.64ID:Q8p7CoT8
俺には動的言語は無理だ。
それは、俺が無能だからだ。今日はっきりわかった。
0618デフォルトの名無しさん2015/12/09(水) 21:48:41.66ID:cGdlc0Ik
動的だろうと静的だろうとカスがかけばカスなものができる。
0619デフォルトの名無しさん2015/12/09(水) 21:55:40.55ID:Q8p7CoT8
カスは捨てられるから問題なかろう
0620デフォルトの名無しさん2015/12/09(水) 21:57:39.74ID:xvODQKwr
カスほど動的言語を好む。
0621デフォルトの名無しさん2015/12/09(水) 22:05:10.11ID:ALRWLnkT
>>620
お前が一番カスじゃん。
0622デフォルトの名無しさん2015/12/10(木) 02:17:51.20ID:Qgz/vdGw
また急にスレが止まったなあw

>>617
詳しく聞きたいな
それだけ読めば動的言語(動的型付け言語の事なのかは置いとく)に壁を感じたという事だとお見受けするのだけど、ID抽出する限りの邪推だけど他に言いたい事あるんじゃないのかw
0623デフォルトの名無しさん2015/12/10(木) 09:26:32.64ID:9vd2ccw+
>>594
いや、動的言語にも複数の型を持つものが多いのだが…
例えばSmalltalkだってindexableかどうかとか、tag付き直値のオブジェクトとかがあって、それぞれ別の型として実装されている。
ただし性的型付言語と違って、ユーザプログラマがそれを意識する必要がないように巧みに言語設計されている。
0624デフォルトの名無しさん2015/12/10(木) 11:29:49.69ID:m24vGLCh
あー、「所属するクラスを動的に変更できる」ってコンセプトが合ってればアップキャストが成功する、ってイメージでおk?
0625デフォルトの名無しさん2015/12/10(木) 13:10:42.11ID:dgwO9L7F
>>624
継承関係にないクラスへの変更を想定している。
0626デフォルトの名無しさん2015/12/10(木) 15:11:47.93ID:9vd2ccw+
>>624
キャストで変更できるのは静的型だ。動的型は変更されない。
0627デフォルトの名無しさん2015/12/10(木) 16:01:12.67ID:m24vGLCh
>>625
確かにアップキャストは継承関係を前提とした用語だからダメですね。
AクラスオブジェクトだけどBクラスオブジェクトへの参照として受け取ってもらえる、と言うほどの意味でした。
>>626
06284232015/12/10(木) 17:54:27.03ID:egR/2o8n
>>625
素朴な疑問なんだが、そう言うことができるとなんか嬉しいの?
0629デフォルトの名無しさん2015/12/10(木) 18:07:51.35ID:UkA8Tt9i
>>627
たとえば、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
>>628
複数から参照されているオブジェクトの同一性を保ったまま、別のものにすげ替えたいとき。
何らか制約があって変更できないオブジェクトを更新するとか、
ORMやOODのプロキシーをユーザーに意識させずに本物にすげ替えるとか、いろいろ。
0631デフォルトの名無しさん2015/12/10(木) 18:30:31.69ID:Ti4G586p
>>630
そういうのって、コンパイル時のパッチでよくね?
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
>>632
ソフトウエアを設計通りの運用しか想定せず使い捨てにするならその理解でいいと思います。

ただ、ソフトウエアは長期運用 and/or 大規模になると設計当初は想定すらできなかった働きを
させなければならないこともあるので、そういうときに動的遅延性が役立ちます。
0635デフォルトの名無しさん2015/12/10(木) 18:52:36.10ID:UkA8Tt9i
>>634
×動的遅延性 → ○動的遅延結合性
06364232015/12/10(木) 19:31:05.50ID:t7TUm6W9
>>634
>>633 も言ってるけど動作中に入れ替えることぐらいなら大抵の言語でできるよね
メリットってそれしかないってこと?
0637デフォルトの名無しさん2015/12/10(木) 19:56:04.31ID:HlhlTzMo
キミみたいなせっかちな人にはたぶんそうだろうね
0638デフォルトの名無しさん2015/12/10(木) 20:00:28.78ID:6p+J3/cL
>>633とか>>636とか読むとどっからともなく
トカトントンという音が聞こえてレスする気がなくなるw
06394232015/12/10(木) 20:11:29.81ID:t7TUm6W9
>>637-638
みたいなレスしかないってことは >>636 でFAってことか…
0640デフォルトの名無しさん2015/12/10(木) 20:43:49.26ID:Qgz/vdGw
インターフェース使ってりゃ済む話だよな
静的型でもダックタイピングあるしな
golangなんかどんだけ適当に組んでても>>630の要求程度はチョチョイのチョイだぜ
0641デフォルトの名無しさん2015/12/10(木) 21:04:54.50ID:UkA8Tt9i
golang で >>629 相当のことをチョチョイとやるとどんな感じなりますか?
0642デフォルトの名無しさん2015/12/10(木) 21:39:49.51ID:Qgz/vdGw
うーん、goだと.z参照できないなごめんよ
ruby詳しくないけど、Aで定義してたものをBに差し替えて、Aにない要素に如何にアクセスするかってことだよね
それ踏まえると>>630は急に難題になるな

ただ、これ言うとJavaでもなんでもありになっちゃうけどその必要が生じたら単にインターフェースやスーパークラス自体を書き換えればいいのではとも思ってしまった

単に俺が、どういう時にそれが必要になるのか共感できてないのかな
0643デフォルトの名無しさん2015/12/10(木) 22:36:24.52ID:Ti4G586p
>>634
> ただ、ソフトウエアは長期運用 and/or 大規模になると設計当初は想定すらできなかった働きを
> させなければならないこともあるので、そういうときに動的遅延性が役立ちます。

設計当初は想定すらできなかった働きを
無理やり誤魔化すのは、ソフトウェアの崩壊を招くから
やめたほうがいい。

設計当初は想定すらできなかった働きをさせる場合は、
まず、新しい設計を考える。
その設計に互換性を保ちながら移行させる。
古い仕様をなくす。

みたいな感じで、想定外を、想定内の動きに変えていくことが重要。
長期運用 and/or 大規模なプロジェクトであればあるほどね。
0644デフォルトの名無しさん2015/12/10(木) 22:39:55.42ID:Ti4G586p
>>642
> その必要が生じたら単にインターフェースやスーパークラス自体を書き換えればいいのではとも思ってしまった

そういうこと。書き換えればいい。
本質的を気付きやすいように説明するとこうなる。


動的言語は動的に書き換えられる、
静的言語は動的に書き換えられない。

というならば静的言語は静的に書き換えればいい。
0645デフォルトの名無しさん2015/12/10(木) 22:54:23.18ID:6p+J3/cL
>>643-644
あの…信者が発狂するからあんまり言いたくないけど
C++ベースで毎回そういう一から組み直しをやってコケてる代表例がマイクロソフトWindowsで
Objective-Cベースでモジュール単位のアップデートや追加で安定して
バージョン上げたり、モバイル用サブシステム出したりしてんのがAppleのMacやiOSなんですが…
0646デフォルトの名無しさん2015/12/10(木) 23:01:35.42ID:2Vi0Zcok
キミもキミでいったんObj-Cマンセーから離れられないものかね…
0647デフォルトの名無しさん2015/12/10(木) 23:35:13.11ID:Qgz/vdGw
MSなんて力任せに.net作ったお化けだぞ
1から組み直してんじゃないよ
気に入らなくて表層を何度もやり直して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:iRkUriYX
動けば良いのよ動けば
0650デフォルトの名無しさん2015/12/10(木) 23:53:29.00ID:Qgz/vdGw
>>649
お前は黙っとけ
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
>>652

                 , -‐ァ‐- 、
                    />:<´  ..:ヽ
            , -‐ヤ .:rt:ァ;゙´ ,」:\
            ` ̄`ヾ"`ヾ:::7 シ.: : :ヽ
                  ト-、 ` ツ:.: : : : :\
                 l    �_:、 : : : :.:.、\
                ',    .: :ヾ、:.:.、:.:�_ミゝ、
                 '、      ` ‐�_ミミミミ、
                   ヽ.      _,`''=ミミミミ:、
                      `7>- ニ..ミ三彡ヘヽ\ `
                      /´       /  ヾ:\ヽ
                    、,/       /    ヾ.:ヾ\
                 ̄/         __/      ヾ:.ヽヾ、
                          / ヽ    
         ヒョウロンカキドリ  山梨県 富士樹海

    他の鳥が作った巣に難癖をつけ、攻撃する習性を持つ
    しかし自分では巣を作らない
0655デフォルトの名無しさん2015/12/11(金) 00:10:28.35ID:PJrkNk76
>>648
普通にやると>>629はどう書くのが適切ですか?
たいていの言語は読めますので、使い慣れた言語で書いてみてください。
0656デフォルトの名無しさん2015/12/11(金) 00:18:45.55ID:MbyU/AgB
>>655
インターフェースって段階で>>629は度外視した話でしょ

共通インターフェースにまとめていいならそれは静的型の片付けかたに過ぎないし、.zのような未知のアクセスを考える事自体が不要になる
method_missingで魔改造するような用途には静的型言語は使えない。それでいいと思うよ
0657デフォルトの名無しさん2015/12/11(金) 00:19:50.14ID:0t4QVdbR
リフレクションとか使えば、できるんじゃないの?
0658uy ◆Qawu9.2l1E 2015/12/11(金) 00:22:13.90ID:3I74ljVL
つうか
obj.extend B

だろ
0659デフォルトの名無しさん2015/12/11(金) 00:23:15.44ID:MbyU/AgB
なんでかstrutsの末路思い浮かべた
0660uy ◆Qawu9.2l1E 2015/12/11(金) 00:24:36.78ID:3I74ljVL
>>629


class 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
>>647
もともとランタイムが必要だからシングルプロセッサだとタイムシェアリングで
回すしかないので、積極的にマルチプロセッサ、マルチコアに注力したのが
最近のなんでもマルチコアにぴったりフィットしたっつか
ガベージコレクション止めてオートリテインにしたり
このまま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/e
>>645
MSは成功例なので、全く当てはまりませんね
再コンパイルしないで、Appleが何か配信でもしたんですか?w
0663デフォルトの名無しさん2015/12/11(金) 00:43:29.29ID:MbyU/AgB
>>661
切り捨てまくってるよ
差異を吸収ってのもなんのこっちゃ。MSは誰がどう見ても、他のどんな企業より桁違いに互換性偏執狂でしょう
0664デフォルトの名無しさん2015/12/11(金) 00:45:20.87ID:pIbxH6/e
Rubyなんて互換性切り捨てまくりだからな。

動的だったら対応できるんじゃねーの?w
0665デフォルトの名無しさん2015/12/11(金) 00:48:50.12ID:pIbxH6/e
静的なMSの文化が高い互換性を持っていて
動的なRubyが互換性切り捨てっていうのは面白いな。

一見逆に見えるが、本来の設計をねじ曲げて無理やり対応可能とうことは、
本当にねじ曲げてしまって、すぐに複雑になるからであろう。
ねじ曲げた対応のことまで考えてられない。
そんな使い方は想定していない。だからすぐに互換性が切り捨てられる。
0666uy ◆Qawu9.2l1E 2015/12/11(金) 00:57:45.70ID:dO1puNiT
なんかいろいろ関係ない話をくっつけててヤバいなこのスレ・・・

言語仕様の互換性と
OSの互換性を並べて考えるっていう・・・
0667デフォルトの名無しさん2015/12/11(金) 01:07:53.26ID:PJrkNk76
>>658
B はインターフェイスや抽象クラス、モジュールではなく
普通にインスタンスを生成できる、Aと同じ、しかし互いに継承関係にはないクラスです。
0668デフォルトの名無しさん2015/12/11(金) 01:11:29.34ID:MbyU/AgB
>>667
それにレスすんな
話が伝わらん上に意味不明なこと喚き散らして収拾がつかないから、みんな相手にするの諦めてんだよ
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
>>668
あ、そういうヒトなんですね。失敬、しっけい。以後、スルーします。
0672uy ◆Qawu9.2l1E 2015/12/11(金) 03:04:34.80ID:OT4cT4iB
>>667,670,671
君お話にならないレベルなんだけど
なんか名無しに励まされて勝ち誇ってる感じだけど、そのままいくとヤバいよそれ
0673uy ◆Qawu9.2l1E 2015/12/11(金) 03:10:17.89ID:7IX83ZkB
方法を一つに限定し他を排他しようとするのは
それが自分にとって分かりやすいと思ってるからです

けれどひとによっては方法が二つになろうと
しっかりと理解出来て、かつ効率を高めるものかもしれないね

自分の頭のスペックを疑ってくださいよゴミカス共

インターフェースが複数個あろうが
それを理解してコーディング出来る奴が開発してるなら、そこに効率があるんです
0674デフォルトの名無しさん2015/12/11(金) 04:20:22.09ID:aIPzTNnb
>>631
実運用しながらクラスを改変して、
既存オブジェクトを新しいクラス定義にあわせてマイグレーションしてやらないといけない時には、
既存オブジェクトのクラスを変更する必要があるだろ?
0675デフォルトの名無しさん2015/12/11(金) 05:14:41.81ID:z9XcLK7w
>>674
いや別に?

新旧二つのバージョンを同時に起動して
リバースプロキシで新しい方にリダイレクトすればOK

そうやってアプリのバージョンアップをするんだよ。
0676デフォルトの名無しさん2015/12/11(金) 05:29:32.39ID:z9XcLK7w
そもそも、実運用しながらクラスを修正するような
綱渡りな開発しないからな。

もしクラスの修正に失敗したらどうするのか?
バグが含まれる可能性もあるし、しっかりテストしなきゃいけない。
テストしている間、運用を停止するわけにもいかないしな。

データなんて、普通はデータベースに有るわけで、
オブジェクトがどうとか、言語レベルで終わる話じゃない。

こちとら複数台のPCで構成された、大規模システムを扱ってるわけで、
同時にすべてのシステムを一瞬でアップデートなんてできるわけがないので、
複数のバージョンを同時稼働させて順次切り替えることで、
無停止でシステム更新を行ってるんだよ。
0677デフォルトの名無しさん2015/12/11(金) 07:08:27.33ID:+dkanqa9
段階的に部分をバージョンアップする話をしてるのか?
何を難しくしてるのかいまいちわからない。
06784232015/12/11(金) 07:38:35.25ID:7DodXpQ6
>>677
>>625 みたいな機能があると何が嬉しい?
> 部分をバージョンアップできる
え? それだけなの? ← 今、ココ
0679デフォルトの名無しさん2015/12/11(金) 07:54:51.24ID:+dkanqa9
例えばcallerとcalleeがあって、先にcalleeに.zが追加された↓
callerはcallee.zなんて知らないから呼ばない

先にcallerにz()が追加された↓
if (callee.responds(z)) {
 callee.z()
}

これだけの事を言ってるような流れだが..
0680デフォルトの名無しさん2015/12/11(金) 09:37:59.91ID:Wogf6bzX
そもそも実行時の条件分岐なんてものは減らしたいし、判断条件の種類は少ない方がいい。
0681デフォルトの名無しさん2015/12/11(金) 09:52:07.57ID:+dkanqa9
calleeが何者かわからないがいきなりcallee.z()と呼びたいわけか。
なるほどなw
0682デフォルトの名無しさん2015/12/11(金) 09:52:41.01ID:s7hp/dAB
>>625
既存の動的あるいは動的型付けOOPLでこういうことできるのあるの?
0683デフォルトの名無しさん2015/12/11(金) 10:04:11.03ID:r5Q1R4hd
動的オブジェクトの型は
C++のテンプレートの型引数の動的に使える奴だと思っておけばいい
これをダックタイピングという
0684デフォルトの名無しさん2015/12/11(金) 12:36:53.98ID:AuU75Yh5
C++のテンプレートやオーバーロードのダックタイピングは静的だが
静的故にコンパイル時に型のエラーを検出できる
ダックタイピングなのに型安全なのだ
上手い落とし所だな
0685デフォルトの名無しさん2015/12/11(金) 14:32:20.32ID:tGeGgvhO
>>681
calleeがAというproxyで、callee.z()をしようとするタイミングでBになる
っていうのは考えられる。実装は出来ないけど。
0686デフォルトの名無しさん2015/12/11(金) 15:47:24.76ID:PJrkNk76
>>684
構造的部分型は?
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
>>675-676
君って、技術的な不足を補う応急策を定石だと思い込んじゃうバカ?
施しようがないな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
>>691
>Pythonは最悪で、代入が有れば別変数で、代入がなく読み込みだけなら同一変数になる
>つまり、Pythonは代入を宣言の代わりとして解釈しているので
>代入が有れば新たな変数が宣言されたとみなして別変数だが
>代入がなければ宣言がないので同一変数ということになる

おっと、宣言なしでdefsの左辺に変数を書いてスコープをシャドーできる
現代最強の型システムを誇るHaskellやML系の静的型付関数型言語の悪口は
そこまでだ!

おまえが言っている静的型付言語のメリットというのはJavaやScalaのようなゴミ言語の技術的妥協の産物だ。
おまえが言っている動的型付言語のデメリットというのはHaskellやMLのような優れた言語も持っている特徴だ。
バーカw
0693デフォルトの名無しさん2015/12/11(金) 19:08:47.00ID:qdMeKh85
型推論ほど馬鹿な仕様はないと思う。誰得なんだと。
0694デフォルトの名無しさん2015/12/11(金) 19:31:00.54ID:z9XcLK7w
型推論は、型を推論してくれるってだけで静的型であることに
変わりはないので、単純にタイプ数が減るというメリットが有る。
逆にデメリットはいっさない。
0695デフォルトの名無しさん2015/12/11(金) 19:38:46.07ID:XO3DVX8V
コンパイル時間は?
0696デフォルトの名無しさん2015/12/11(金) 19:41:56.13ID:z9XcLK7w
やってることは型チェックと同じなので変わらないね。

型チェック・・・この型以外はNG
型推論・・・この型以外はNGだから、この型と推論する
0697デフォルトの名無しさん2015/12/11(金) 20:11:34.82ID:qdMeKh85
>>694
くだらない。
0698デフォルトの名無しさん2015/12/11(金) 20:25:39.96ID:ghCmNcLm
型推論ディスる人はじめて見たな
0699デフォルトの名無しさん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
>>696
つまり、ScalaやSwiftのコンパイルが遅いのと型推論は無関係だと?
0702デフォルトの名無しさん2015/12/11(金) 20:44:23.92ID:PJrkNk76
>>699
型の“推論”が必要な場面では、自明なケースはむしろ少ないだろう。
0703デフォルトの名無しさん2015/12/11(金) 20:54:02.86ID:/Ctd9aP6
タイプ数が減るというメリットが有る
→「くだらない」
→「ちょっと吐いてくる」

さて、どう攻めてみようか...
0704デフォルトの名無しさん2015/12/11(金) 20:55:17.85ID:bfh5Rk2s
>>691
まじかよ、Pythonややこしいな。
0705デフォルトの名無しさん2015/12/11(金) 21:03:07.99ID:z9XcLK7w
>>701
はい。無関係です。

型推論を行う言語全てが
遅いわけじゃないですからね。
0706デフォルトの名無しさん2015/12/11(金) 21:04:33.44ID:z9XcLK7w
>>702
> 型の“推論”が必要な場面では、自明なケースはむしろ少ないだろう。

推論って自明って意味だぞ?

推論と推測や憶測をごちゃ混ぜにしてないか?
0707デフォルトの名無しさん2015/12/11(金) 21:32:42.99ID:/Ctd9aP6
式には型がある。だからそれを代入する変数の型は決まる。
ただそれだけのことだ。
0708デフォルトの名無しさん2015/12/11(金) 21:33:17.84ID:PJrkNk76
推論が自明とかどこの世界の話だよ
0709デフォルトの名無しさん2015/12/11(金) 21:40:58.64ID:/Ctd9aP6
推論というより導出というべき
0710デフォルトの名無しさん2015/12/11(金) 21:42:27.83ID:PJrkNk76
>>705
それはせいぜい型記述省略の機能しかない
いいかげんな言語処理系の場合を言っているだけで、
ちゃんと推論している言語処理系でコンパイル時間のうち
多くの割合を型推論にさいている現状は無視すべきでないし
型推論のデメリットのひとつと素直に捉えるべきだろう。
(「推論=自明」な人に言ってもわからんと思うけど)
0711デフォルトの名無しさん2015/12/11(金) 21:50:33.03ID:Dm16Ximr
辺野古移転反対。
本土住民は本気になれ。
0712デフォルトの名無しさん2015/12/11(金) 22:06:20.19ID:JUhcVU6D
>>682
JavaScript
0713デフォルトの名無しさん2015/12/11(金) 22:39:32.09ID:qdMeKh85
>>707
頭が悪そう。
0714デフォルトの名無しさん2015/12/11(金) 22:41:25.20ID:z9XcLK7w
>>709
ですよね。

でも推論って俺がつけたんじゃないのでしょうがない。

型推論は、曖昧な型決定はしてくれない
っていうか、コンピュータに曖昧なことされても困るw

>>710
お前何言ってるの? 推論して推論が間違っていたらどうするんだよw
コンピュータだから曖昧なことは許されないんだが。

型推論っていう名前に文句つけるなら、俺に言うな。
型推論がやってるのは、型の導出だから。
確実に型が静的に決まってる。でなければコンパイルエラーになる。
0715デフォルトの名無しさん2015/12/11(金) 22:43:37.45ID:oeHR7Cd9
>>708
「明らかに」の意味を取り違えてないか?
>>699 は時間を一切かけずにという意味じゃなくて時間がかかっても静的に型が確定するという意味合いで使ってるぞ
0716デフォルトの名無しさん2015/12/11(金) 22:43:41.08ID:z9XcLK7w
>>710
> ちゃんと推論している言語処理系でコンパイル時間のうち
> 多くの割合を型推論にさいている現状は無視すべきでないし

人間がコード読んで人力推論するよりかは遥かに短いだろw
0717デフォルトの名無しさん2015/12/11(金) 22:51:54.59ID:+61yG+7h
>>716
え?型推論ってそういうものだったっけ?
0718デフォルトの名無しさん2015/12/11(金) 22:52:49.03ID:qdMeKh85
>>716
頭の悪いPGは、型推論で型を省略されまくったコードを読むプログラマの負担を考えられない。
書くのは楽だが、読むのが大変。そういう言語は結局廃れた。昔来た道。
0719デフォルトの名無しさん2015/12/11(金) 22:57:03.77ID:z9XcLK7w
>>717
型を書かなくても、静的に型が決定されるので
IDEが備える型に関するサポート機能は有効に働く。
実行せずとも型を知ることができる。

動的言語では、同じように型を書かないが
静的にも決まらないので人間が推論する必要がある。

ここの変数に入れてるのはここだけだから〜、あっ違った。
こっちからも代入されてる。しかも引数の順番間違ってて型も違ってる
てな感じ
0720デフォルトの名無しさん2015/12/11(金) 22:59:44.13ID:z9XcLK7w
>>718
そのとおりだね。だから少なくともパブリックな関数の定義など、
広い範囲から参照されるようなインターフェース部分には型を書くべき。

もっともそんなところまで型を省略できる言語があるのかは知らんが。
0721デフォルトの名無しさん2015/12/11(金) 23:00:16.86ID:qdMeKh85
>>719
ソース読むのにVS等のIDEをインストールしなきゃならないならない欠陥言語。
いちいち変数にマウスを当てながら読まないといけないとか既に言語とは言えない。暗号文。
0722デフォルトの名無しさん2015/12/11(金) 23:03:45.02ID:z9XcLK7w
>>721
それは、動的言語の話だよね?
マウスをあてないと、その変数の型がわからないってのは

あ、マウスをあててもわからないのか?
動的言語は、もっと悪いねw
0723デフォルトの名無しさん2015/12/11(金) 23:10:08.65ID:+61yG+7h
>>719
よくわからんからあきらかに想定して話してるその言語の名前だしてくれんかね。
静的で型推論でIDEがやってくれる奴?
0724デフォルトの名無しさん2015/12/11(金) 23:11:07.67ID:qdMeKh85
C#以外あるのかと。
0725デフォルトの名無しさん2015/12/11(金) 23:15:51.16ID:ghCmNcLm
>>718
ああC#のライブラリなんかでもよくあるな
foreachで取ってきたお前の内容はなんなんだよと
まあソースあればVisualStudioさんが追跡できなかったことはないけど、DLLになってるとリファレンスと格闘になってしまって解せない
0726デフォルトの名無しさん2015/12/11(金) 23:17:29.41ID:JUhcVU6D
最近の言語はジェネリックやら関数型やらで逆に型があるほうが読みづらいケース多いから型推論が流行るのも必然
0727デフォルトの名無しさん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:qdMeKh85
つまり低スキル。
0730デフォルトの名無しさん2015/12/11(金) 23:59:47.29ID:ewR9TR1Q
>>727
OCamlも知らんのに静的型付けと型推論を語るな
お前が知ってるのはドカタ言語だけなんだから控えろ
0731デフォルトの名無しさん2015/12/12(土) 00:05:18.98ID:7phkh4Sb
>>713
式には型がある。わかる?
いい加減にしないとそのまま老害になるぞ。
0732デフォルトの名無しさん2015/12/12(土) 00:07:48.38ID:m7jaGLWu
>>731
頭弱そう。
0733デフォルトの名無しさん2015/12/12(土) 00:08:37.94ID:7phkh4Sb
遂に涙目になったか。
0734デフォルトの名無しさん2015/12/12(土) 00:13:32.13ID:kJaM603p
>>730
ドカタ言語の部分は、OCamlが現場では使われてないっていいたいの?w
0735デフォルトの名無しさん2015/12/12(土) 00:17:23.18ID:m7jaGLWu
誰も興味を持たない、全く普及してないマイナー言語の話題なんか止めてよ。
0736デフォルトの名無しさん2015/12/12(土) 00:19:52.00ID:7phkh4Sb
型推論使わず自分で型を書けなんて言われたら、いろんなところに
template <typename ...T> using result_t = 〜;
とか提供しまくることになるんだろうか?
ヤダヤダ。
0737デフォルトの名無しさん2015/12/12(土) 00:29:03.03ID:kJaM603p
>>736
ちなみに、C/C++では、その長ったらしい型に対して
プリプロセッサを使って、独自の名前を定義することで対応していた。

コードの見た目はすっきりする反面、実際にどんな型なのかわかりづらくなり、
またエラーメッセージはプリプロセッサを通した後になるので、
エラーの内容とコードの対比を考えるのが面倒だった。


型推論のおかげで、近くに型を書いておけば(全てを省略できるわけではないので
どちらにしろ近くに型を書くことになる)そこから推論で求められる部分に関しては
型を書かなくて良くなった。便利だね。
0738デフォルトの名無しさん2015/12/12(土) 00:35:16.10ID:Ghry7CET
静的言語を支援する者は静的言語しか使ったことのない人が多い。
一方、動的言語を支援する者は、かつて静的言語を使っていたが
きっかけがあって動的言語を使うようになり、良さを(短所も)知った人が多い。
0739デフォルトの名無しさん2015/12/12(土) 00:36:34.56ID:l6rXNus2
静的型付きはJava土方が、動的ならJSerが幅を利かせてくると
用語が本来の意味で使えなくなって議論続行不能に陥るパターンか
0740デフォルトの名無しさん2015/12/12(土) 00:36:47.43ID:Ghry7CET
だから、BBSで短いレスを応酬していても、話がかみ合わない。
0741デフォルトの名無しさん2015/12/12(土) 00:38:06.45ID:m7jaGLWu
動的言語はパズワード。
0742デフォルトの名無しさん2015/12/12(土) 00:44:56.90ID:Jg8Rh2fI
>>738
偏見すぎる。
だったら、typescriptとか動的→静的が注目あびることはないんだがな
0743デフォルトの名無しさん2015/12/12(土) 00:54:02.32ID:Ghry7CET
ちな、オレはHaskellやScalaは好きだがFLANZ LispやSchemeや(なんと)Perlも好きだ。
若い頃はCやFortranやアセンブラで数十万行書いて、
プログラミング言語というものはそういうものだと思っていた。
C++が出た1984頃は、Cの発展系ですばらしいと思って勉強した、
そしてClassベースオブジェクト指向をオレ流に拡張したら
もっとすばらしくなるだろうと妄想していた時期もあった。
当時の仕事がCADの開発だったからというのもあるが、ケツが蒼かったのである。
だが1990年代前半にJavaがはやり始めて方法論主義者がはびこり
偏屈なClassベースオブジェクト指向をごり押ししたり、
ソフトウェア工学的視点から見てまずいだろというようなコードが
入門書に氾濫するようになって、静的言語のClassベース
オブジェクト指向には弊害があることが分かってきた。
またC++が静的言語のベースの上に動的なものとClassベース
オブジェクト指向をマージしたような悪く言うとおぞましき発展を続けることには
光りトカゲがあると感じた。
一方、動的言語は若い頃使っていた言語と勝手が違って最初は苦手で
どちらかというときらいだった、身に付いた言語との違いが不快だった。
しかし長い期間仕事で使ってういるうちに、動的型づけの弊害はびっくりする
くらい少ないのに対し、習熟に従い驚くほど簡潔な記述で表せるメリット
に気がつき好みが逆転していった。それにはかなり長い期間がかかった。
0744デフォルトの名無しさん2015/12/12(土) 00:55:39.33ID:KEtUbtMS
静的脳のJava土方が考え付くようなコードは
どうせ動的な機能なんて使いこなせてないから
静的に解析できるだろ
0745デフォルトの名無しさん2015/12/12(土) 01:08:18.88ID:m7jaGLWu
動的言語なんてバズワード好むのは頭が弱い証拠。
0746デフォルトの名無しさん2015/12/12(土) 01:10:20.51ID:Ghry7CET
名の言語でもいいが動的言語をマスターし、それなりの複雑さと規模のソフトウエアを書いたことがある上で
動的言語を批判している者は、このスレには0だろう。
自分のお気に入りのJavaとちがうからとか、
どうでもいいような断片的コードの書き方、方法論
そんな口先の批判をしているだけだろう
0747デフォルトの名無しさん2015/12/12(土) 01:12:42.75ID:m7jaGLWu
>>746
おまえが証左。
0748デフォルトの名無しさん2015/12/12(土) 01:14:12.68ID:Ghry7CET
>>746
オレ動的言語批判してないぜw
それなのに、なんの査証かな?
0749デフォルトの名無しさん2015/12/12(土) 01:15:00.74ID:YXeNACNC
そもそも「動的言語」の定義が曖昧なので議論にならない。
0750デフォルトの名無しさん2015/12/12(土) 01:16:29.30ID:m7jaGLWu
WEB2.0レベル。実体がない。
0751デフォルトの名無しさん2015/12/12(土) 01:22:32.99ID:Ghry7CET
何をいってるんだか。
まだ若いんだろうからもっと勉強しなされ
0752デフォルトの名無しさん2015/12/12(土) 01:25:55.24ID:Ghry7CET
型付けだけではない、動的言語というと
Lisp系、Ruby, Python, Perl とかになっちまうな
俺が多かれ少なかれ使った言語の範囲では。
MLもか?これはまだ不勉強で良く知らないが。
0753デフォルトの名無しさん2015/12/12(土) 01:26:26.86ID:m7jaGLWu
静的言語なんてバズワード使って長文書いてる時点で頭が弱い。
おそらくコード全然書けない素人。
0754デフォルトの名無しさん2015/12/12(土) 01:27:46.37ID:Ghry7CET
参勤チョットはやってる静的型付の型推論を持った言語というと
Haskell, Scala, Racket, あとは…
DylanやSwiftもそうかな?
0755デフォルトの名無しさん2015/12/12(土) 01:29:18.41ID:Ghry7CET
>>753
そしらたら、なんて言うの?
逆に訊いちゃうけどさ
0756デフォルトの名無しさん2015/12/12(土) 01:31:29.29ID:m7jaGLWu
>>755
なんて言うって何をだい?
0757デフォルトの名無しさん2015/12/12(土) 01:31:34.30ID:YXeNACNC
動的言語というより「言語の動的機能・側面」というべきだろ。
具体的にどういう機能が該当するのか定義してからじゃないと議論にならない。

このスレだって、動的型付けかと思えばインタープリターの話になったり、
そうかと思えば今度はダックタイピングの話になったりw
0758デフォルトの名無しさん2015/12/12(土) 01:32:19.55ID:Ghry7CET
>>756
w
もうお休み。
0759デフォルトの名無しさん2015/12/12(土) 01:35:15.42ID:m7jaGLWu
>>758
定義を答えられない=バズワード
0760デフォルトの名無しさん2015/12/12(土) 01:36:52.01ID:Ghry7CET
動的型付けの言語でオレが一番参った害は
MPIの引数など、バイナリレベルで特定の型を
配列にパックし渡すフレームワークとのインターフェースかな
0761デフォルトの名無しさん2015/12/12(土) 01:39:27.12ID:JaiWahew
>>712
ほんとだ。できた。(あえてゲッター・セッターを定義してみた)
http://ideone.com/HQrZnJ
0762デフォルトの名無しさん2015/12/12(土) 01:41:22.49ID:m7jaGLWu
動的型付けは明確だ。型決定がコンパイル時か実行時か。しかし動的言語とはなんだろう。言語仕様が実行時に決まるのか?

質問すると「w もうお休み」と言われる。

よほど触れてはいけない質問をしたのだうろか。クラウドってなんですかって聞くと答えれない営業SEみたいだ。
0763デフォルトの名無しさん2015/12/12(土) 01:46:38.15ID:Ghry7CET
>>762
それ質問してないだろ。
なにが動的かはいろいろあるが
こんなところで訊いてレスの応酬する前に
一般名詞はぐぐった方がはえーよ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:m7jaGLWu
定義が存在しないものをどうやってマスターするんだかw 混乱してもう自分で何言ってるか分ってないんだな。
0767デフォルトの名無しさん2015/12/12(土) 01:53:06.76ID:Ghry7CET
どんな最低限度のバカでもWikiくらい読めよ
0768デフォルトの名無しさん2015/12/12(土) 01:55:39.82ID:o/oZvQme
動的言語みたいな具体的定義のない言葉使うのやめない?
二つの言語要素を比較して、こっちの要素の方がより動的な言語だね、くらいの意味でしか使えない言葉じゃないの
0769デフォルトの名無しさん2015/12/12(土) 01:57:03.78ID:Ghry7CET
>>768
かわりのいい言葉ある?
ああいう言語特徴
0770デフォルトの名無しさん2015/12/12(土) 01:57:12.50ID:m7jaGLWu
なるほど、動的言語の定義はwikiに書いてるのか。
バスワードを好んで使う奴は自分で使ってる単語の意味が分ってないのがよく分る表現だ。wikiをなんだと思ってるんだ。
0771デフォルトの名無しさん2015/12/12(土) 01:58:52.04ID:Ghry7CET
Wikiヶ何かまで質問するスレにいつからなったんだここは
子どもデンワ相談室にどーぞ
0772デフォルトの名無しさん2015/12/12(土) 01:59:22.12ID:WZUsKBr6
>>761
間違えた。こっちだ。orz
http://ideone.com/k8mYue
0773デフォルトの名無しさん2015/12/12(土) 02:02:31.89ID:m7jaGLWu
>>769
だから何の定義の代わりなんだ?w おまえのいう、ああいう言語の定義を聞いてるんだ。頭の弱いアホ文系と喋ってるみたいだ。
昔から、非論理的な奴ほど、弱い型付け、動的型付け言語を好むとよく言われる。

よくわからないけど、使えるみたいな。これからおまえみたいな馬鹿をバズ脳と呼ぼう。
0774デフォルトの名無しさん2015/12/12(土) 02:05:15.11ID:Ghry7CET
>>773
ぐぐりゃ上位に出てくる名詞の意味で
なにをそんなに騒いでいるの?
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:eJXRswYA
チャーチがこの世はコンビネーターで出来てるって言ってた。
0777デフォルトの名無しさん2015/12/12(土) 02:10:42.51ID:Ghry7CET
>>775
そこに十分科学的に正し意味が書いてあるだろ。
意味が間違っているというのか。
それすらよまないというのは
科学以前に何もかも馬鹿しているだろ
0778デフォルトの名無しさん2015/12/12(土) 02:11:51.25ID:m7jaGLWu
これがゆとりか。科学の意味すら知らない。もしかして大学出てない?
0779デフォルトの名無しさん2015/12/12(土) 02:13:03.84ID:Ghry7CET
Wikipediaにすら書いてあると指摘されて
どんどん論点をずらしていきます
0780デフォルトの名無しさん2015/12/12(土) 02:14:21.75ID:m7jaGLWu
まさかWikipediaのことをwikiと言ってたのか。まさにバズ脳。
0781デフォルトの名無しさん2015/12/12(土) 02:16:16.78ID:Ghry7CET
>>780
トップに出るものをそれと気が付かずにからんでいたのか
0782デフォルトの名無しさん2015/12/12(土) 02:16:39.85ID:Ghry7CET
これが粘着というやつか…
0783Obj-Cのひと2015/12/12(土) 02:43:54.61ID:ooN9fQ2a
テンプレートってなんだっけかーと、つらつら調べてって
Wikiのジェネリックプログラミングまで行って思い出したよ…
>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
>>707
それは型推論の1/8ぐらいでしかない。
0786デフォルトの名無しさん2015/12/12(土) 04:55:46.13ID:wA2CUnoz
>>705
>>>701
>はい。無関係です。

言っとくが、ナンチャッテ型推論はともかく、まともなmilner式の型推論はNP完全だぞ?
0787デフォルトの名無しさん2015/12/12(土) 05:33:00.84ID:kJaM603p
>>786
> まともなmilner式の型推論はNP完全だぞ?
だからだよw 現実の実装をわかってないね。

NP完全だから答えがわかるまで永遠に計算してるとでも思ってるの?

型推論っていうのはね。どんな場合でも推論します。
型は絶対に書く必要ありません。って機能じゃないの。

型を推論できる条件を満たしていれば「その型です」
その条件を満たしていない場合は「わかりません」でおしまい。
わからない場合はコンパイルエラーがでて型を明確に書く必要がある。

型推論っていうのはね。ある条件を満たしている場合は
型を書かなくてもOKですよっていう機能。

これが「型推論」という名前で呼ばれる機能であって
「型を推論すること」じゃないの。
0788デフォルトの名無しさん2015/12/12(土) 05:52:48.20ID:wA2CUnoz
>>787 は型推論を根本的に履き違えている。
型推論は、書かれた条件を矛盾なく満たす型付けが存在する、という証明であって、
「型を書かなくてもOK」ではない。
0789デフォルトの名無しさん2015/12/12(土) 05:53:47.22ID:wA2CUnoz
>>787
>NP完全だから答えがわかるまで永遠に計算してるとでも思ってるの?

あんたがいう型推論ってのは途中で型付けを放棄するのか?w
0790デフォルトの名無しさん2015/12/12(土) 05:55:44.71ID:kJaM603p
型推論は明らかに、特定の言語に備わった機能の名前なんだが?
その機能があることでプログラマに(既出につき省略)という
メリットが有るものなんだが。

証明? 証明してどうするの?

ほんと、意味不明w
0791デフォルトの名無しさん2015/12/12(土) 06:01:17.67ID:kJaM603p
>>789
> あんたがいう型推論ってのは

俺が言う型推論ってなんだ?
なんで、俺が定義しないといかんのだ?

今話している型推論っていうのは、特定のプログラム言語が持っている
機能であって、型推論の細かい定義はその言語が決めてることなんだが。

俺が知るかぎり、どの言語も、型が推論で決定できない場合は
コンピュータは推論は放棄する(だから遅くなることはない)
そして"プログラマが"明確に型付けを書くという方式をとってる。

全部の型が消えるわけじゃないが、推論で決定できる場合は
書かなくて済むというメリットがある。
0792デフォルトの名無しさん2015/12/12(土) 06:07:30.79ID:kJaM603p
型推論で遅くなるっていうから、何でかと思えば、
型の推論が事実上出来ない場合(NP完全)は型が判明するまで
型は何かという問題をずっと解いているからとか言い出した。
本当に頭悪過ぎだろう
0793デフォルトの名無しさん2015/12/12(土) 06:17:47.17ID:wA2CUnoz
>>792
そうか、君は型エラーを出したことがないんだー
すごいでちゅねーwww
0794デフォルトの名無しさん2015/12/12(土) 06:18:41.52ID:wA2CUnoz
>>790
え?型推論が証明であることも知らないで型推論騙ってたの?
すげえ笑える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:WZUsKBr6
いやホント、底辺だと思っていたuyより分かってないやつがウヨウヨいて正直、吐き気がした
0800デフォルトの名無しさん2015/12/12(土) 09:52:13.39ID:RrFopTx4
>>737
> プリプロセッサを使って、独自の名前を定義することで対応していた。

typedef も使えないドカタ乙
0801デフォルトの名無しさん2015/12/12(土) 09:55:44.87ID:MQtMVFjq
プリプロセッサってtypedefのことやで?
0802デフォルトの名無しさん2015/12/12(土) 10:05:41.90ID:RrFopTx4
>>801
お前は一度プリプロセッサの出力を見てみた方がいい
0803デフォルトの名無しさん2015/12/12(土) 10:34:02.89ID:wA2CUnoz
>>796
これでも読めバカ
http://d.hatena.ne.jp/m-hiyama/20120207/1328601663
0804デフォルトの名無しさん2015/12/12(土) 10:40:09.38ID:wA2CUnoz
もう1つくれてやるw
http://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
>>805
別に語ってもいいと思うけどなあ。
語らないから賢いというものでもないし。
0807デフォルトの名無しさん2015/12/12(土) 11:56:52.07ID:V0PFtzIh
お前の型推論しょぼいな
0808デフォルトの名無しさん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:YXeNACNC
実行時に実装が無きゃ意味ないからね。
0811デフォルトの名無しさん2015/12/12(土) 16:26:16.27ID:qMqBVjSJ
>>803
>お互いに自分の知識で解釈しようとしたら、とんでもないカオスになるでしょう。

確かに完璧な答えが書いてあった
証明みたいにいくつも解釈のしようがある言葉を説明不足で言うから揉めるんだね
0812デフォルトの名無しさん2015/12/12(土) 16:41:40.67ID:MQtMVFjq
そうそう。この馬鹿は、言語の型推論の話をしているのに、
論理の推論の話をしてる。

> そんな事情でして、「型推論」の「推論」がそもそも論理で言う「推論」とは違ったりしています。


プログラム言語に「型推論」って機能があることを知らないのだ。
アホかと。
0813デフォルトの名無しさん2015/12/12(土) 16:44:09.23ID:wC4tKrPt
>>808
> 静的だとお前何宣言してないプロパティ勝手に使っとんねんと切れるが、動的だと何も言わない

動的だと、実行時に言うだけだよ。

だからコードの中で、obj.hoge() なんてコードを書いていると、
どっちみち、このコードはhoge()がある型でしか動かない。

動かないコードを実行前にエラーで教えてくれるか
実行時にエラーになるかの違い。

当然前者のほうが良い。
0814デフォルトの名無しさん2015/12/12(土) 16:50:16.80ID:AwwUCViP
静的に解析できるものは、なるべく多く静的にチェックするほうが良いし
その意味では静的型言語の方がより多くのチェックを静的にするから
コンパイラが高性能といえる
0815デフォルトの名無しさん2015/12/12(土) 16:55:59.43ID:wC4tKrPt
>>805
> 型推論ってそんな珍しいものではなく
> ある意味Cの時代からあったよ

それは、型を推論しているってだけで、
型推論という機能じゃないでしょ。

プログラミング用語として型推論っていう言葉があるんだよ。

>>811
>お互いに自分の知識で解釈しようとしたら、とんでもないカオスになるでしょう。
それは>>787の時点で指摘されてる。

今は型推論って用語の話をしているのに、一人(?)型の推論の話をしてる奴がいる。
0816デフォルトの名無しさん2015/12/12(土) 18:16:07.17ID:SO30aUaP
どの言語も良いとこ取りになりつつあるこの時代に、静的、動的でもめてるとは。。
0817デフォルトの名無しさん2015/12/12(土) 18:36:40.07ID:RrFopTx4
>>815
「ある意味」って言葉も理解できないのか…
0818デフォルトの名無しさん2015/12/12(土) 18:50:27.05ID:kXr2f1RY
京都大学霊長類研究所はどこまでム板を弄べば気が済むんだ
0819デフォルトの名無しさん2015/12/12(土) 19:11:36.46ID:wC4tKrPt
>>817
曖昧な言葉を使わないように。

「例外ってそんなに珍しいものではなく
ある意味Cの時代からあったよ」

なんて言えば、Cに例外はないって
言われるのと同じこと。
0820デフォルトの名無しさん2015/12/12(土) 20:04:48.62ID:RrFopTx4
>>819
> なんて言えば、Cに例外はないって
> 言われるのと同じこと。

こう言うのも知らんのだろうな
http://www.nurs.or.jp/~sug/soft/super/longjmp.htm
0821デフォルトの名無しさん2015/12/12(土) 20:23:31.96ID:wC4tKrPt
>>820
知ってて>>819を書いた。見事に引っかかったね。
レスする言葉は決まってる。それは例外じゃない
0822デフォルトの名無しさん2015/12/12(土) 20:30:59.07ID:wC4tKrPt
アセンブラを知っていれば、全ての機能が
アセンブリ言語だけでできるのを知ってるんだよ。

プログラミング言語の○○という機能、構文はそれを簡潔に記述するように作って
その構文に対して名前をつけた物なんだから、その同等の機能をもっと
低レベルのレイヤーの物(例アセンブリ言語)で同じことが出来たからって
同じ名前をもらえるわけじゃないんだよ。

一番重要な「簡潔に記述できるようにした構文」が無いんだから。
0823デフォルトの名無しさん2015/12/12(土) 21:10:19.62ID:KEtUbtMS
>>821-822
でもこれは知らんかっただろ?

https://github.com/guillermocalvo/exceptions4c
0824デフォルトの名無しさん2015/12/12(土) 21:11:47.94ID:wC4tKrPt
star 22 の時点で、知られてないものだなw

オレオレライブラリと変わらん。
0825デフォルトの名無しさん2015/12/12(土) 21:38:26.76ID:KEtUbtMS
涙拭けよ
0826デフォルトの名無しさん2015/12/12(土) 21:42:10.81ID:wC4tKrPt
笑い涙ですねwwww
0827デフォルトの名無しさん2015/12/12(土) 22:10:03.25ID:RrFopTx4
>>821
> それは例外じゃない

うん、君はそう言ってりゃいいんじゃん w
俺は君の教育係じゃないから君がどう思おうと関係ないし
普通の人は、>>820 のリンク先見れば、
「ネストされた関数の中から一気に抜けることができる」
と言う機能について例外と類似であると理解できるからね
0828uy ◆Qawu9.2l1E 2015/12/12(土) 22:32:37.03ID:kXe6VXWP
これがさとりか・・・
0829デフォルトの名無しさん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+R
オブジェクト指向は愚かなのだろうか。
0833デフォルトの名無しさん2015/12/12(土) 23:16:15.84ID:wC4tKrPt
>>830
> てかアセンブリで実装できないことを高等言語なら実装できるなんてことあるはずがない

アセンブリ言語で ”簡単に" 実装できないことを、
高級言語なら "簡単に" 実装できることはあり得る。
(というかそのためにに作ったのが高級言語。)

一番重要な、"簡単に" を省略するでない。
意味が全く違ってしまう。
0834デフォルトの名無しさん2015/12/12(土) 23:28:31.31ID:zJC8Kbfq
いまなんの話題なのこれ
ゴール設定されてない不毛な議論なのは読み取れたけど
0835デフォルトの名無しさん2015/12/13(日) 00:07:49.51ID:NzQ2L3Wh
>>834
「型推論はCでも使えるよ!」かな?
もう、なんの話だかさっぱりわからんけどw
0836デフォルトの名無しさん2015/12/13(日) 00:16:09.63ID:COkyVaqn
>>835
www
0837デフォルトの名無しさん2015/12/13(日) 01:23:07.21ID:JyylBzJi
「負けた感を払拭したい」
0838デフォルトの名無しさん2015/12/13(日) 02:24:08.73ID:q1Jv4QVg
で、結局何から勉強すればいいの?
Java?
0839デフォルトの名無しさん2015/12/13(日) 02:57:15.08ID:liGcPy84
メジャー言語を歴史順。x86アセンブラ、C、C++、C#をやってから、そしてあとはマイナー言語を好みで。
最初にJavaだけは止めたほうがいい。馬鹿になるから。
0840デフォルトの名無しさん2015/12/13(日) 03:54:41.89ID:NzQ2L3Wh
>>838
コンピュータのしくみとメモリへの実際の格納に留意しながら
Cで古典的な関数と呼ばれる単位と構造化、制御の基本を勉強。
さあて、その次の段階がクラスとオブジェクト指向なんだが…
俺の立ち位置だとObjective-CでiOSアプリ作ってみるといいよになっちゃうんだよなぁw
(環境はMacになってしまう)

次善でJavaでAndroidアプリ(こちらは環境問わない)
Web系の言語で勉強にいいのがあるとは思うんだがそっちは詳しくないので
あまり具体例が出せない。(言語的に面白いRubyか手軽なjavascriptか?)

どんな言語でもそうだけどその言語が"なぜそうなってるか"を捉えること。
なんらかの問題を解決するためにそれらはCと同世代の単純なシステムから分岐してきたので
そこを捉えないと言語の特性が活かせない。

そのあとは自由に。いわゆる各社のモダンな言語に行ってもいいしC++に遡ってもいい。
ただ、現代のオブジェクト指向全体での立ち位置としてC++は非常に微妙な(変わった)
位置にいるので、CからC++へ直接だけは絶対にやめること。道を見失う。
0841デフォルトの名無しさん2015/12/13(日) 03:56:34.68ID:liGcPy84
マカーは馬鹿。Javaやると馬鹿になる。↑が証左。
0842デフォルトの名無しさん2015/12/13(日) 04:05:13.51ID:jqUVRuk3
殆どの言語はLISPの劣化パクリなのでLISPを勉強すれば諦めがつくというものだ
オブジェクトシステムならCLOSを勉強すればいいし
関数型を勉強したいならS式を追いかければいい
S式を追いかければXMLやJSONなども違和感なく理解できる

それからOSコールとかスレッディングとかGUIフレームワークなんかをかじればいい
再帰に適さない言語、値と参照の区別が明確でない言語から入ると
どうしても複雑なシステムは組めなくなってしまう

そうなってしまっては手遅れだ
プログラムの勉強と、「ライブラリ」の勉強は別ものだし
ライブラリの正しい適用方法を知るためにはまずプログラムの勉強をする必要がある
0843デフォルトの名無しさん2015/12/13(日) 06:26:36.52ID:WlyYs++B
このスレは仕事がない暇人の集まり。
0844デフォルトの名無しさん2015/12/13(日) 06:41:11.51ID:0R70anXZ
>>812
だーかーらー、
ちゃんとしたプログラミング言語のちゃんとしたMilner型の型推論は
単一化による証明そのものだって教えてやってるのに
お前がバカすぎて理解できないだけだってことを自覚しろバカ。
0845デフォルトの名無しさん2015/12/13(日) 06:44:28.22ID:/K7CibiU
>>830
> 例外と型推論ははっきり言って違うんじゃねえの

いったいどこからそんな話が…
0846デフォルトの名無しさん2015/12/13(日) 08:07:38.32ID:NoovkWNN
>>844
お前が好きなもの=ちゃんとした物っていう
クソくだらない単純な考えは捨てなさい。

世の中には色んな物があり、型推論もいろんな言語にあって
違いはあっても、それらは全部ちゃんとしたもんなんだよ。

で、Milnerというのは型推論のアルゴリズムの話であり、
今ここで話している、いろんな言語にある型推論機能とは全く違う話。

お前の理屈では「ちゃんとした型推論のアルゴリズムは遅いから、
すべての言語の型推論機能は遅いんだ」という結論に持って行きたいんだろうが、
いろんな言語に備わってる型推論と呼ばれる機能は、実用的な型推論アルゴリズムを
使ってるから遅くならないんだよ。
0847デフォルトの名無しさん2015/12/13(日) 08:17:56.77ID:tW1uBOyN
オブジェクト指向wCOBOLと同じ [無断転載禁止]?2ch.net
http://tamae.2ch.net/test/read.cgi/prog/1449882422/
0848スッキリ厨2015/12/13(日) 08:26:15.57ID:Be8+1Kca
>>838
オブジェクト指向を学ぶ、究極の一冊!
これに勝る本は、いまだ発見できていないw

スッキリわかる Java入門 第2版、2014
0849デフォルトの名無しさん2015/12/13(日) 08:54:31.01ID:ChqQhcbA
>>846
実用的な型推論アルゴリズムを使った型推論を持つ言語をいくつか教えてください
0850デフォルトの名無しさん2015/12/13(日) 08:58:45.36ID:0R70anXZ
>>846
現状、実用化されているアルゴリズムで学術的な意味で型推論と呼んでいいのはMilner式の型推論ぐらいなものだから「ちゃんとした」と言っている。
君の知識は浅すぎて話にならない。
0851デフォルトの名無しさん2015/12/13(日) 09:31:20.95ID:vTsQIIrw
>>834
C++は一時期Java推しやRuby推しの人々から散々disられた。今はその復讐がゴールですw
0852デフォルトの名無しさん2015/12/13(日) 09:33:22.49ID:NoovkWNN
>>849
「型推論」で検索するといいよw

この間出した、F言語にもあったかな。
0853デフォルトの名無しさん2015/12/13(日) 09:34:09.63ID:NoovkWNN
>>850
>学術的な意味で型推論と呼んでいいのは
知るかよw

俺が言ってるんじゃない。各言語が「型推論」という
機能を備えているんだよ。
0854デフォルトの名無しさん2015/12/13(日) 09:36:29.88ID:NoovkWNN
なんだw あっさり見つかったから書いておくか
https://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:pESYzzDm
型推論があるから動的型付言語並に簡潔に書けるという時には
c#やJavaのような「劣った」型推論は含まれないことは注意が必要だね
だって省略できるのは極一部で動的型付言語とは似ても似つかぬ冗長さだからね
0857デフォルトの名無しさん2015/12/13(日) 12:06:32.47ID:G+bJpCOE
劣ったというか、C#とかの場合はIDEの補助のために速度重視だからね
リアルタイムで解析できないレベルの複雑な推論はあえてしない方針だったはず

コンパイル時の推論だけの言語とは目的が違うから、しょうがないね
0858デフォルトの名無しさん2015/12/13(日) 12:57:30.72ID:JyylBzJi
そこまで一般的でない概念を無理矢理使うくらいならちゃんと型宣言した方が読み易そうだな。
てか個人的な希望としてはオブジェクト指向の話ならDDDとか設計ベースの話のが為になりそうなんだけど。。
0859デフォルトの名無しさん2015/12/13(日) 13:14:27.14ID:J2FjjwDn
>>203
> ファジーであることを強いられる
いい表現だわな。全くもってそうだよな
コード上に明確な表現として現れない暗黙知をあちこちにばら撒くのが非関数型のOOPL
それで抽象化できていると主張しちゃうもんだからタチ悪い
人間がオブジェクト様の機嫌を伺いながらコーディングしなくちゃならない
0860デフォルトの名無しさん2015/12/13(日) 13:23:11.58ID:0R70anXZ
>>854
事実として、Milner式の型推論とC#あたりのアドホックな型推論では
技術要素として全くの別物なのだが。

いいかげん自分のバカさに気付けバカ
0861デフォルトの名無しさん2015/12/13(日) 13:26:19.26ID:JyylBzJi
>>859
>コード上に明確な表現として現れない暗黙知をあちこちにばら撒くのが非関数型のOOPL
普通は内部メンバに対する型を気にしないで操作できるようにしたり、
テストでそのメソッドの動作を明示したりしないとまともに使えるものにはならない。
少なくとも上の連中みたいに暗黙知を押し付けるような連中が使うととんでもない結果になるだろう。

多分、ソースコードだけではオブジェクト指向は上手く行かないだろうな。
テストコードがある程度ないと糞みたいな抽象化で溢れかえったコードになる。
0862デフォルトの名無しさん2015/12/13(日) 14:29:42.26ID:Jgh5Vnm+
C#はラムダの引数の型の型推論で
左辺値の型から右辺値の型を推論するような変則的なこともやっているよ
0863デフォルトの名無しさん2015/12/13(日) 15:18:40.13ID:0QU1fglE
結局、>>694みたいな土方が使う言語のナンチャッテ型推論機能は
コストがほとんど無視できるから、「型推論にデメリットなし」だと主張しただけのことか
0864デフォルトの名無しさん2015/12/13(日) 15:55:40.98ID:G+bJpCOE
>>860
そいつは最初から後ろの意味で型推論という言葉をつかってるってはっきりいってると思うが
C#とかではそれを型推論と言ってるわけで、まちがいではない

実際、C#とかでは証明よりも単に型の省略のほうが近いし
0865デフォルトの名無しさん2015/12/13(日) 15:57:07.81ID:G+bJpCOE
あとは、高度な型推論は入力補完と相性悪そう
int x;
x.
まで打った時点でメンバが表示されることを期待したい
そうするとその後で入力する代入やらを元に型を決めるだと遅すぎる
0866デフォルトの名無しさん2015/12/13(日) 15:58:21.25ID:pESYzzDm
まあHaskellやOCamlでも快適に補完できるけどね
補完が遅くてイライラする言語ってなんだろう?
0867デフォルトの名無しさん2015/12/13(日) 16:02:58.47ID:pESYzzDm
>>865
それ未初期化変数のメソッド呼ぼうとしてるよ
0868デフォルトの名無しさん2015/12/13(日) 16:08:25.42ID:J2FjjwDn
HMで式のサイズに対して処理時間が指数オーダになるようなケースなんて限られてると思うんだけど
(高ランク型がネストしまくるパターンとか?)
リアルワールドHaskeller的には普段から悩まされたりすんのか?
0869デフォルトの名無しさん2015/12/13(日) 16:13:37.07ID:NoovkWNN
>>863
自分が気にいらないからって「なんちゃって」にするな。
お前が求める型推論は遅すぎて実用にならないんだろ?

そっちの方が意味無いじゃんw
0870デフォルトの名無しさん2015/12/13(日) 16:16:15.80ID:G+bJpCOE
>>867
例が適当だった
int x = 0;
x.
に訂正で。これでxが型宣言なくて高度な型推論があるとintに決定できない
0871デフォルトの名無しさん2015/12/13(日) 16:22:33.16ID:J2FjjwDn
初期化式(= 0)から判定できるでは?
数値リテラルの型がポリモーフィックとかじゃなけりゃ
0872デフォルトの名無しさん2015/12/13(日) 16:26:01.42ID:pESYzzDm
>>870
その場合は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:0R70anXZ
ナンチャッテ型推論と呼ばれるのがいやなら、貧者の型推論とでも読んでやろう。
0875デフォルトの名無しさん2015/12/13(日) 17:35:14.94ID:q1Jv4QVg
>>848
ありがとうございます
本屋で探してみます!
0876デフォルトの名無しさん2015/12/13(日) 18:02:25.39ID:M1GzVrJh
>>869
自分が気に入っているからって「なんちゃて」程度で十分だと思うな。
お前が求める型推論はバカすぎて実用にならないんだが?

そんな知識、意味無いじゃんw
0877デフォルトの名無しさん2015/12/13(日) 18:12:18.28ID:ydAgND1J
コンピューターですら一瞬で判断出来ないような型推論だと、それを人間が扱えばデスマーチ確実でしょ
0878デフォルトの名無しさん2015/12/13(日) 18:21:59.14ID:vZCVcD/l
>>877
残業代稼げるからいいじゃん。
0879デフォルトの名無しさん2015/12/13(日) 18:24:22.77ID:NoovkWNN
>>876
> お前が求める型推論はバカすぎて実用にならないんだが?

お前のの言う実用って、何ができること?
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:84gYSv9y
バカが「推論=自明」に固執する以上、この議論は時間の無駄だろうな…
0883デフォルトの名無しさん2015/12/13(日) 19:12:28.27ID:4R4l3KWI
まさかダートマスBASICの開発者たちも自分たちが悩んだ
"初学者にFORTRAN教えると型を宣言ってとこで
もう一段深いこと教えなきゃいけないから進まねぇ
よーし、パパ!宣言不要で単精度と文字列変数だけでいいようにしちゃうぞ〜!"
の尻尾がこんなとこでビクンビクンしてるとは思ってもいるまい。
タイプ減るから!(キリッ)じゃねぇよ。
0884デフォルトの名無しさん2015/12/13(日) 19:13:06.23ID:lFeNetkB
言語が持ってる型システムによって型推論の有り難みも速度も大きく変わるわ。
ジェネリクスがあるか、HKTがあるか、GADTがあるか、とかで随分変わる。
あと言語がどこで、どこまで型注釈を省略してもいいかにもよるわ。

Haskellみたいにほぼ型注釈不要なものもあれば、関数のシグネチャは省略不可能にしておくことで型推論のコスト抑えたりする言語もある。
Cは型推論とか別に要らないくらい型システムはシンプル。だけど関数ポインタは脳を壊すわ...
0885デフォルトの名無しさん2015/12/13(日) 19:14:16.37ID:NoovkWNN
>>881
> いいから型を明示的に書けやカスと

別に(実用的な)型推論がある言語でも、全てを省略できるわけではないので。
(できたとしたらそれは動的型だ)

(実用的な)型推論って機能は、プライベート変数等の省略できる所と
パブリックな省略できない所があるわけで、わかりにくくならないかぎり、
省略できる型記述は省略していいと思うよ。

型推論なんて何度も同じ型を書くのが面倒だから省略できますってだけの機能で、
型は今までどおり静的に決まってるんだからさ。
0886デフォルトの名無しさん2015/12/13(日) 19:37:57.89ID:pESYzzDm
>>873
Haskellの型クラスとか勉強するといいよ
解決してるから
0887デフォルトの名無しさん2015/12/13(日) 20:30:55.33ID:JyylBzJi
>(実用的な)型推論って機能は、プライベート変数等の省略できる所と
>パブリックな省略できない所があるわけで、わかりにくくならないかぎり、
>省略できる型記述は省略していいと思うよ。
いやだからこんな単純な結論しかないわかりきった結論に対して
馬鹿がドヤァしたいだけで糞議論をいつまで続けるのかと。
0888デフォルトの名無しさん2015/12/13(日) 20:59:06.96ID:NoovkWNN
>>887
俺に言われても困る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
>>885
> できたとしたらそれは動的型だ

推論と自明の区別だけじゃなく
静的型付けと動的型付けの区別すらできてないのか…
0891デフォルトの名無しさん2015/12/13(日) 21:59:56.53ID:ChqQhcbA
>>889
Intention Revealing Namesパターンを知らない人なんだろうな。

http://objectmentor.com/resources/articles/Naming.pdf
0892デフォルトの名無しさん2015/12/13(日) 23:00:45.58ID:NoovkWNN
>>890
型を全て省略できる、静的型付け言語を教えてw

まあ無理だろう。おまえのそのレスからして、
俺の言っていることを一切論理的に否定できてないんだからね。
0893デフォルトの名無しさん2015/12/13(日) 23:08:18.94ID:NoovkWNN
>>890
> 推論と自明の区別だけじゃなく

型を推論して、
型が自明な時に限り
省略できる機能が
型推論だよ。

推論と自明の区別をつけるのはあんただね。
0894デフォルトの名無しさん2015/12/13(日) 23:28:46.16ID:lFeNetkB
型注釈を省略できる言語、OCamlとかHaskellじゃ駄目なのかな。
0895デフォルトの名無しさん2015/12/13(日) 23:59:40.20ID:liGcPy84
不毛なマイナー言語の話は止めようぜ。いくら力説されてもマイナー言語は使われることはない。
なぜなら使われない理由がマイナーであることが理由だからだ。

c++、c#、javaをもっていかにオブジェクト指向が愚かであるか力説してもらわないと。
0896デフォルトの名無しさん2015/12/14(月) 00:09:25.79ID:YXBLFy0A
マイナーなのも理由のひとつだけど、
HaskellやOCamlは低脳なドカタ連中には難しすぎる
0897デフォルトの名無しさん2015/12/14(月) 00:51:49.29ID:pIJ3pt3j
Haskellいうほどマイナーかな。メジャーとは言わんけど割と仕事振られてるよ
敬遠してる人が多いからかな
0898デフォルトの名無しさん2015/12/14(月) 00:57:49.10ID:4u8Hbpq9
>>896
馬鹿が難しくしてるだけだよ。
きれいに書けばかなり簡易な言語ではある。
0899デフォルトの名無しさん2015/12/14(月) 04:32:33.27ID:PCT38V0V
>>895
まだいまのところiPhone/iPadのアプリの9割以上がObjective-Cで作られていて
動的型付けのオブジェクト指向言語で作られたアプリが
毎日の通勤電車のそこら中でまったく不具合なく動作してるのが見られるはずですが、それは。
0900デフォルトの名無しさん2015/12/14(月) 04:43:58.40ID:sXTPVO5Q
過去のc++ vs objective-cの戦いはご存知だろうか。どちらがcの後継として選ばれるかとても重要な戦いだった。
しかし、c++の圧勝。objective-cは最初から誰にも相手にされなかった。理由は明白だった。仕様がお粗末だったからだ。
そして一度は完全に忘れられ消えた。

それから20年後・・・ 続きはWEBで
0901デフォルトの名無しさん2015/12/14(月) 04:49:49.38ID:YC/mnP+V
それから20年後・・・

iPhoneアプリの開発はObjective Cのみ
とすることで、ようやく日の目を見た。

言語の魅力だけでは普及させることは出来なかったのだ。
0902uy ◆Qawu9.2l1E 2015/12/14(月) 05:51:30.34ID:5XsAAUmf
構文が普通言語のとズレてる言語の話はもう良いよ
今どきどの言語でも殆ど同じことが出来るようになってきて、あとは単なる構文の違いでしかないのに
好む人間が少数しかいない構文の言語は、これからどう頑張っても主流にならないことが確約されてる
0903デフォルトの名無しさん2015/12/14(月) 07:40:07.88ID:4tQby545
LispとかSmalltalkとかAPLとかのちょっと変わった文法は
nyの小さな脳を完全にオーバーフローさせるからな
そこから何かを学ぶなんて発想は、まあ出てこないわな
0904名無しさん@そうだ選挙に行こう2015/12/14(月) 08:09:45.50ID:Tz3Y65AU
Objective-Cはゴミ

iOS、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
>>905
俺はこう言う掲示板では

いい意味: 適切
悪い意味: テキトー

って使い分けてる
0907名無しさん@そうだ選挙に行こう2015/12/14(月) 13:36:33.02ID:mDXrbvSN
素直に誤読の余地がない「不適切」って書いた方がよくない?w
0908名無しさん@そうだ選挙に行こう2015/12/14(月) 14:19:53.29ID:PCT38V0V
>>900
>理由は明白だった。
特徴である柔軟な動作を可能とする動的ディスパッチを行うためのランタイムの必要が
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
マカーは馬鹿。ジョブスはパクリ屋詐欺師。なぜIT業界でこう言われ続けるのか。
>>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:ETDpPCfc
てことはRubyは消えゆく運命ってことか
0912名無しさん@そうだ選挙に行こう2015/12/14(月) 16:38:00.70ID:/LlXQ+YT
関数をいくつも作って組み合わせる方式がいいでしょ。
オブジェクト指向なんて、わざわざプログラマに負担掛けてるようなもの。作るのも面倒。
0913名無しさん@そうだ選挙に行こう2015/12/14(月) 18:20:47.69ID:gZRCdf8G
素直に状態を保持・管理した方が楽なものだってある、と思う。
0914名無しさん@そうだ選挙に行こう2015/12/14(月) 19:50:17.99ID:RaZIosx/
本来、順序回路的なものまでを
組合せ回路的な状態の保持・管理に
なるべく持ち込まないようにするのが
大規模なソフトウエアの開発における
複雑さの爆発を抑制する上で重要だというのが
ソフトウェア工学の基本だろ
それに反してんだよ
オブジェクト指向脳に毒された初心者は
0915デフォルトの名無しさん2015/12/14(月) 20:12:10.63ID:RaZIosx/
>>911
Rubyは色々難点あるとおもう
Scalaは面白い言語だと思うが普及はいまいちで、複雑
0916デフォルトの名無しさん2015/12/14(月) 20:18:02.70ID:7rbDUyQj
>>915
Scalaはhello worldのコンパイルに30分かかるからなw
0917デフォルトの名無しさん2015/12/14(月) 20:31:53.04ID:ETDpPCfc
Rubyは オブジェクト指向に肩入れ & 動的型に肩入れ
という二重のミスをしているからな
世の中を変な角度から見つめなおす言語
宗教なのも頷ける
0918デフォルトの名無しさん2015/12/14(月) 20:33:46.59ID:YC/mnP+V
>>914
それはオブジェクト指向と何の関係もない。

ソフトウェアの全てが順路回路でできるわけじゃない。
出来ない部分をオブジェクト指向で作るとすっきりする。
できる部分は関数型を使えばいい。

オブジェクト指向(構造部分)+関数型(処理部分)で作るのが
一番バランスが取れている。
0919デフォルトの名無しさん2015/12/14(月) 20:46:42.40ID:nSHfXMyU
>>907
不適切は選んだ結果がよくないこと
テキトーは選ぶ過程においてよく考えずに選んでること
微妙にニュアンスが違う
0920uy ◆Qawu9.2l1E 2015/12/14(月) 20:48:42.47ID:WIf5dtaV
いやRubyの最も大きなミスは特異クラスとかあの辺のスコープだよ
初見で分かる奴はいない

そもそもシングルトンパターンごときのクラスを実現する為に
特異クラスなんて歪な形にする必要なかったでしょ
0921uy ◆Qawu9.2l1E 2015/12/14(月) 20:56:20.08ID:J5PYIleC
デザパタで上がってるような設計思想が
今後いつまでも使われ続けるわけはないのだから
それを言語構文レベルで入れたのが間違い
ただライブラリで提供しとけばいいんです

逆にいえばデザパタによって設計概念がまとまっている機能は
長寿言語にしたいなら言語レベルで実装しなくて良いものだった
今後そのパターンが使われなくなってきた時にただ使用頻度の低い言語機能が残るだけ
rubyの特異クラスはその代表例
0922デフォルトの名無しさん2015/12/14(月) 21:08:28.25ID:p56tRJdh
>>920
あ、あれ、シングルトンクラスっていうけど
シングルトンパターン向けってわけじゃないから。
0923デフォルトの名無しさん2015/12/14(月) 21:15:48.08ID:barGDPfi
>>918
それは一理あるが、実際には、getter, setterを乱用し
無用な状態変数的なものを格納する入れ物のように
オブジェクトインスタンスを用い、状態管理をロジカルに行おうとし
継承、参照で依存を伝播させ、
混乱したコードが書籍にまで多量にみられるではないか。
0924uy ◆Qawu9.2l1E 2015/12/14(月) 21:20:44.43ID:o+2bPWZu
>>922
何向け?
0925デフォルトの名無しさん2015/12/14(月) 21:35:52.87ID:YC/mnP+V
>>923
getter, setterの話は論破してる。過去レス嫁。

どうせ読まないだろうから軽く言っておくと、
getter, setterは、変数のように見える関数なのであって、
このように使う。

Test t = new Test();
t.memberVar = 20;

このmemberVarが、getter, setterだ。
0926デフォルトの名無しさん2015/12/14(月) 21:38:13.02ID:YC/mnP+V
>>923
> 混乱したコードが書籍にまで多量にみられるではないか。

現実世界が状態を持っているものなのだから
それを素直に表すとそうなるのは当たり前。

キャラクターごとにHPや動きがあるような
現実世界に近いRPGゲームなんかを作ろうとすると
オブジェクト指向以外で作ると、変換に余計な負担がかかる。
0927デフォルトの名無しさん2015/12/14(月) 21:38:55.63ID:barGDPfi
>>925
ほんなこたーしっちょるわい。
getter, setterが何かじゃなくて
それを使って無駄な状態管理じみたコード書いてるって話
0928デフォルトの名無しさん2015/12/14(月) 21:41:08.55ID:YC/mnP+V
>>927
> それを使って無駄な状態管理じみたコード書いてるって話

お前が言ってるのは、状態がないものを、
状態がないコードで書けと言ってるだけ。

状態がないコードだけを触った経験だけで
状態は要らないと言ってるだけ。

本質的に状態というものはこの世界に存在し、
それを無理やり変換して実装するのは無駄なコスト。
0929デフォルトの名無しさん2015/12/14(月) 21:42:16.51ID:barGDPfi
>>926
真に状態があるものは当然問題ない。

そうじゃないとこにオブジェクト指向を適用しようとして、
変な状態管理持ち込むから
0930アイ2015/12/14(月) 21:45:20.47ID:6cQ1LEo2
それ単純に下手糞なだけじゃんw
0931デフォルトの名無しさん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:7rbDUyQj
今もっとも勢いのあるプログラム言語はJavaScriptだが、
JavaScriptではprivateなどというテスタビリティを下げるだけの
クソな制限を作らせず、_valueなどのように命名規則で示すようにしている。
こうしておけば、人間が見たときもわかりやすいし、テストコードも書きやすい。
人類の知性の結晶。
0934デフォルトの名無しさん2015/12/14(月) 21:49:44.24ID:YC/mnP+V
>>931
> カプセル化はテスタビリティを下げるんだよね。
別に下げないが?

まあコードの1行1行をテストしたい(なんで?どうやって?)
ならば、難しいかもしれないが、
テストなんて入力があって、処理の結果の出力を
テストすればそれだけでいい。
0935デフォルトの名無しさん2015/12/14(月) 21:52:53.27ID:7rbDUyQj
>>934
メソッドのアクセス修飾子がprivateだったときのことを想像してみ?
寒気が走るだろ。これぜってーテストされてねえ。
運良く動いてるだけだぜって血の気引くだろ。ミッションクリティカルな
分野で働いてきた俺の感覚では手が震えるレベル。
0936デフォルトの名無しさん2015/12/14(月) 21:56:04.08ID:7rbDUyQj
なんのためにメソッドをわけるんだ。
テストしやすくするためだろうが。
分けたメソッドのアクセス修飾子をprivateにして
これテストしなくていいや(*ノω・*)テヘなんていう
姑息な手段を使ってたら本末転倒。メソッドなんて作らなくていい。
全部main関数に放り込め。
0937デフォルトの名無しさん2015/12/14(月) 21:58:26.78ID:YC/mnP+V
>>935
> メソッドのアクセス修飾子がprivateだったときのことを想像してみ?
だから、なんで、そんなテストしなくていい場所までテストしようと考えるんだ?
お前は、関数の中の行、1行1行をテストしてるのか?

関数の入口と出口だけを見ればいいんだよ。
0938デフォルトの名無しさん2015/12/14(月) 21:59:57.54ID:ETDpPCfc
そもそも論だけど
そういう理屈ならメソッドをprivateにしなければよいだけだろう
変数だけprivateにしてメソッドをprivateにしなければ良い話だろう
どうしてもそうしたいならな
0939デフォルトの名無しさん2015/12/14(月) 22:00:15.81ID:barGDPfi
>>932
上級者の振りして頓珍漢なこと言えば顰蹙だが
初心者をせめて何の意味がある。

関数型は割りと好きだが、
関数型>オブジェクト指向と 対立軸で単純に批判したいわけではないんだよ。
昨今はやっているオブジェクト指向には問題がるよという話。
ちなみにオレは関数型万せーの立場ではない。

関数型は構造を相似的再帰分割で細分化単純化するので、
抽象的データ方(スコープを持った構造体)のような一段マクロな
構造上の仕様、約束事が細分化の中にシンプルに溶け込んで
あらわに出ない傾向がある。

ピンとこないだろうが、コンピューターサイエンス的には
関数型とオブジェクト指向は原理的に相反するものだという。

一方、モジュラリティーを目的にオブジェクト指向を実用的に
取り入れた言語も存在する。

なお、関数型はそれなりに色々弱点もある。
比較的局所で機能的なコードには強いが、大規模なシステムの中の
部品やグルーみたいな位置づけのコードは、その特徴が生きてにくいなど。
0940デフォルトの名無しさん2015/12/14(月) 22:01:11.06ID:7rbDUyQj
privateメソッド見つけた時点でこれ書いたやつヤバイやつだと
思わなければいけない。カプセル化っていうのはそれくらい現代の
プログラミングにおいては批判の対象になるべきものだし、
それをわかってないやつってSIerでエクセルペタペタやってる奴ばかり。
改修が入るたびに手動でシコシコペタペタ。これ面倒だからやらなくていいや
なんていう怠惰に負けてバグだらけ。テストしやすさをもとにしてリファクタリングを
行っていく現代とは完全に逆行している。
0941デフォルトの名無しさん2015/12/14(月) 22:03:12.53ID:YC/mnP+V
>>939
> 上級者の振りして頓珍漢なこと言えば顰蹙だが
> 初心者をせめて何の意味がある。

お前が最初に初心者を責めたんだろw

>>914にしっかりと書いてある

> ソフトウェア工学の基本だろ
> それに反してんだよ
> (オブジェクト指向脳に毒された)初心者は

初心者が間違ったことをしているだけ。
なぜ初心者は間違えるのか?という問題の答えも知らないのか?
0942デフォルトの名無しさん2015/12/14(月) 22:04:06.01ID:YC/mnP+V
> privateメソッド見つけた時点でこれ書いたやつヤバイやつだと
> 思わなければいけない。

みなさん、


ID:7rbDUyQj を見つけた時点で、
これ書いたやつ、ヤバイやつだと思わなければいけない。




わかりましたか?
0943デフォルトの名無しさん2015/12/14(月) 22:05:05.33ID:eAXtYubf
IDEなりテストライブラリの機能なりでprivateにも簡単にアクセスできる機能ぐらい提供されてるだろ
それを使えばいいじゃん
0944デフォルトの名無しさん2015/12/14(月) 22:05:09.30ID:7rbDUyQj
>>937
テストしなくていい場所なんてない。一つのバグで会社が潰れることだって
あるんだぞ。尊い命が失われることだってあるんだぞ。
一番外側の関数だけで内部の状態を網羅できるわけがなかろうが。
それをやりやすくするための関数だ。関数は機能ごとに分割しろ。
機能ごとにテストしろ。テストしなくていいと思うのならば、その
機能は使うべきじゃないものだ。そっこく削除しろ。
そんな危険なコードでユーザーの財産を奪うな。
0945デフォルトの名無しさん2015/12/14(月) 22:05:55.34ID:ETDpPCfc
何か興奮している模様
0946デフォルトの名無しさん2015/12/14(月) 22:06:48.45ID:7rbDUyQj
>>943
privateは無理だ。いくらなんでも。
protectedの間違いだろ。
0947デフォルトの名無しさん2015/12/14(月) 22:11:27.84ID:7rbDUyQj
オブジェクト指向の三本柱は
・継承
・多態性
・カプセル化
だが、GOFも言ってるように継承は使うべきじゃない。
上に示したようにカプセル化も現代のソフトウェア工学によって
否定されている。多態性もifでいい。
オブジェクト指向が愚かな考えというのはその通り。
0948デフォルトの名無しさん2015/12/14(月) 22:11:59.53ID:jswwcRhv
>>931
カプセル化してもテストできるよ?
0949デフォルトの名無しさん2015/12/14(月) 22:12:20.73ID:PFyCvZpY
なあ
JavaScriptってさ、privateってキーワードが無いだけで、見えてはいけないものは、見えないように書けたろう
0950デフォルトの名無しさん2015/12/14(月) 22:15:30.86ID:eAXtYubf
>>946
少なくとも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
>>949
だが、外からアクセスできないようにするべきではない。
カプセル化はテスタビリティを下げる。これを肝に命じろ。
カプセル化はクソだ。汚いものを押入れの中に隠して見えなくしたところで
汚いことに変わりはない。綺麗したのではなく隠蔽したのだよ。
健全性の欠片もないしチリも積もればいつの間にかゴミ屋敷。
姑息なことをせずクラス設計を洗練させ、堂々と表に出すっていうのが
本当の清潔さ。
0952デフォルトの名無しさん2015/12/14(月) 22:18:30.08ID:xiCTJUj5
>>947
ぼくちゃんさあ、そんな80年代のオブジェクト指向を持ち出して何をドヤってるの?
オブジェクト指向の人たちもとっくにそんなの卒業して
現代的なオブジェクト指向を使っているよ?
0953デフォルトの名無しさん2015/12/14(月) 22:19:31.01ID:7rbDUyQj
>>950
しょーもない。リフレクション使って仕事した気になるな。
最初っから隠蔽しなければいい。自作自演もいいところ。
自分でテストしづらくしておいてテストするために
リフレクションという裏ワザを使い出す。もっと真正面から
プログラミングというものに向き合って欲しい。
0954アイ2015/12/14(月) 22:20:08.99ID:6cQ1LEo2
それクラスの意味無いだろw
ただの関数ライブラリだ。
0955デフォルトの名無しさん2015/12/14(月) 22:20:50.49ID:7rbDUyQj
>>952
そうだ、現代的なオブジェクト指向は
当初のオブジェクト指向をすべて否定したところに立脚している。
それは俺もわかっている。お前もわかっていることを願う。
0956デフォルトの名無しさん2015/12/14(月) 22:26:21.21ID:barGDPfi
カプセル化の最大の問題は…
便宜のためにグローバル変数的なストレージへアクセスする
抜け道て的なみちとして、じつは結構使われてしまい、
小さいプログラムだ、とまだそれがまずいと分かりやすいが、
大規模で複雑なシステムの中では、必要だからそうしているのか否か
良くわからなくて、構造を明らかにややこしくしていくところだ。
異論は認める。

短いステップレベルの局所で見ると、アクセス制限加えて
安全性が増したように見えたり、関数なのでラッピングできるなど
メリットがあるように見えるが、その実確実に参照をややこしくし、
ステップを嵩ませシステムを複雑にさせかねない。
そうしないためには極めて厳し律速がいるがにんげんだもの
てーぬくさ
0957デフォルトの名無しさん2015/12/14(月) 22:27:05.11ID:barGDPfi
>>952
現代的なオブジェクト指向ってなによ。
まさか…
0958デフォルトの名無しさん2015/12/14(月) 22:28:27.43ID:barGDPfi
クラスもなく
継承もまく
多態もなく

か?
0959デフォルトの名無しさん2015/12/14(月) 22:29:14.97ID:8CnD743M
そもそもSmalltalkには継承先で利用できない変数やメソッドとか無かったのに
何故JavaやC++のような不便なprivateやprotectedが脈々と受け継がれてるんだろうな
0960デフォルトの名無しさん2015/12/14(月) 22:29:20.17ID:barGDPfi
そもそもクラスって物がすごくまずい。
0961デフォルトの名無しさん2015/12/14(月) 22:30:26.01ID:7rbDUyQj
>>958
クラスはある。
継承はなしだ。
多態は微妙なところだな。
関数オブジェクトも多態の一種だしな。
多態はある意味ありだ。
0962デフォルトの名無しさん2015/12/14(月) 22:31:09.61ID:7rbDUyQj
>>960
じゃあ構造体か?
0963デフォルトの名無しさん2015/12/14(月) 22:31:27.09ID:barGDPfi
>>959
そらぁ、C++が設計ミスったんだよ。はげ自身も認めてる。
>> (cout)とかさ失敗したーって、
特徴単体だけを聞くとprivateやprotectedってよさ下に聞こえるから
アピールしやすかったんだろ
0964デフォルトの名無しさん2015/12/14(月) 22:33:57.79ID:barGDPfi
>>961
goとかSwiftのこと?
mixinなら80年代のflaverからあるからな。treitも結構前からあったと思う。
そういうのの一部を引き継いでいまのJavaとかあるから単純化したんだよ。
0965デフォルトの名無しさん2015/12/14(月) 22:38:27.58ID:barGDPfi
flavorだた、LMIのZ-lispやSimbolics由来のCLOS経由
Smalltalk > Cのprepro 拡張 》C++ > c++0x >>変体x14
                   単純化>Java
Objective-c
見たいな流れ
0966デフォルトの名無しさん2015/12/14(月) 22:42:52.55ID:barGDPfi
>>962
いや無用な構造はなるべく設けない。
無駄な仕様、設計の上にぐちゃぐちゃしたこーどが覆いかぶさるだけ
0967デフォルトの名無しさん2015/12/14(月) 22:55:22.37ID:PCT38V0V
>>965
Objective-Cがなんでもアリアリからコーディング規則でちゃんと書けよ?ってやってる側からみると
必死に使える範囲を制限したあげくやっぱ使いにくいやっぱ使いにくい言って、ちょーっとずつ例外的な記法足してって
複雑地獄に自分で飛び込んでる自称オブジェクト指向たちの意味がわかんないんだよなぁ…
0968デフォルトの名無しさん2015/12/14(月) 23:02:41.76ID:v73ucBsk
>>964
>treitも結構前からあったと思う。

Traitsのことなら2006年発表だから(Mix-inとかからすれば)比較的最近
0969デフォルトの名無しさん2015/12/14(月) 23:08:34.11ID:PFyCvZpY
これは、ローカル変数すら否定する勢いだなwww
0970デフォルトの名無しさん2015/12/14(月) 23:14:55.82ID:p56tRJdh
>>924
もともとはCLOSのEQLスペシャライザーを意識したもので
Smalltalkのメタクラスを実現するためのものでもある。
0971デフォルトの名無しさん2015/12/14(月) 23:42:05.29ID:barGDPfi
>>968
Traits
そやたっけ、Scalaが最初だったっけかな

>>969
変数って概念が古いんだよ。おじいちゃん
0972デフォルトの名無しさん2015/12/14(月) 23:50:47.77ID:barGDPfi
ttps://en.wikipedia.org/wiki/Trait_(computer_programming)#Supported_languages

いまはもうGroovyやRacketにもTraitが入ってるね…
0973デフォルトの名無しさん2015/12/14(月) 23:57:25.10ID:J7Mv5fuR
>>968

Nathanael 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:yKCHfRtn
なんだよ、技術的背景がわかってねーのは
ID: 7rbDUyQj
ID: barGDPfi
の2人だけじゃねーかw
0975デフォルトの名無しさん2015/12/15(火) 06:59:51.52ID:yYDdf3CT
>>971
Scalaのtraitは名前だけの別物。ただのmixinだよ。
traitのミソは、複数を同時にuseしたときにフラット化するかどうかだから。
0976デフォルトの名無しさん2015/12/15(火) 07:08:33.15ID:qjG5txy2
何が本物かって定義でもあんの?
0977デフォルトの名無しさん2015/12/15(火) 07:08:58.75ID:qjG5txy2
あ、一番最初に実装したからじゃ定義にならないからね。
0978デフォルトの名無しさん2015/12/15(火) 07:18:44.55ID:yYDdf3CT
Scalaの実装者本人が「名前だけパクった」っていってんだから
疑問の余地ないだろ
0979デフォルトの名無しさん2015/12/15(火) 07:26:07.16ID:yYDdf3CT
実効が検証されたのがたまたまSmalltalkだったってだけで
いちいちなかったことにしてたらtraitもmixinも区別つかなくなるぞ
0980デフォルトの名無しさん2015/12/15(火) 07:28:55.22ID:1zInVUKk
>>974
何が最初かなんてどうでもよくねえか?
歴史を語って技術をわかった気になるな情弱。
0981デフォルトの名無しさん2015/12/15(火) 08:23:57.76ID:qjG5txy2
traitって英語で(人・ものの)特性,特色,特徴って意味らしいぞ。

さてtraitに正確な定義がないとしたら、それは単に似たような用途に対して、
特性というキーワードを使っただけになるわけだが。

本物のtraitの定義はないのか?
0982デフォルトの名無しさん2015/12/15(火) 08:31:08.46ID:qjG5txy2
俺たちは日本語だから、traitやmixinはあまり馴染みがない
英単語なわけで、技術用語のように感じるけど
単なる「特性」なわけだ。

だから外国人にとっては、
class A extends B trait C とかいうのは

Bを拡張した種類A (特性Cを持つ)
のように感じるわけだ。


そこれで俺らが、特性とは〜のことであの言語で使ってる
「特性」をパクったということに何の意味があるのだるか?
言語によって特性の意味するニュアンスが微妙に違うだけではないのか?
0983デフォルトの名無しさん2015/12/15(火) 09:28:37.27ID:cIzoqdye
ニュアンスで言語機能の違いが説明できれば苦労はない
0984デフォルトの名無しさん2015/12/15(火) 09:40:04.88ID:dWzipLnf
サンプルコードの一つも満足に書けないカスが。
0985デフォルトの名無しさん2015/12/15(火) 09:40:24.27ID:TRpr4+TJ
前にどこかで、
英語文法の目的語はobjectだからobject orientedは「目的語指向」だって主張して
文法にトンデモ解釈つけてバカ全開してたヤツ見かけたことあるけど、あれの類いかな
0986デフォルトの名無しさん2015/12/15(火) 09:49:30.84ID:ax++RPg4
>>981
形質という訳語を推したい
0987デフォルトの名無しさん2015/12/15(火) 10:55:28.13ID:2HcBwVqG
scalaのtraitはsmalltalkのtraitと違うが、
それ以上にrubyのmixinとは違うので、
どういう根拠でmixinと呼んでるのか気になる
あれはscalaのtraitとしか言えないものだろ
0988デフォルトの名無しさん2015/12/15(火) 11:47:16.73ID:rnQ5rq5D
ミックスインの実例をRubyのモジュールしか知らないというのがちょっと狭すぎるのでは?

ミックスインというのはクラスやそれに準ずるエンティティ(抽象クラスや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:HSnPmHSe
>>988
scalaのtraitも名前衝突してコンフリクトしたらコンパイル通らないよ
静的に検査されるところはsmalltalkより遥かに優れてるけど
0991デフォルトの名無しさん2015/12/15(火) 23:06:52.10ID:NSMNq7E6
たぶん、Brainfuckが一番読みやすい言語だと思うよ
0992デフォルトの名無しさん2015/12/16(水) 00:20:54.71ID:R3uzXom/
>>990
(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:oNo3I5gu
>>992
Scalaの明示的に書かないとエラーになるのは
うっかりミスを防ぐ良い仕組みだね、って感想しか出ないな
やっぱり静的型付けって素晴らしいね
0994デフォルトの名無しさん2015/12/16(水) 00:39:35.06ID:oNo3I5gu
988自身が書いてるように

>この無名トレイトが合成されるときにトレイト間にコンフリクトがあれば検知されるから、
>それを明示的に解消しないとコンパイルが通らない、というところがポイント。

まさにココがポイントで、それをコンパイル時に発見できるScalaはSmalltalkより進歩してると言わざるを得ない
0995デフォルトの名無しさん2015/12/16(水) 01:00:12.38ID:R3uzXom/
>>994
いや、Smalltalkだってコンパイル時に発見できてますよ?
なんか、決定的な勘違いしてませんか?(たとえばSmalltalkがコンパイル言語と知らないとか)
0996デフォルトの名無しさん2015/12/16(水) 01:01:55.94ID:r9ejGnsb
まともに実務に使えない言語で言い争うなよ。
0997デフォルトの名無しさん2015/12/16(水) 01:07:43.78ID:oNo3I5gu
>>995
Squeakってやつのは実行時に例外が出るだけらしいけど?
http://d.hatena.ne.jp/nishiohirokazu/touch/20130306/1362557967

動的型付けのSmalltalkでコンパイル時にエラー出す処理系を教えてよ
0998デフォルトの名無しさん2015/12/16(水) 01:14:48.04ID:R3uzXom/
>>997
それは、コンパイル時には(検出はするが)あえてエラーは出さずに
実行時にエラーを出すスタブメソッドを動的に生成しているからですよ。
0999デフォルトの名無しさん2015/12/16(水) 01:19:10.72ID:oNo3I5gu
>>998
あえてエラーを出さないw まったく意味ねーw

Smalltalkには無縁な話だけど、実務で使われる言語はデフォルト動作が大事なんだぜ
1000デフォルトの名無しさん2015/12/16(水) 01:20:55.92ID:oNo3I5gu
>>998
あとコンパイル時にやってんのか動的に生成してんのかハッキリしろ
たった2行の文章で矛盾してるぞ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
http://pink-chan-store.myshopify.com/
レス数が1000を超えています。これ以上書き込みはできません。