エンジニア心得え-java-1

[エンジニア心得え-java-1]

□変数宣言時:変数のスコープとなるブロック({}で囲まれた部分)を確認する

[理由]

  • 同じ名前の変数があった場合に、どの変数が参照されるか判断できない
  • ブロックでソースを見る習慣をつける

[検証]

  • スコープが異なる同じ名前の変数を用意
    • 名前は同じでも出力される値が異なることがわかる。
    • 呼び出される変数はスコープで判断する。呼び出した位置から最も内側のスコープで定義された変数が使用される
public class ScopeTest {
    //this is member variable[m1].
    String var = "m1";
    public static void main(String[] args) {
        ScopeTest test = new ScopeTest();
        //this is local variable[l1] in main method.
        String var = "l1";
        System.out.println("①This var is :" + var);
        test.foo();
        System.out.println("②This var is :" + var);
        System.out.println("③This var is :" + test.var);
    }
    void foo() {
        //this is local variable[l2] in foo method.
        String var = "l2";
        bar();
        System.out.println("④This var is :" + var);
    }
    void bar() {
        //this refers 2nd line's member variable.
        var = "m1+";
    }
}
  • 実行結果
①This var is :l1
④This var is :l2
②This var is :l1
③This var is :m1+

エンジニア心得え-shell-1

[エンジニア心得え-shell-1]

□shellスクリプト内ではパスを絶対パスで記述する.または環境変数で設定したパスを利用する

[理由]

  • 一般的にcronでの実行時のカレントは実行ユーザーのホームディレクトリ($HOME)
  • 相対パスで記載しているとスクリプトがカレントに依存してしまい、cron実行時のカレントと相違が発生する(cron実行だと動かない問題)

[検証]

  • cron実行時のカレント調査
    • 相対パスでcron実行
    • 出力ファイルのパスを確認
* * * * * date > temp.txt
$ find `pwd` -maxdepth 1 -mindepth 1 | grep temp.txt
/Users/shouhei/temp.txt
* * * * * env > cron_env
$ cat cron_env
SHELL=/bin/sh
USER=shouhei
PATH=/usr/bin:/bin
PWD=/Users/shouhei
SHLVL=1
HOME=/Users/shouhei ★
LOGNAME=shouhei
_=/usr/bin/env