26/07/07 01:59:24.43 Ne+vKR/J.net
>>781
$local:foo
のようにローカル変数を宣言するのは、期待にそぐわない感じ?
783:デフォルトの名無しさん
26/07/07 09:14:34.32 Lmi267Ff.net
>>782
レスありがとうございます
$local:foo だと親関数のローカル変数が子関数から見えてしまうようです
C系統のスコープのようにするためには、親関数側の変数を $private:bar のようにすればよさそうだったのですが、元々うるさい字面をさらに…
で、そもそも子関数で親関数の変数と同名で引数を取れば、親関数の(スコープ修飾なしの)変数が隠ぺいされるのでは、ということでした
わかりにくいかもしれませんが
784:デフォルトの名無しさん
26/07/07 10:29:59.43 ZGgidruI.net
気軽なものかと思ったらまったく違った
と言う割に
変数のスコープにこだわり過ぎてて
全く気楽に使ってないw
785:デフォルトの名無しさん
26/07/07 11:01:02.08 NFpp696o.net
いや、おっしゃる通り、気楽に使えないのですよ
786:デフォルトの名無しさん
26/07/07 11:40:58.19 OIoKidqC.net
気楽ってのは感覚的だからなあ
C言語ユーザーから見てJavascriptは気楽に使える
しかしCとJavascriptではスコープの考え方が違うので注意も必要
同じことがPowershellにも言えるわな
シェルスクリプト全般は気楽ではあるけど、そもそも規模が小さいから気楽という暗黙の前提がある
batもbashもとてもクセ者である
787:デフォルトの名無しさん
26/07/07 11:46:38.27 OIoKidqC.net
カプセル化や責務の分離を考えず割とルーズに変数にアクセスできるのは、小規模かつプログラミング初心者が多いシェルスクリプトとしての方向性は間違ってないと思う
大規模なりほかの言語が得意なら多くの場合その外部コマンドを呼べば済む
788:デフォルトの名無しさん
26/07/07 11:50:38.91 OIoKidqC.net
$private:変数名でどうかな
789:デフォルトの名無しさん
26/07/07 12:01:35.65 REwqoljx.net
キーワード等によって部分的に動的スコープを提供していたり、設定で字句的スコープと動的スコープとを選択できるようにしている言語はあるけど、全面的に動的スコープをのみという言語は今は少ないよね。
PowerShellがあえて動的スコープのみにしたのはどういう狙いからなんだろう。
790:デフォルトの名無しさん
26/07/07 13:34:30.54 p/CyyUVW.net
スコープ修飾子なしで上位スコープの変数を言及するコードでの「参照できるけど書き込みが反映されない」って振る舞いが特にややこしかった覚えがある
791:デフォルトの名無しさん
26/07/07 14:17:41.90 REwqoljx.net
参照はできるけど設定はできないというのは、PythonとかRubyみたいに(宣言ではなく)名前束縛で名前の導入を行う言語ではよくある仕様だけど、動的スコープと組み合わせるとさらにややこしくなりそう。
792:デフォルトの名無しさん
26/07/07 14:33:14.43 ZXfqnxad.net
785>>ですが、
気軽にとは、もう少し直感的に、経験に沿って書けるというくらいのことです
793:デフォルトの名無しさん
26/07/07 15:38:50.90 H/pt+iTL.net
初めて触るものに経験に沿って書けるとは
そもそもUNIXシェルって言うほど気軽でも直感的でもないと思う 単に慣れの問題
794:デフォルトの名無しさん
26/07/07 21:12:48.26 OIoKidqC.net
batはグローバル変数のみ
setlocalすると動的スコープ相当
UNIXシェルも動的スコープ
ほなPowershellも動的スコープにしたほうが移植性も学習コストも低いか
って流れだろ
795:デフォルトの名無しさん
26/07/07 21:34:02.03 NFpp696o.net
初めて触るものでも、他の言語での経験が生きたらいいと思いませんか?
こんなところで個性を発揮しなくても…と思ってしまいます
学習コストを割きたくないのですが、そのコストが増加するだけ手放すのが惜しくなりロックインされ
796:デフォルトの名無しさん
26/07/07 21:34:44.12 ZBiyiqsd.net
個性というのは、言語のクセなどをいっています
797:デフォルトの名無しさん
26/07/07 21:35:50.38 WzCO37K0.net
はいはいAIでコード生成しようねぼうや
798:デフォルトの名無しさん
26/07/07 21:37:49.70 NFpp696o.net
サブシェルを呼び出したときの環境変数と同じで、親の変数が参照できても書き換えることができても、親の変数には影響しないのはわかります
でも動的スコープは何だかなぁ
799:デフォルトの名無しさん
26/07/07 21:38:56.66 oqobn2EH.net
坊やww
坊や…
800:デフォルトの名無しさん
26/07/07 23:55:35.51 iZYRpfwb.net
>>788
>>781です
レスありがとうございます
>>783にもかきましたが、$private:barと書くのがC系統のスコープに近く、いったんそうしたのですが、psは元々字面がチョメチョメでさらに汚すことに忍びなく
最終的に、繰り返しになりますが、親関数の変数と同名の引数を持つ子関数を作れば、親関数の変数が隠ぺいれるかと…くどいですが
このことについて誰かご教授いただけると助かります
psは強力なツールだと思いますが、カジュアルに使うにはやや敷居が高いと思いました
罠にハマるような小難しいことはせず、浅瀬で表面的な利を得るか、どっぷり浸かって極めるかで、中庸がないと思いました(程よく使うにもマニアでないと足元をすくわれそう)
そまで深くは付き合ってはいられないのですが、その層は嫌われるようで
801:デフォルトの名無しさん
26/07/07 23:56:50.78 4Q5yMrp2.net
そのほかにも、共感に似たような(?)レスをいただいた方、ありがとうございました
802:デフォルトの名無しさん
26/07/08 00:57:36.08 MK8CAWlc.net
あと、親関数の変数を子関数に自然に導入できるかと、子関数を親関数のインナークラスにしてみたりもしたのですが、拘りすぎるとインナー関数の入れ子ばかりになってしまい…