カプセル化は愚かな考え

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2020/07/29(水) 17:17:58.13ID:u638n5uE
■危険性

かつて偏差値の低い学校向けの情報処理系教科書において「カプセル化は大変すばらしいものであり絶対に使うように」と大体的に宣伝された。

一方、カリフォルニア大学バークレー校の有識者を中心とした「インターネットを作った人たち」は「階層化の有害性(RFC 3439)」として「カプセル化は絶対にやめろ」としている。

大雑把にいうと、教科書の上では素晴らしく、開発を始めた最初のうちは良いが、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。

オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。

ソースコードが存在し改修が可能であればカプセル化しても問題ない。ソースコードがあってもライセンス的に改修できない場合や、そもそもバイナリのライブラリしかない場合などは絶望的である。

https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
677デフォルトの名無しさん
垢版 |
2020/08/28(金) 21:06:16.07ID:XFujtf5p
コンポーネントというのは、バベルの塔だったんじゃないかと思ってな。
678デフォルトの名無しさん
垢版 |
2020/08/28(金) 21:06:55.78ID:JFdvcY0m
Language ✗
Library ○
679デフォルトの名無しさん
垢版 |
2020/08/28(金) 21:07:43.45ID:JFdvcY0m
お前にはScratchで十分だ!
680デフォルトの名無しさん
垢版 |
2020/08/28(金) 21:08:35.98ID:JFdvcY0m
コンポーネントって単語も最近覚えたんだね
よかったでちゅね〜
681デフォルトの名無しさん
垢版 |
2020/08/28(金) 21:41:15.03ID:npmi1CGp
>>672
>だからオブジェクト指向も理解できてない素人を

ならば「チンポがシコシコする」という日本語表現は、文法的に正しいのか?

チンポ「を」シコシコするのではなくて、チンポ「が」シコシコする。この場合、「チンポ」は主語となる。

オブジェクト指向で言う「集約」は2種類あって、全体(俺)と部分(チンポ)が繋がっている場合と、
全体(俺)と部分(チンポ)が別々になっている場合とが考えられる。けれども「チンポ」はそれ自体
が独立した生き物であり、所有者の意思とは無関係に、勃起して「シコシコする」。
例えば寝てる時にエロい夢みて朝起きてみたらチンコが勃起して射精してたとか。

違うか?

「胸がドキドキする」は良いが、「チンポがシコシコする」はダメな理由を、50字以内で述べろ!
682デフォルトの名無しさん
垢版 |
2020/08/28(金) 21:51:25.23ID:npmi1CGp
例えば具体的にいかなる形で「分割」するかだが、

>>662
>大規模システムを小さい多数のコンポーネントに分割することで

まず自分とチンポを分割すること。チンポは独立した生き物で、チンポは自分の意志で勃起してシコシコする。
683デフォルトの名無しさん
垢版 |
2020/08/28(金) 23:17:35.99ID:XFujtf5p
「画面上に4個のボタンがある」

ボタンのように見せかけてるだけで、ボタンじゃないんだよ。

だから、ボタンとして分割することはできない。
2020/08/29(土) 00:36:34.24ID:SgECYZiQ
コンポーネントに分割することで管理しやすくするというだけなら、関数型や非オブジェクト指向の手続型でも共通のような。
コンポーネント化の単位として、オブジェクトを選択したことの優位性如何というのがポイントになってくるのでは。
685デフォルトの名無しさん
垢版 |
2020/08/29(土) 00:45:30.98ID:g18FcF9h
やはり関数型OSが本命だろうな。
686デフォルトの名無しさん
垢版 |
2020/08/29(土) 03:45:42.19ID:g18FcF9h
4個のON/OFFボタンは4ビットで表せる。
HDグラフィックスは3MB程度。
ということは、4ビット入力して3MB出力するような関数があれば良いと考える。
ここが出発点じゃないか?
687デフォルトの名無しさん
垢版 |
2020/08/29(土) 08:41:46.22ID:oUMAS3pz
>>685
関数型がなんなのかわかってれば、そもそもそんなこと言えんわ。
688デフォルトの名無しさん
垢版 |
2020/08/29(土) 10:42:20.92ID:+QUdJXvJ
C++のSTLはLispの超進化バージョンだから関数型への回帰に見える

要するに汎用的な関数を作りたいんだろう
テンプレートを使った万能な関数を作りたいワケだ

