見出し画像

🔫「$マークにアンダーバーつけた変数使う言語が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 もし見かけたらそっとしておいてあげて欲しい。糖衣構文という物言いもある。


いいなと思ったら応援しよう!

あたり帳簿
お願い致します