- 【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; };
|