C++というかプログラミング言語の狙いはそこ(万能な関数)にある
例えばmax関数一つ作るだけで、どんな型でも最大値を出せる……てのが理想だ
2020/08/29(土) 15:54:18.98ID:MNNuNAQw
ジェネリック知らないのかな?

Lispは動的言語だからSTLとの比較で進化も退化もない
690デフォルトの名無しさん
垢版 |
2020/08/29(土) 19:30:12.05ID:07o8HjE4
関数型が出せなければ、Windowsも終わるだろうな。
691デフォルトの名無しさん
垢版 |
2020/08/29(土) 19:39:16.76ID:urowXmVA
>>686
64ビットのCPUなんですけど
692デフォルトの名無しさん
垢版 |
2020/08/29(土) 19:41:13.66ID:0Qp+2/1q
Haskellでコンパイラ作ったけど処理が遅かったからモナド使って
完成したものは手続き型言語で書いたものと変わらなかったみたいな話をみたことがある
関数型でOSは厳しいのじゃないかな
関数型は銀の弾丸ではないよ
693デフォルトの名無しさん
垢版 |
2020/08/29(土) 20:00:12.92ID:07o8HjE4
>>691
自然言語処理だと5万次元ベクトルとか普通にあるし。
何も不思議な話じゃない。

オブジェクト指向に毒されて、その殻の外を考えられなくなってるのでは?
殻を破れ。
694デフォルトの名無しさん
垢版 |
2020/08/29(土) 20:05:55.38ID:urowXmVA
処理単位という物理的な概念がないのか
695デフォルトの名無しさん
垢版 |
2020/08/29(土) 20:11:02.81ID:gmR1chaS
冒頭の繰り返しになりますが、オントロジーは「情報の意味を定義するための概念」であり、その適用範囲は
広義なものです。更にオントロジーだけではなく、LDやRDFといった周辺技術の関連性を理解してないと
学習初期で混乱することになります。本記事がこれからオントロジーを学ぼうとする方の一助になれば幸いです。
https://qiita.com/mininobu/items/bce0e0ad97ed17e0aff2
696デフォルトの名無しさん
垢版 |
2020/08/29(土) 20:23:16.35ID:07o8HjE4
中国の味の素と言えば李錦記。
オイスターソースを発明した会社だ。
2020/08/29(土) 21:15:39.66ID:i3irdbE0
カプセル化ってstaticの事じゃないの? そう習ったような気が、、、 愚かなの?
698デフォルトの名無しさん
垢版 |
2020/08/29(土) 22:45:50.17ID:07o8HjE4
殻を破れ。
699デフォルトの名無しさん
垢版 |
2020/08/29(土) 22:51:35.09ID:EjjA84a9
頭がおかしい
700デフォルトの名無しさん
垢版 |
2020/08/29(土) 22:58:46.20ID:EjjA84a9
C++ってガチのマルチパラダイムだよね
手続き型 オブジェクト指向
そしてテンプレートメタプログラミングは関数型
701デフォルトの名無しさん
垢版 |
2020/08/29(土) 23:21:22.88ID:yWtTTOog
>>700
老害ですね
702デフォルトの名無しさん
垢版 |
2020/08/29(土) 23:28:20.93ID:07o8HjE4
関数型プロセッサが必要かもな。
703デフォルトの名無しさん
垢版 |
2020/08/30(日) 08:47:47.58ID:zRn3rglz
>>692
Haskellが遅いのは遅延評価だからだよ。(速度より表現力を取った)
モナドは関係無いし、モナドで解決するならとっくにHaskellは速くなってる。

モナドは順序の関係無い数学の世界(純粋関数型言語の世界)で逐次処理を再現する仕組み。
(重さの無い量子に重さを生み出すヒッグス粒子の様なもの)

HaskellでOSが作りにくいのは遅いのもだけど、Haskellのランタイムが大きいから。
C++が一定以上の規模じゃ無いと組み込みで使えないのと同じ。
Cみたいにランタイムが小さく無いとメモリに入りきらない。
C++よりランタイムが大きい上に遅いHaskellでOS作ろうと思うのは、余程の物好きだろう。
704デフォルトの名無しさん
垢版 |
2020/08/30(日) 08:55:55.45ID:AzgFk2g1
関数型プロセッサはSFだろう
無限の再帰に耐えれるCPUだがそんなものが出来るとは思えない
705デフォルトの名無しさん
垢版 |
2020/08/30(日) 09:04:55.80ID:zRn3rglz
スタックプロセッサ(だっけ?)とかLispに最適化したCPUが昔無かったっけ?
数の暴力でx86に潰されたけど。
706デフォルトの名無しさん
垢版 |
2020/08/30(日) 09:10:58.49ID:zRn3rglz
関数OSの可能性が有るとすれば量子コンピュータかな。
純粋関数型言語はアーキテクチャに依存しないので、今でも紙と鉛筆で実行出来るし、理論上は文法そのまま量子コンピュータで動かせる。

