![見出し画像](https://assets.st-note.com/production/uploads/images/39970745/rectangle_large_type_2_f06da5b38750f97600f5e19b3fb0279e.png?width=1200)
🔫「$マークにアンダーバーつけた変数使う言語が90年代に流行したんですよ。」perlとtclのuplevel upvar命令など コード秘宝館
私の事ですか?
今思い返すとぜんぜん異常なことだったんだ。。。
覚え方:$下線はとある操作を覚えるためのもの。
あの変な奴をデフォルト変数と呼ぶらしい。とにかくUnixの世界にほぼ初めて触れるような我々に、アメリカ人は全員舌を出し挨拶すると言わんばかりの異様な変数 でのあいさつ$_を多用した。
$_ はグローバル変数です。 しかし、perl v5.10.0 から、ファイルやブロックで my で宣言することで、 レキシカル版の $_ が使えます。 さらに、our $_ という宣言は現在のスコープでグローバルな $_ を 再構築します。 これは導入した時点ではいい考えに思えましたが、実際にはレキシカルな $_ は 解決するものよりも多くの問題を引き起こします。 $_ 経由で情報が渡されると想定している関数を呼び出すとき、関数の 書かれ方によって動作したりしなかったりします; これを解決する簡単な方法は ありません。 自分が特にマゾと言うのでない限り、単にレキシカルな $_ を使うのを 避けてください。 この理由により、レキシカルな $_ は実験的なままで、警告を無効にしない限り 警告が出力されます。 他の実験的機能と同様、レキシカルな $_ の振る舞いは(致命的エラーへの変更を 含めて)通知なく変更される可能性があります。
ある性的な趣向を持った人以外は特に「レキシカルな$_」は禁じ手になるらしい。。。
特に概念として共有している言語はないみたいなんだが(PHPとかにはある?)、javascript番長、ブレンダンアイクさんは90年代をこう語る。
グローバルオブジェクトとダラー変数は違うものbyアイク先輩
Javascriptは概ね静的スコープを持ち、多少変則的なところがあります。非常に動的になる抜け穴があるのです。グローバルオブジェクトと、with文と、evalです。しかしmy以前のPerlのダラー変数や、Tclのupvarやuplevelみたいなのとは違います。90年代にはそんなのがたくさんあって、流行だったのです。(ブレンダン・アイク coders at workP138)
$_については、そんなに使いこなす必要ないが、コンテクストによって中身が変わる性質を持っているので、めちゃめちゃ萎えた記憶はある。
ついでに他にアイク先輩がブラックメールしているTCLのなんとやらも調べておこう
どうも太極変数にアップバーする識別子らしい。。。。
どういうお笑い?
uplevelはなんかもうパルプンテみたいなことが書いてある気がする。なぞなぞか何かか
例えば、プロシージャaはトップレベルからコールされ、そしてaがbをコールし、bがcをコールし、cがuplevelコマンドを呼び出すと仮定します。 level が1または#2、もしくは省略される場合、本コマンドはbの変数文脈において実行されることになります。level が2または#1ならば、本コマンドはaの変数文脈において実行されることになります。level が3または#0の場合、本コマンドがトップレベル文脈で実行されることになり、この場合はグローバル変数しか見えません。uplevelコマンドが実行されると、uplevelをコールしたプロシージャはコールスタックから削除されます
変数置換 $マーク周辺にいる危険なコーディング思想家たち
Tcl パーサーは変数機能の提供によりコマンド間でのデータの受け渡しも扱ってくれる。変数はsetコマンドにより生成される。そして、$記号が先頭に付いた要素を変数名とみなし、その値に要素全体を置換する。これが「変数置換」である。
これがのちの「変数置換」である。といわれてもな。。。
これはでもshellでもrubyでもあるやつか。変数補間という言い方もあるようだ。rubyで式展開と呼ばれているはず。
wikipedia英語ではまるまるupverについて紹介している。
upvarは、現在のプロシージャ内の1つまたは複数のローカル変数が、それを囲むプロシージャ呼び出し内の変数またはグローバル変数を参照するように配置します。upvarコマンドを使用すると、名前ごとのプロシージャ呼び出しの実装が簡単になり、Tclプロシージャとして新しい制御構造を簡単に構築することができます。
アイク先輩の導きでupvarについての理解が深まった。また全然役立たないプログラミング知識が増えてしまった。
with先輩ももちろん今では非推奨
90年代に鳴り物入りで登場し、期待感を持ったwithだが今は非推奨になっているようだ。プログラミングの禁じ手ということになるのか
混乱させるバグや互換性問題の原因になり得るため、with 文の使用は推奨されません。詳しくは "説明" の章の "あいまい性の欠点" をご覧ください。
ほとんど思いつきでやってきて、周囲に迷惑をかけ、難解でもなかったので秒殺されたwith もし見かけたらそっとしておいてあげて欲しい。糖衣構文という物言いもある。
いいなと思ったら応援しよう!
![あたり帳簿](https://assets.st-note.com/production/uploads/images/146045306/profile_76a0adfc7bd4b4908ef76d29ad61ae98.png?width=600&crop=1:1,smart)