[@IT] 新入社員シーズンといえば、新人しんじ君です(?)

4月も第3週に入りまして、新入社員研修シーズンも真っ盛りという感じですね。以前から当ブログをご覧の方にはおなじみかもしれませんが、今年から新社会人となって偶然にもこのブログをご覧になったという新入社員の方がいらっしゃいましたら、ぜひご一読いただきたいのが、@ITにて連載されていた「新人しんじ君 IT業界へ」という記事です。というか何を隠そう、私が書かせていただいた連載だったりするのですが・・・弊社のホームページに、私、中越が書かせていただいている@ITへの寄稿一覧がありますので、新人しんじ君はじめ、ご興味のある記事がありましたらチェックしてみてください。

[@IT][Java][研修] 申込締め切り迫る「Java基本文法1日講座」がアクセスランキングTop10入りしてました

送信者 Knowledge-ex. Blog

弊社開催の土曜研修コース「Java基本文法1日講座」ですが、@ITのイベントカレンダーというところにも掲載していただいているのですが、日曜日に見たところ、全体のアクセスランキングでTop10に入っておりました!注目いただいているようで大変喜ばしいところなのですが、タイミングの悪いことに、お申込締め切りが本日4/13(月)の24:00までとなっております。申込ご検討の方はお急ぎください!

まだ残席はございますので、明日以降にお申し込みしたい場合は、お問い合わせフォームからその旨をお知らせください。対応させていただきます。

[Java][Tips] ショートサーキット論理演算子

体系的にJavaを学習していないと、意外に知らなかったりするのが「ショートサーキット論理演算子」です。ショートカット演算子などとも呼ばれます。

論理演算子で「AND」の演算をする演算子には「&」「&&」が、「OR」の演算をする演算子には「|」「||」があります。それぞれ、後者の演算子がいわゆる「ショートサーキット論理演算子」です。

ショートサーキット論理演算子の特徴は、「左辺の結果だけで全体の演算結果が分かるときは、右辺の演算を省略する」という点にあります。

例えば、

int a = 1;
int b = 3;

の場合に、

(a>b)&&(b>1)

という演算をする場合、 (a>b)すなわち(1>3)はfalseになります。AND演算は左辺・右辺ともにtrueのときのみ全体がtrueになりますので、左辺の演算結果がfalseと判明した時点で、右辺を演算せずとも全体がfalseになることは自明です。このとき、ショートサーキット論理演算子を使っている場合には右辺の演算は省略され、全体の演算結果がfalseになります。

これが、OR演算の場合は

(a<b)||(a>2)

という演算をする場合、(a<b)すなわち(1<3)はtrueになります。OR演算は左辺か右辺のどちらか一方でもtrueであれば全体がtrueになるため、この例では全体がtrueになることは自明です。この場合も右辺の演算は省略され、全体の演算結果がtrueとなります。

これがどういうときに便利なのか、という話なんですが、例えば、「ある文字列がnullでなく、かつ長さが10以上」といった条件式を書きたい場合などがこれにあたります。次のような条件文でstrがString型の変数として、