まあ、今までの歴史振り返ればCなりをベースにした新言語を作って対応しそうだが。
707デフォルトの名無しさん
垢版 |
2020/08/30(日) 09:19:35.78ID:g5q4aE3p
それらの総称として、オイスタープロジェクトと呼ぶことにします。
708デフォルトの名無しさん
垢版 |
2020/08/30(日) 09:26:18.65ID:AzgFk2g1
いや、スタックプロセッサでは無限のスタックを用意すると数学的に正しい再帰が実現できる
709デフォルトの名無しさん
垢版 |
2020/08/30(日) 09:31:31.63ID:i3Iv6gG3
文脈によって意味が変わる自然言語処理においては「多重継承」が大切。

状況によって、チンポは随意筋にも不随意筋にもなるし、自分自身にもなるし部下にも上司にもなる。

>>539
クリントンとチンポの関係は、部下と上司の関係が逆転してしまった例。
710デフォルトの名無しさん
垢版 |
2020/08/30(日) 09:35:57.52ID:g5q4aE3p
文系の人がプログラミングできるようにとの配慮からオブジェクト指向を推進してきたわけですが、理系には関数型のほうが思考しやすいと思います。
というのも、数式そのままに理解していけるからです。
711デフォルトの名無しさん
垢版 |
2020/08/30(日) 09:38:35.51ID:i3Iv6gG3
・多重継承
ものごとには唯一の本質があるとする存在論にお
いては多重継承が忌避されるかもしれない。しかし
現在の GUO では本質に関する議論を保留してお
り、多 重 継 承 を許 容 している。例 えば《人 間 》は
Agent と EnergyBearer を継 承 し、《パソコン》も
System と EnergyBearer、Artifact を継承する。また、
Agent は System を継承している(図 1)。
http://www.jaist.ac.jp/ks/labs/kbs-lab/sig-swo/papers/SIG-SWO-A602/SIG-SWO-A602-04.pdf
712デフォルトの名無しさん
垢版 |
2020/08/30(日) 09:41:09.24ID:i3Iv6gG3
オシッコするときのチンポは制御、

>>710
>理系には関数型のほうが思考しやすいと思います。

勃起するときのチンポは自律ね!

>数式そのままに理解していけるからです

ならばチンポが勃起する事象を「数式」で示せ!
713デフォルトの名無しさん
垢版 |
2020/08/30(日) 09:54:21.45ID:g5q4aE3p
殻を破れ。
714デフォルトの名無しさん
垢版 |
2020/08/30(日) 10:02:03.27ID:zRn3rglz
>>710
How(どの様に =手続き)では無く、 What(それは何 =構造)で考えろも一緒に教えれば文系にも関数型言語は優しいと思うんだけどな。

lengthとはリストの中の値の個数分1を足した合計を返す関数である。
(要素1個1個を表すxは捨てて1を足すので_で使わない事を明記)

length [] = 0
length (_:xs) = 1 + length xs


リストの中の値の個数分1を足した合計なので、リスト内包表記でこうも書ける。

length xs = sum [ 1 | _ <- xs]
715デフォルトの名無しさん
垢版 |
2020/08/30(日) 10:10:57.43ID:g5q4aE3p
オイスタープロジェクトでは、皆さんのご意見をお待ちしております。
716デフォルトの名無しさん
垢版 |
2020/08/30(日) 10:13:00.06ID:i3Iv6gG3
「言葉の意味をどう定義するか」で、「概念ツリー」と「Has-aツリー」の話をしました。
どちらも、心のモデルを構成するものです。
「概念ツリー」とは、単語の意味の概念関係をツリーで表現したモデルです。
たとえば、「建物」概念の下には、「病院」「学校」「家」といった建物の下位概念が属します。
「学校」概念は、「小学校」や「中学校」、「大学」「東京大学」などの単語を持ちます。
このように、概念ツリーは、下位なほど具体的であり、上位なほど、抽象度が高くなります。
「Has-aツリー」は、「AはBを持つ」という関係を表したものです。
たとえば、
「建物」は「ドア」、「窓」を持つ。
「学校」は、「先生」、「生徒」を持つ。
「病院」は、「医者」、「患者」、「看護師」を持つ。
といったデータモデルになっています。
「心のモデル」が、「概念ツリー」と「Has-aツリー」を持っていたとします。
そこから、このモデルに合致する単語をランダムに選び、文として出力させます。
たとえば、「建物は窓を持つ」といった風に。
特に、問題ないですよね。
こうやって、AIが出力する文を人間が判断していくわけです。
上位概念が持つものは、下位概念も持つので、
「学校は窓を持つ」
「小学校は窓を持つ」
といった文も出力されます。
https://robomind.co.jp/sizengengosyorihenoteigen4/

