- - PR -
Javaの稀な記述法
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-10-17 23:31
JAVAで時々、見かける記述法でどんな処理をしているか調べづらく
なかなかみつからないので知ってる方は教えてください。 以下がコードの一部で処理の意味がわからないところが■の部分です。 ■の部分はif分の変化形なのでしょうか? if(user != null){ loggedIn = user; } って意味ですか? でもuserは独自で定義した型なので,Boolean型のloggedInには格納できませんよね? 私が見慣れないだけで、基本的な記述かもしれませんが、教えてください。 あと、こういう記述方法で困ったときってどのように検索してますか? いいサイトとかあれば教えていただきたいです。 --------------------------------------------------------------- try { boolean loggedIn = false; // isSecurelyLoggedIn(); role = getRoleFromPage(); USER user = null; // if (role != Data.ROLE_USER) { OutDb out = new OutDb(logic.getDataSource()); String email = out.getDb(USER.I_USER_EMAIL, ""); if (logic.isLdapUser(email)) { user = doLoginLdap(email); loggedIn = user != null; if (!loggedIn) { addError("LDAP authentication failed"); } else { user = logic.login(role, true); ■loggedIn = user != null; if (!loggedIn) { addError("Could not log in with these credentials"); } } --------------------------------------------------------------- | ||||
|
投稿日時: 2007-10-17 23:42
表記としては見にくいっちゃ見にくいですね。
loggedIn = user != null; すなわち loggedIn = (user != null); でしょうね。 (user != null) は何を返すでしょか。userがnullならfalseを、nullでなければtrueを返しますね。 ということで、userがnullならloggedInにfalseを、nullでなければtrueを格納するんでしょうね。 loggedIn という変数名(と型)から考えても「ログインしているかどうか」をあらわすんでしょう。 if(user != null){ loggedIn = user; } ではないですね。 | ||||
|
投稿日時: 2007-10-17 23:59
べる氏の回答の通りなのですが、ポイントは演算子の優先順位。
例えば、算数の場合は+より×を先に計算しますよね? Javaの演算子の場合は以下のページなどで解説されています。 http://www.javaroad.jp/java_operator7.htm 括弧をつけない場合、代入の"="は優先順位が低い。 だから、比較演算子の"!="が先に計算されるわけです。 その結果が"="で代入されるというわけ。 順位が一緒なら左から順に演算されます。 | ||||
|
投稿日時: 2007-10-18 00:20
指定の箇所では、user != nullの結果をloggedInに代入しています。
if (user != null){ loggedIn = true; }else{ loggedIn = false; } と等価な意味になります。 | ||||
|
投稿日時: 2007-10-18 03:45
みなさんご協力ありがとうございました。
ソースを書くときは、少しは一般的な書き方をこころがけて ほしいですね。可読性も増しますし・・・。 よく、一行にまとめようとして一見わかりにくい記述をされると 困惑してしまうことがしばしばあります。 ベテランの方にそのような傾向があるような気がしますが・・・。 私個人の意見としては、初級のプログラマーでもわかりやすく、 一般的に書くほうがいいと思うのですが・・・。 それと同時に自分のキャパも増やさなければいけないのはもちろんですが・・・。 | ||||
|
投稿日時: 2007-10-18 04:31
boolean isEmpty(){
return null == user; } a.returnに式を直接書くことをよくします。 b.nullなどの書き換えられないものを、必ず比較演算子の左に書きます。 希でしょうか。わかりにくいでしょうか。 | ||||
|
投稿日時: 2007-10-18 06:43
別に特殊な文法は使ってないと思います…
ただ、こういうのは普通
私は、変数とかにいれずにifの中にuser != nullを直接書きます。 | ||||
|
投稿日時: 2007-10-18 08:55
私だったらですが...
(1) loggedIn = user != null; を使うことは、いとわない。if を使うほうが複雑になるという考えもできるから。演算子の種類にもよると思います。3項演算子だと悩むところですが。 (2) 自分で書く場合は優先順位を良く覚えていないので loggedIn = (user != null); と括弧を書く。人が括弧を書かくても、優先順位を良く知っている人なのだと思い、それは気にしない。 (3) null == user; とはしない。昔の C とは違い、コンパイラーが警告してくれるし、また、どうせ foo == user; と foo = user; を間違えればどうしようもないので null などの時だけを特別扱いにしてもしかたがないと思うから。 (4) 一時変数に入れるのは、代入と比較を切り分けることが出来るメリットがある反面、ソースコードを初めて読む人は変数の寿命を気にしないといけなくなる。すなわち、一時変数なのか、何行も後ろのほうでも使われる変数なのかがぱっと見で分からないので、そういう意味ではなまじ一時変数に入れると見づらくなる。 (ひとそれぞれにいろいろポリシーはあると思います。unibon はこういう人なんだな、という紹介だけです。 ![]() -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} |
1|2|3
次のページへ»