if ((str != null)&(str.length()>=10)) { ・・・

という条件式を書いてしまうと、strがnullのときに、「&」の左辺と右辺を必ず評価(演算)してしまうために、右辺の演算でNullPointerExceptionが発生してしまいます。

if ((str != null)&&(str.length()>=10)) { ・・・

であれば、strがnullのときには、左辺の評価結果がfalseになるために右辺の評価は省略されますので、NullPointerExceptionの発生を回避し、正常に条件式の実行を続けることができます。

[Java][Tips] Javaにおけるスコープ(変数の有効範囲)の判断

新社会人シーズンということで、Javaの基本文法なんかのTipsも載せてみたいと思います。

Javaに限らず変数を扱うプログラミングにおいて初学者が迷いやすいもののひとつが、変数のスコープ(有効範囲)ではないかと思います。

Javaの場合は、おおむね次のような法則で判断すれば大丈夫です。

「スコープはブロック({~}で囲まれた範囲)の内側である」
(逆に言うと「ブロックの外側はスコープではない」 )

例えば、メソッド内のローカル変数のスコープはメソッド内のみで、メソッド外はスコープではありませんが、これはメソッドを囲むブロックが境界線になっていると見ることができます。


public void sample() {

int a = 100;
a = 150; // スコープ内は有効

}


public void foobar() {

a = 200;
// ↑ブロックの外はスコープ外なので無効

}

try~catch節におけるtryブロック内で定義した変数は、tryブロックの外はスコープではありませんし、if文、for文、while文などのブロック内で定義した変数もまた同様です。


public void demo() {

int b = 100;
if (b > 100) {

    int c = 100;

}
c = 200;
// ↑ブロックの外はスコープ外なので無効

}


public void trycatch() {

try {
     int d = 100;
} catch(Exception ex) {
     System.out.println(d);
     // ↑ブロックの外はスコープ外なので無効
}

}

[お詫び] 弊社各サーバがアクセスできない状態になっておりました

弊社で管理している当ブログのブログサーバ、セミナー申込サーバ、問い合わせサーバが、DNS設定の不備によりましてアクセスできない状態となっておりました。ご不便をおかけいたしまして申し訳ございません。

現在は対処が済んでおりますので、正常にご利用いただけます。

弊社セミナー等お申し込みをご検討の方は、今一度アクセスいただければと存じます。

[会社][研修] 本日からシーズンインです

本日より、春の新入社員研修案件がスタートしました。

金融不安だ、不景気だ、と言われている昨今ですが、幸いにして弊社の繁忙期は、順調にお仕事を頂けている状況です。

本日から、7月末まで、ゴールデンウィーク期間(4/30と5/1) を除くと、平日に研修がない日が4日しかありません。

平日の研修稼働日数は、4~7月で72日です。

毎年のことなので、分かってはいるのですが、今年も春~夏は体力勝負になりそうです。
初日からすでにヘトヘトになっているのですが、まだ体が例年のペースを思い出していないのでしょうね。

[Java][フリー教材] フリー教材「JDBC入門」公開準備進行中です

ずいぶん前から、このブログで「近々新しいフリー教材を公開すべく準備中です」というようなことを述べてまいりましたが、いよいよ、公開準備も大詰めにさしかかっております。

公開予定の教材は「JDBC入門」になる予定です。

スライド枚数は100枚強になる見込みです。

ベースになるスライドは1年近く前に出来ていたのですが、最後の仕上げをしよう、しようと思っているうちに年をまたいでしまいました・・・。現時点で、7割以上は仕上げができていますので、もうすぐ、公開できるところまで持って行けると思います。

もう少々、お待ちいただければ幸いです。

[Firefox][Tips] 新しいウィンドウが開かなくなる現象

いつからかは忘れてしまいましたが、Firefoxを使っていて新しいウィンドウが開かなくなる現象が起きていました。最初は、セキュリティの強化か何かで、ページ内のJavaScriptの実行が制限されているのかと思っていたのですが、そのうち、ブラウザ内の「新しいウィンドウを開く」ボタンや「Ctrl+N」の操作でもウィンドウが開かなくなっていることに気づき、少々困っていました。私のPCの場合は、ウィルスバスター2009にバンドルされていた「Trend Micro Toolbar」というアドオンを無効にすることで、この現象が解消されました。

送信者 Knowledge-ex. Blog

本当は、この問題に関する設定だけを調整できたりすればよいと思うのですが、スクリーンショットにある「設定」というボタンは有効・無効問わずグレイアウトされているので、個別の調整は難しいようです。そのため、私はアドオンごと無効化しています。 もし、Firefoxをお使いの方でお困りの方がいらっしゃって、参考になりましたら幸いです。

[Rails][Tips] コントローラークラスにsendメソッドを定義するとInternal Server Error

最近、ちょっとした社内システムの構築に久々でRailsを使っているのですが、そこで遭遇したトラブルです。

Railsのコントローラークラスに send というメソッドを定義すると、Internal Server Errorが発生します。ログには次のように出力されます。

送信者 Knowledge-ex. Blog

Processing MaintController#index (for 127.0.0.1 at 2009-04-07 13:06:17) [GET]
Session ID: 84d33a01a55eaf629913bd764838be8b
Parameters: {"action"=>"index", "controller"=>"maint"}
/!\ FAILSAFE /!\  Tue Apr 07 13:06:17 +0900 2009
Status: 500 Internal Server Error
wrong number of arguments (1 for 0)

ブラウザではこんな表示です。

送信者 Knowledge-ex. Blog

Status: 500 Internal Server Error Content-Type: text/html
500 Internal Server Error

「send」というメソッドは、エラーログに「 C:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:524:in `send’」という記述があるように、ActionController::Baseの524行目で呼び出される内部的なメソッドの名称として使われているので、ユーザーのコントローラークラスでオーバーライドしてしまうと、本来呼ばれるべき内部のメソッドが参照されずユーザーが実装したメソッドが呼ばれてしまい、エラーになってしまうようです(直接の原因は「wrong number of arguments(1 for 0)」ということで、引数の数が不一致ということです)。

Javaの知識で例えれば、Servletの親クラスに定義されている内部メソッドをオーバーライドしてしまうようなものなので、こういった実装はやってはいけないというのは理解できますね。 ただ、sendというメソッドがActionController::Baseで定義されているかどうかは、少し詳しくソースを追いかけないと、よくわからないですね。

というわけで、ユーザーのコントローラクラスでsendというメソッドを定義したい場合は、ぐっとこらえて他の名称に変更して定義しましょう。

[Java][フリー教材] フリー教材 Webアプリ編 6,000ダウンロード突破しました

2007/2/27に公開をはじめましたフリー教材「Web アプリケーション開発基礎」ですが、おかげさまで、3/31までの集計でダウンロード数が「6,004件」(PDF4,523件、ODP1,481件)と なりま し た。いつも多くの方にご覧頂きまして、誠にありがとうございます。教材に対するご意見、ご感想、ご要望、間違いのご指摘などございましたら、弊社HPのお 問い合わせフォームや、こちらのブログへのコメントでも結構ですので、どうぞよろしくお願いいたします。

また、コンテンツにご興味をお持ちの方には、これらのコンテンツをベースとした定期コース「実践サーバサイドJava速習/Servlet編」「実践サーバサイドJava速習/JSP編」もございますので、どうぞご検討ください。

さらに、近日中に新しい教材の公開を予定し鋭意制作中ですので、どうぞお楽しみに!

フリー教材のページはこちらです。