>>616
心のモデルの基礎はやはりチンポ!
717デフォルトの名無しさん
垢版 |
2020/08/30(日) 10:15:58.81ID:g5q4aE3p
>>716
全く違う。
キミは間違っている。
718デフォルトの名無しさん
垢版 |
2020/08/30(日) 10:20:20.87ID:zRn3rglz
そう言う意味じゃオブジェクト指向プログラミングも部品を組み合わせる様にプログラミングして行くので考え方としてはWhatだ。
でもクラスが用意されてない部分になると途端にHowになる。
そして>>605で書いた通りオブジェクト指向プログラミングではHow部分を駆逐出来ない。
719デフォルトの名無しさん
垢版 |
2020/08/30(日) 11:13:19.74ID:i3Iv6gG3
オブジェクト指向プログラミング言語とオブジェクト指向は違う!

>>718
>オブジェクト指向プログラミングも部品を組み合わせる様にプログラミングして行くので

オブジェクト指向とは、繋がっているけれども独立しているという意味で、俺の股間に付いているモノだ!
720デフォルトの名無しさん
垢版 |
2020/08/30(日) 11:24:47.62ID:i3Iv6gG3
オブジェクト指向とは、決してプログラミングの手法ではない!

>>718
>オブジェクト指向プログラミングも部品を組み合わせる様にプログラミングして行くので

オブジェクト指向とはまさに俺の股間に付いているのであって、それはプログラミングとは無関係である!
721デフォルトの名無しさん
垢版 |
2020/08/30(日) 12:07:11.69ID:7OtexdeL
>>540
オシッコするときのチンポは「関数型」ね!
722デフォルトの名無しさん
垢版 |
2020/08/30(日) 12:39:27.27ID:j2JU6h3h
https://ja.wikipedia.org/wiki/関数型言語#関数型プログラミングの例
VBAで書くとこういうことですな

手続き型
Function fibona(num As Integer) As Integer
 Dim x As Integer, y As Integer, tmp As Integer
 x = 1: y = 1
 For i = 2 To num
  tmp = x: x = y: y = y + tmp
 Next
 fibona = y
End Function

関数型
Function fibona2(num As Integer) As Integer
 If num < 2 Then fibona2 = 1 Else fibona2 = fibona2(num - 2) + fibona2(num - 1)
End Function

なるほど、「フィボナッチ数列は前2個を再帰的に足す」という要件が、下の方が見えやすいね
この場合は上の方が呪文
ただ下は要件は見えやすいが、なんとなくであって、動作に確証は持ちにくいわな

しかし引数が10の時、上は9ループだけど下は177回!
それ専用の言語はうまくコンパイルするのかな
723デフォルトの名無しさん
垢版 |
2020/08/30(日) 12:46:58.39ID:j2JU6h3h
フィボナッチはたぶんSQLでは書けんね
SQLは全行同時処理するところに速さの秘訣があるので、逐次処理や再帰処理はその利点を生かせない
(T−SQLには制御文もあるので書くことは書けるが)
2020/08/30(日) 12:49:20.46ID:BWuiy1TR
最低限SOLIDくらい理解してから語ってくれよ。。
2020/08/30(日) 12:54:15.74ID:yxkdlNNK
>>723
CTEとか使えば標準でもできるよ
726デフォルトの名無しさん
垢版 |
2020/08/30(日) 12:59:10.56ID:j2JU6h3h
Function fibona(num As Integer) As Integer
 Dim i As Integer, x1 As Integer, x2 As Integer
 x1 = 1: x2 = 1
 For i = 2 To num
  fibona = x1 + x2
  x1 = x2
  x2 = fibona
 Next
