読者です 読者をやめる 読者になる 読者になる

Love training

It's hard and painful to love people...

エンジニア心得え-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

for文の()内の型宣言した変数は、for文の中だけ。覚えてください by HKT研究生

このままだと推しのようなブログになってしまいそうなので、とりあえず何かを書く(笑)

Javaの以下の問題で引っかかった。。 問は下のコードでコンパイルエラーが起きるので、エラーを無くしてくださいと。

問題

以下のプログラムはコンパイルエラーになります。エラーを無くすにはどのようなにすればよいですか?

int[] a = {11,13,17,19,23,29};
int t = 29;
for (int i=0; i<a.length; i++) {
    if (a[i]) == t) break;
}
System.out.println(i + 1 + "番目の要素がヒットしました");

タイトルのとおり、 for文の()内の型宣言した変数はfor文の中だけ有効。 なので、上記のコードではfor文の外でfor文の()内で型宣言した変数iを使おうとしているのがコンパイルエラーの原因ということらしい。

回答

変数iをfor文の外で宣言する。

int[] a = {11,13,17,19,23,29};
int t = 29;
int i;
for (i=0; i<a.length; i++) {
    if (a[i]) == t) break;
}
System.out.println(i + 1 + "番目の要素がヒットしました");

上記の修正でいいのかな。

教訓

  • for文内での変数の型宣言
    • for文の()内で型宣言すると、この変数iはfor文の構造の中だけ有効。for文の外部でiという変数を使っていてもそれとは無関係にローカル変数としてiを利用できる。逆にiをfor文の外で使おうとするとコンパイルエラーとなる。

PS HKT三期生だとティファニー推しです。それにしても本当に教科書に書いてあることを書いてるだけのブログだなぁ(笑)

AKB 44thシングル劇場盤の抽選申込み開始とサイレントマジョリティー

初投稿からアイドル話(笑)。早速ブログの本来の主旨から外れてスタート。

タイトルの通り、とうとう今年の総選挙の投票券付き劇場盤の抽選申し込みが今日の18時から開始。

私の推しメンは佐藤すみれですが、正直、去年の総選挙で49位ランクインに加えてフューチャーガールズのセンターでかなりやりきった感が個人的にあるので、今年はどの程度のモチベーションで行くか悩み中。

去年は一昨年の圏外を受けて選対さんもかなりがんばったようで、今年はすみれ界隈が総選挙に対してどの程度のモチベーションで望めるのか?というところは個人だけでなく全体としてあるのではないかと思っている。

すーちゃんもあまり総選挙に関しては語っていないので、まだアクセルがかからないなぁという現状かな。

でも、去年のピーターパンのお茶会みたいにすーちゃんに泣きながらお願いされたらどうせ本気出しちゃうんだろうけど。本当ヲタクはチョロいってやつです。(去年の総選挙前の時期はすーちゃんのメンタルがかなり来てて、それも相まって、なんとかランクインさせなきゃ卒業しちゃうんじゃないのという焦燥感もあった)

と、まあ、ぼちぼち今年も始まったなという感じ。

そして、今日は欅坂46のデビューシングル「サイレントマジョリティー」の発売日。こんなに待ち遠しかったのっていつ以来だろう(笑)。もうyoutubeのMVで完全にやられました。ツボにハマりまくり。乃木坂は登らなかったけど、欅坂は登ることになりそう。とりあえず、てちと鈴本さんとベリカというミーハーな感じから入っていこうと思います。

ん〜、このブログ公開にする必要あるのか?(笑)