2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MayaAdvent Calendar 2022

Day 13

melでアレコレやる際に気を付けてる事

Last updated at Posted at 2022-12-12

mel面白いですよね。

mel色々できますよね。

ただ、場合によっては重大な事故を引き起こしてしまうこともあるので、
自分が後輩さんらに1度は言ったことを幾つか

{ } で囲め

とにかくスクリプトエディタなんですよ。
みなさんスクリプトエディタで書いて、実行すると思うんですよ。
割と危険なんですよ。

例えばこんな感じのスクリプトを書いて実行したとしますわ

    string $qbozHoge[] = `ls -sl`;

    for($i in $qbozHoge)
    {
        print($i + "\n");        
    }

この時、$qbozHoge はglobal変数としてmayaさんに登録されてしまうんですね。
(global変数の確認は env; でできます。)

これの何が問題かというと、

  • global変数さんは1回登録されると型を変えられない
  • global変数さんはglobalなので、他でも使える

という事ですね。

つまり、
万が一 会社で使っているツールのglobal変数と名前が被ってしまった場合

  • そもそもツール自体が動かなくなる
  • 変数にツールが予期せぬ値が入り、深刻なエラーを発生させる。

という考えたくないレベルの面倒が発生します。

スクリプトエディタでmel単発の処理を書く際は {}で囲む 事で変数のglobal化を防げます。

{
    string $qbozHoge[] = `ls -sl`;

    for($i in $qbozHoge)
    {
        print($i + "\n");        
    }
}

自分で書く場合も、他人から貰った場合も
スクリプトエディターでmelを実行する際は気を付けてくださいね。

global procは気軽に作るな

これも理由としては前項と一緒ですね。
global proc は後から上書き定義できてしまうので、作るのはまぁ良いのですが
被りそうな名前(誰でも気軽に思いつきそうな名前)で作ると

万が一 会社で使っているツールのglobal proc と名前が被ってしまった場合

  • そもそもツール自体が動かなくなる
  • ツールが予期せぬ挙動をし、深刻なエラーを発生させる

という面倒が待ってます。

なので、melでprocをバリバリ作ってくときは
global procの量は必要最低限にし、
命名時はなるべく固有になるようにした方が安全ですよ。

UIのパーツ名は被らせるな

これも一緒。
万が一 会社で使っているツールのUI と名前が被ってしまった場合

  • そもそもツール自体が動かなくなる
  • ツールが予期せぬ挙動をし、深刻なエラーを発生させる

です。

最終的にUIパーツ名をつけるのが面倒になったので、 
UIパーツ名は定義せずにそのまま変数に放り込むようにしました。

まとめ

なぜこうも細かいところまで一々指示していたのかというと、

過去に自分が全てやってしまったらなんですね。

ほんとうに面倒でした。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?