End Function
(さっきのは i の宣言が抜けてた)

こう書けば「前の2個を足す」という意味が分かりやすいのでは?
何言語を使おうとセンスの問題だったり
727デフォルトの名無しさん
垢版 |
2020/08/30(日) 13:07:28.54ID:j2JU6h3h
>>725
言われてググって思い出したが、昔ちらっと使ってみたことあったようななかったようなw
WITHって覚えてるな
遅いからやめたんだっけかな
728デフォルトの名無しさん
垢版 |
2020/08/30(日) 13:25:08.04ID:i3Iv6gG3
>>717
クリントン大統領もチンポがしこしこしてしまったのだが?
729デフォルトの名無しさん
垢版 |
2020/08/30(日) 13:41:34.87ID:i3Iv6gG3
メッセージングとは「対話」ね!

>>155
>オブジェクト指向のコア概念メッセージングがなぜ提唱されたか察するに

オブジェクトは必ずオブジェクト同士の「対話」を伴う、これがメッセージングだ!

928 デフォルトの名無しさん 2018/11/21(水) 18:59:11.61 ID:8Yc2p7H1
>>922
>ナンチャッテメッセージングスタイルになったのは

チンポ.オシッコを出す
チンポ.オシッコを止める

さっきトイレでやってきた。


929 デフォルトの名無しさん 2018/11/21(水) 19:07:17.83 ID:8Yc2p7H1
>>915
>単なる動的なメソッド呼び出しをメッセージと称し、ただしコールするメソッドが見つからない場合だけメッセージを
>ハンドリングできる省コストなナンチャッテメッセージングスタイルに落ち着いた。

×
俺.オシッコを止める 俺.オシッコを出す

俺.チンポに力を入れる 俺.チンポから力を抜く
730デフォルトの名無しさん
垢版 |
2020/08/30(日) 13:45:23.95ID:i3Iv6gG3
>>550
女子のブルマ姿に勃起してチンポがしこしこしてしまわないよう、あらかじめオナニーしとくことが大切。
それからチンポがしこしこしてしまった場合でも、急いでトイレに駆け込んでオナニーしておくことが大切。
オシッコが出るのか精液が出るのかは、本人にしかわからないことで「カプセル化」されている。
731デフォルトの名無しさん
垢版 |
2020/08/30(日) 14:10:38.58ID:i3Iv6gG3
言葉の意味を追求しない統計的機械翻訳は、2010年のIBMワトソンでおしまい。

>現在の GUO では本質に関する議論を保留しており、多重継承を許容している。

自然言語のロゴスを徹底的に追求するには、オブジェクトの多重継承は必須!
732デフォルトの名無しさん
垢版 |
2020/08/30(日) 14:14:03.24ID:j2JU6h3h
とはいえ、これを with でどうやって書くのか、ちょっと思いつかん
(これは2個ずつ処理してるので変数でやった方がいい処理だが)

select n, f =1 into #n
from (
select n =1
union select n =2
) n;

