トップページ > プログラム > 2016年01月07日 > 90bWN72u

書き込み順位&時間帯一覧

7 位/217 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000210011012008



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
【JavaScript】スクリプト バトルロワイヤル52【php,py,pl,rb】 [転載禁止]©2ch.net
【JavaScript】スクリプト バトルロワイヤル53【php,py,pl,rb】 [無断転載禁止]©2ch.net
オブジェクト指向は愚かな考え。この世は計算式 ★2 [無断転載禁止]©2ch.net

書き込みレス一覧

【JavaScript】スクリプト バトルロワイヤル52【php,py,pl,rb】 [転載禁止]©2ch.net
950 :デフォルトの名無しさん[sage]:2016/01/07(木) 13:21:39.20 ID:90bWN72u
Pythonが綺麗とか言っている人は
Pythonのネストしたスコープにおける変数のスコープの仕様についてはどう思っているんだろう
代入が有ればインナースコープで読み取りだけならアウタースコープというね
代入の有る無しでスコープが変わる、こんなオマヌケ言語、他で見たこと無いんだが
結局nonlocalが追加されたし
nonlocal有るならnonloca指定じゃない変数は一律にインナースコープってことでよかったじゃねーか
それでもキモいことには変わりないがな、nonlocalは普通の変数宣言の逆の働きをするからな
しかし、代入の有る無しでスコープが変わるよりはマシ

こんなオマヌケ仕様だからPyhonがif文とかの普通のブロックにスコープを持って無いのは当たり前
変数の寿命は短ければ短いほど良いというのにね、これもマイナスだな
もしif文がスコープを持っていたらif文書くたびにnonlocaの嵐だからな、使いものにならなかっただろうね
しかもnonlocalは3.0からだから、それ以前ではプログラムを書くのが困難なレベルで糞だった事だろう
最近は無名関数やクロージャを多用したプログラミングスタイルが流行っているけど
Pythonのスコープの扱いは破綻しているから本物の無名関数が追加されたとしても辛い所

結局、動的型だからって変数宣言を排除したのが敗因だったわけだがな
まぁ世の中には折角varという立派な変数宣言が有るにも関わらず、if文とかの普通のブロックがスコープを持たない
別の意味でオマヌケな言語もあるがな いちいち無名関数で囲うとかもうね
【JavaScript】スクリプト バトルロワイヤル52【php,py,pl,rb】 [転載禁止]©2ch.net
955 :デフォルトの名無しさん[sage]:2016/01/07(木) 13:33:47.89 ID:90bWN72u
仮に変数宣言を無くすにしても他にやりようは有ったわけで

例えば
・アウタースコープとインナースコープで名前が同じ変数はアウタースコープのもの
・インナースコープにしか出てこない変数はインナースコープのもので、外からアクセスできない
その上で
・varを付けて宣言すると、アウタースコープと名前がかぶっていてもインナースコープ固有の別変数
とでもすれば良かったし
これならif文などのブロックでスコープを持つことも出来たし、
代入の有る無しでスコープが変わるという糞仕様も要らないし
nonlocalのような否定形の名前の、通常の宣言と逆の働きをする変なものも要らなかった
【JavaScript】スクリプト バトルロワイヤル52【php,py,pl,rb】 [転載禁止]©2ch.net
977 :デフォルトの名無しさん[sage]:2016/01/07(木) 14:35:40.49 ID:90bWN72u
>>951
>デフォルトでやり難くなってるのは全然問題無いし、nonlocal見ただけで警戒できるのは悪くないだろ

nonlocaじゃなくても、オブジェクトのメンバや配列の要素は書き換え放題なのにか?
副作用の有るメソッドも自由に呼べるのにか?
結局何のセーフティーにもなっていない

たしかに、ローカル変数の整数とかはインナーから書き換えにくい仕様だが
どうせそんなローカル変数は元々寿命が短いからどうでもよい
一方でオブジェクトなどの寿命の長い物のメンバnonlocalじゃなくても書き換え放題
これはつまり、どうでもよいものを守って、肝心なものを守ってないということだ

とどのつまりこの仕様は、変数宣言をなくして、さらにあろうことか代入を宣言の代わりにしたから
たまたま代入の有る無しでスコープが変わるという謎挙動になったというだけで
利便性を考慮したものではないことは明らか
単純に考えても代入の有る無しでスコープが変わるというのはイカれている仕様

こんな他の後続言語が誰も真似していない糞仕様まで擁護しなきゃならないなんて大変だね
【JavaScript】スクリプト バトルロワイヤル53【php,py,pl,rb】 [無断転載禁止]©2ch.net
6 :デフォルトの名無しさん[sage]:2016/01/07(木) 17:47:02.57 ID:90bWN72u
再代入が嫌なら再代入を禁止する方法を用意すれば良いだけであって
代入の有る無しでスコープが変わる合理的な説明になっていないということ

本質的に代入とスコープは全く関係ない
代入したいから代入するし、別スコープにしたいから宣言する、それぞれ独立した機能
別の機能を一つにまとめる必要もない

変数のスコープを調べるのに代入の有る無しを調べるのは変な話だし
nonlocalも追加されたから、nonlocalの有る無しと代入の有る無しの両方を調べなければならない

変数宣言だけを調べれば済む方がシンプルだし
機能と構文が一対一で良い
【JavaScript】スクリプト バトルロワイヤル53【php,py,pl,rb】 [無断転載禁止]©2ch.net
10 :デフォルトの名無しさん[sage]:2016/01/07(木) 18:01:38.38 ID:90bWN72u
再代入を禁止する方法はCで言えばconst int = 0;で
こんなものはC言語ですら用意しているわけで
代入の有る無しでスコープが変わる合理的な説明になっていない
オブジェクト指向は愚かな考え。この世は計算式 ★2 [無断転載禁止]©2ch.net
997 :デフォルトの名無しさん[sage]:2016/01/07(木) 20:59:56.11 ID:90bWN72u
それは俺も考えたことあるな
結局多態は、ポインタか参照使って呼び出す場合しか意味ないんだから
オブジェクトがvtalbeを持つのではなくて
ポインタや参照に入っているオブジェクトの該当vtableを一緒に保持させれば良いんじゃないかってね
そうすればCの構造体のように本来vtableを持たないものにメソッドを追加したり多態させたりもできる
オブジェクト指向は愚かな考え。この世は計算式 ★2 [無断転載禁止]©2ch.net
998 :デフォルトの名無しさん[sage]:2016/01/07(木) 21:00:47.85 ID:90bWN72u
イメージとしてはこんな感じ
struct ptr_t
{
オブジェクト指向は愚かな考え。この世は計算式 ★2 [無断転載禁止]©2ch.net
999 :デフォルトの名無しさん[sage]:2016/01/07(木) 21:02:38.75 ID:90bWN72u
イメージとしてはこんな感じ
struct ptr_t
{
void *object;
void *v_table;
};


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。