while (select max(n) from #n)<=10
begin

insert #n
select n.n, f =isnull(n1.f+n2.f,1)
from (select n =max(n)+1 from #n) n
left join #n n1 on n1.n=n.n-1
left join #n n2 on n2.n=n.n-2
order by n.n desc;

end;
go_end:

select * from #n;
drop table #n;
733デフォルトの名無しさん
垢版 |
2020/08/30(日) 14:15:27.47ID:j2JU6h3h
あれ、
order by n.n desc;  ←これは余計
734デフォルトの名無しさん
垢版 |
2020/08/30(日) 14:17:32.56ID:i3Iv6gG3
チンポがオシッコ出したり止めたり勃起したり射精したりするのは古今東西共通であり、

>>552
>俺が言ってるのは40にもなって
>オシッコとかチンポとか、恥ずかしくないのかってことなんだがw

恥ずかしがらずに「チンポがシコシコする」という新しい表現を受け入れることが大切!

「帽子」と言ってもいろんな帽子があるが、「チンポ」は一人につき一つであり、一対一の対話が可能!
735デフォルトの名無しさん
垢版 |
2020/08/30(日) 14:22:00.66ID:i3Iv6gG3
クリントン大統領もチンポがシコシコしてしまったのであり、

>オントロジーは「情報の意味を定義するための概念」であり

官能小説はいくらでもあるし、アダルト映画もいくらでもある。チンポがシコシコという表現があれば、
アニメからホワイトハウスまであらゆるオントロジーを作成出来るはずだ!
736デフォルトの名無しさん
垢版 |
2020/08/30(日) 14:29:52.73ID:i3Iv6gG3
>オントロジーは「情報の意味を定義するための概念」であり

977 デフォルトの名無しさん 2018/09/17(月) 07:24:42.74 ID:C7pw6n1T
自然言語処理の知識はゼロなのでわからないです。面白いアイデアだと思うので、Twitterの自然言語処理が専門の方々に聞いてみては?
https://peing.net/ja/q/417c9e29-35de-4c95-8323-afd6a50fcbc7

コンピューターのための自然言語理解シミュレ
ーターというのは可能ですか?

例えば第二次大戦の推移について、言葉ではな
くて動画で理解する方法もあります。
言葉で説明するよりもマインクラフトのような
創作ゲーム表現に変えたほうが分かりやすいで
す。
けれども自分が読み漁った人工知能や自然言語
処理の本にはそうしたアプローチは見つからな
かったです。
言語はただの記号の羅列で機械は現実世界を全
く知らない。でもそういうことなら、
テレビゲームのような仮想世界をインプットし
て、自然言語で操作したらいいと思います。
というか自然言語入力でときめきメモリアルみ
たいなゲームをやってみたいてす。
737デフォルトの名無しさん
垢版 |
2020/08/30(日) 23:16:48.18ID:j2JU6h3h
よくよく考えると、フィボナッチで「定義」通りにやってるのは手続き型
なので10回の指定で9回計算し、途中経過を出力するとフィボナッチ数列になってる

関数型は最後のフィボナッチ数は出てくるが、177回も計算し、途中経過は意味不明な数字になってる
数列で欲しい場合、この関数を10回使うか、手続き型の別の関数を用意することになる
738デフォルトの名無しさん
垢版 |
2020/08/31(月) 00:07:31.00ID:RyTJNMW1
>>737
ループと同じにするならこうかと

Function Fibo(n, a, b)
 If n = 1 Then
  Fibo = b
  Exit Function
 End If

 Fibo = Fibo(n - 1, b, a + b)
End Function
739デフォルトの名無しさん
垢版 |
2020/08/31(月) 00:15:22.32ID:RyTJNMW1
ループの実装であっても
「関数は同じ引数を与えられた場合、同じ値を返す」
を満たすから参照透過性があると考えて
関数型プログラミングとみなしてもよいと僕は思います
740デフォルトの名無しさん
垢版 |
2020/08/31(月) 01:34:59.59ID:abwkhqHt
>>738
おお、これは
wiki は「関数っぽさ」の説明のためであって、ほんとはこうなのかな

共通テーブルは自己参照が1個しか書けないから、2個前が参照できず、
そのように前の加算結果も最新行に保持するしかないなと、思ったところで断念w

declare @n int =0;
select n =@n into #n;
while @n<10 begin set @n =@n+1; insert #n select @n; end;
--↑整数マスタがあるとして

with nn(n, f, f1) as (
select n, f =1, f1 =0 from #n where n>=2 and n<=10
union all
select n.n, f =n1.f1, f1 =n1.f+n1.f1
from #n n inner join nn n1 on n1.n=n.n-1
)
select sum(f)+1 from nn;

drop table #n;

最後の+1が逃げっぽいけどw
共通テーブルは1個の上に外部結合も許可されず(できたとろこでスマートになるかは不明)

しかし同じ発想のようで、そっちは途中経過が綺麗な数列
こっちは意味不明な45レコード
その上、意味不明度が上がるのでやめた方がいいなw
741デフォルトの名無しさん
垢版 |
2020/08/31(月) 01:56:42.46ID:abwkhqHt
共通テーブルのサンプルを見ると、20年前の若気の至りを思い出すな
リレーショナルだから、2列のキーのみで可変階層がスマートじゃないかと
できるからって工事の積算なんかに使うと、えらいことになる
20年前と今ではPCの性能違うだろうけど

現実には階層を固定で持っても十数列で済んだり、なんなら255列用意しても大したことない
泥臭くてもその方が圧倒的に速く、再利用性も高いのが現実
742デフォルトの名無しさん
垢版 |
2020/08/31(月) 09:44:30.49ID:wxThvNjw
構造化プログラミングの再帰処理で階乗やディレクトリ探索しか例がない理由を考えたことあるのか。
逆に、分岐条件や判定が複雑に入り混じったいわゆる手続きを関数型で実現する例が少ない理由を考えたことがあるのか。

関数バカは死ね。
2020/08/31(月) 09:55:23.77ID:zAiif6l8
> 構造化プログラミングの再帰処理で階乗やディレクトリ探索しか例がない理由を考えたことあるのか。

再帰処理をしたことがない人でも知っているものだからだよ

> 逆に、分岐条件や判定が複雑に入り混じったいわゆる手続きを関数型で実現する例が

例として持ち出す時、手続き型でも分岐条件や判定が複雑に入り混じったっものは使わないよ


理由はこれでいいと思うけど、
なんで関数バカは死ねって最後に捨て台詞はいたの?
744デフォルトの名無しさん
垢版 |
2020/08/31(月) 11:08:51.82ID:f7jpNd8/
>>722
単純な再帰だと関数型言語でもスタック消費するけど、モナドのインスタンスになってる再帰関数や、末尾再帰はループにコンパイルされる。
(リストはモナドのインスタンスなので、リストを受け取ってリストを返す関数は再帰でもループになる。IOな関数も同じく)

手続き型言語でもC/C++とJavaScriptは末尾再帰のループ化は対応してる。
745デフォルトの名無しさん
垢版 |
2020/08/31(月) 11:19:36.36ID:ZrRJaCUf
愚かな・・・なんて愚かな・・・

※戦場のピアニスト
746デフォルトの名無しさん
垢版 |
2020/08/31(月) 11:30:50.52ID:f7jpNd8/
>>742

条件分岐や判定が複雑に入り混じった様なのは、むしろ関数型言語や論理型言語の得意分野だけど・・・。
今まで関数型言語が苦手と言うか、純粋さを捨てていた手続きってのは

putStrLn str
print n

みたいな戻り値が無い関数(voidな関数や戻り値を普段は使わない関数)が続く様な処理や入出力。
これを順番を保証するのが難しかった。

そこを圏論でプログラム丸ごと関数の様なものとして順番を保証しつつ参照透明性を確保する事で大きな意味での(個人的に純粋とは言わない気もするが)純粋関数型言語を実現した。

putStrLn str >>= \_ -> print n

上の糖衣構文

putStrLn str >> print n

do形式で手続き型言語っぽく(手続き型言語っぽいとはいえ、しっかり関数型言語なので一つの巨大な式に還元される)

do
putStrLn str
print n
747デフォルトの名無しさん
垢版 |
2020/08/31(月) 13:40:25.41ID:ZrRJaCUf
これからの時代、多態性よりポリリズムのほうが重要。
2020/08/31(月) 14:31:14.55ID:3l02ZOhc
何回繰り返すんだ…
2020/08/31(月) 15:35:42.21ID:+mVf3WVi
x,y,zをpos2d,zで持つことはないよねって100万回復唱しろ
750デフォルトの名無しさん
垢版 |
2020/08/31(月) 17:14:59.79ID:PbFnPWGE
ネタスレのようだが

カプセル化は問題無い
隠蔽化が問題有る
2020/08/31(月) 18:06:13.87ID:+mVf3WVi
単純に実行しないとインターフェースから先に飛ぶことができないのも読みにくい
更にそこから先の処理の可能性がインターフェースを持つクラス全部とかこれまた読みにくい
更にそのクラスのインスタンスの違いについても追わなきゃいけなくて結果としてゴミクズ
2020/08/31(月) 18:45:27.41ID:Tn5kdrj1
カプセル化はいまいちメリットわからんよね
スコープの話なのに徹底できてない点がカプセル化の是非が定まらない原因
2020/08/31(月) 18:49:04.49ID:+mVf3WVi
カプセル化したくせにSetterとかGetter作ってるやつ見ると

「オメェ、ここおかしんじゃねーのか?」

って言いたくなる
アクセスをイベントに限定したいのか?
誰でもいつでもアクセスしたいのかスタンスをハッキリさせろよw
2020/08/31(月) 19:30:45.75ID:EhjC94Lv
>>747
なにをいまさら
2020/08/31(月) 20:27:11.07ID:JFSQLtY4
>>753
setterとgetterを準備するぐらいならいさぎよく
publicにした方が「私は」いいと思うけどな
2020/08/31(月) 20:59:45.24ID:I/LqRe2u
そうですか
2020/08/31(月) 21:33:12.45ID:+mVf3WVi
>>755
作るソース全部そんな感じの奴がいて邪魔くせぇ

wpfのINotifyPropertyChangedってさ関係ないイベントでも発火して制御できないよね
はじめはsetter、getterでやってたけどあかんわ
発火したいときとそうでないときと手動で分けられないとあかんわ
なんかこれ系のついでに何やらやっちゃおうシステムって開発終盤になると全部ゴミだな
758デフォルトの名無しさん
垢版 |
2020/08/31(月) 21:44:33.69ID:wxThvNjw
>>753
Java web appだと、lombock入れてカプセル化壊すのが当たり前になっちまった。
スマホアプリとか組み込み系とかでしっかりコーディングすればいいと諦めてる。

実際、Web アプリ界隈はバカばっかだし。割り切りも大切。
2020/08/31(月) 21:48:45.10ID:SA/5RSYf
>>758
https://codezine.jp/article/detail/7274

>  Javaは言語仕様上の制約により、ボイラープレートコード(自明だが省略できないお決まりのコード断片)が
> いくつかあります。例えば、メンバ変数を読み書きするだけのgetterメソッドやsetterメソッドがこれにあたります。
> Lombokを使えば、これらJava特有の冗長なコードを、見やすく簡潔なものにすることができます。
>
>  LombokではEclipseのような自動生成ではなく、アノテーションを付与することにより
> ボイラープレートコードを実装したのと同じ効果を得ることができます。

単にプロパティをアノテーションで書けるってだけだよね?
これのどこがカプセル化破壊になるの?
760デフォルトの名無しさん
垢版 |
2020/08/31(月) 23:12:59.79ID:KpYRvIVn
エラーチェックをしたいときはsetter
2020/09/01(火) 00:02:49.23ID:TdzDL303
もしかして
貧血ドメインモデル
2020/09/01(火) 00:41:56.64ID:EzjTWAdj
>>760
それ、エラーチェックをしたいときはpublicメソッド呼び出しと
言ってるのと同じことだけど、何の関係があるの?
2020/09/01(火) 00:52:29.54ID:PZXbhIm5
JavaBeansではセッタとメソッドは別の概念
セッタを通じて状態にアクセスすることでオブジェクトは
よりスマートになる
2020/09/01(火) 00:54:01.92ID:PZXbhIm5
一周回ってアクセサが再評価される段階に入った
2020/09/01(火) 02:05:29.12ID:ETu8a3Hk
>>763
なんねーよ
バカジャネーノ
ブッコロ
2020/09/01(火) 02:06:41.53ID:ETu8a3Hk
何がカプセル化だよ
settergetter使うなら丸出しと変わんねーよ
767デフォルトの名無しさん
垢版 |
2020/09/01(火) 02:27:10.74ID:/xk9LnpH
これからの時代、多態性よりポリフェノールのほうが重要。
768デフォルトの名無しさん
垢版 |
2020/09/01(火) 04:55:11.55ID:Z9W01AEm
下駄 雪駄
2020/09/01(火) 09:15:18.95ID:G32wsX1x
>>766
そんなわけないやろ。
2020/09/01(火) 09:26:14.90ID:PZXbhIm5
>>766
おいお前それはないよ
2020/09/01(火) 10:03:35.97ID:EzjTWAdj
>>766
お前もしかしたら全てのメンバ変数に
setter/gette作ってんのか?
お前が丸出しにしてるだけだろw
2020/09/01(火) 10:13:31.32ID:FqTPqd+i
これこそ露出狂という奴だなw
2020/09/01(火) 11:42:47.53ID:G32wsX1x
今時、意図せずフィールド丸出しはない
2020/09/01(火) 11:53:13.42ID:4pPofKRH
>>771
は?そもそもオブジェクト指向とか言うクソ使ってねーわ
775デフォルトの名無しさん
垢版 |
2020/09/01(火) 12:14:48.18ID:lpkaZteT
>>774
オブジェクト指向は既に俺の股間に付いているのだから、オブジェクト指向プログラミング言語は要らない!
2020/09/01(火) 12:27:07.84ID:wBGQmF0I
だから適切なインターフェイス作成ができないなら素直に関数にしとけと。。
馬鹿に限って自分のクラス設計に自信持ってんだよな。。
777デフォルトの名無しさん
垢版 |
2020/09/01(火) 12:50:13.91ID:/xk9LnpH
CSSはJavascriptで実装されただけあって、仕様も混沌としてるな。
動的確保前提の設計なので、いちいちイラっとする。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況