
【改訂版】Eclipseではじめるプログラミング(3)
プログラミングの醍醐味! Javaで“条件式”を理解する
株式会社ガリレオ
小山博史
2009/2/25
これからプログラミングを学習したい方、Javaは難しそうでとっつきづらいという方のためのJavaプログラミング超入門連載です。最新のEclipse 3.4とJava 6を使い大幅に情報量を増やした、連載「Eclipseではじめるプログラミング」の改訂版となります
プログラミングの醍醐味「条件分岐処理」とは?
インターネット上のショッピングWebサイトなどで、「商品を5000円以上購入すると、送料が無料になる」といったサービスをよく見掛けませんか? この場合、お客さまへ請求する金額の総額は「商品を5000円以上購入するかしないか」によって変わります。このように、ある条件によって計算手順が変わるような処理のことを「条件分岐処理」といいます。
今回はこういったプログラムを作成するのに必要な、if文とswitch文などについて解説します。 EclipseでJavaプログラミングを始める準備がまだの方は、連載第1回の「Eclipse 3.4で超簡単Javaプログラミング基礎入門」で準備しておいてください。
■ 数学の授業で習った「条件式」を覚えていますか?
前述の例では、「商品を5000円以上購入するかしないか」によって処理が変わります。この処理が変わる判断基準となるものを「条件」といいます。もう少し詳しくいうと、「お客さまは商品を5000円以上購入する」という部分が“条件”になります。数学的には、この条件は“式”(条件式)として表現できます。
例えば、お客さまが購入する商品の総額を「 x 」とすると、この条件は「x ≧ 5000」という式で表すことができます。この条件式に対して、実際に「お客さまが商品を6000円分購入している」場合は、条件式のxに6000を代入すると、「6000 ≧ 5000」となるので、条件が成り立ちます。このとき、この条件式の評価値は“真”(true)となります。
逆に「お客さまが商品を3500円分購入している」場合は、この条件式は「3500 ≧ 5000」となるので、条件が成り立ちません。このとき、この条件式の評価値は“偽”(false)となります。
■ Javaにおける条件式
こういった条件式やその評価結果をプログラムで扱えるようにするために、Javaでは論理型(boolean)や、評価結果が論理値となる演算子が用意されています。また、真を表すtrueと偽を表すfalseも論理値リテラルとして用意されています。論理型や演算子、リテラルについて復習したい読者は、前回の記事「Javaで一から理解するプログラムの変数と演算子」を参照してください。
さらにJavaでは、boolean型と似たような型で、Booleanクラスというクラスがあります。boolean型の値とBooleanクラスは相互に簡単に変換ができます。この型を使って条件式を指定することもできます。
プログラムにおいて処理の流れを制御するには、条件をどのように指定するかということが重要になってきます。条件は、評価結果が論理値となる条件式で表現するということをここで理解しておきましょう。
条件によって処理の流れを変えるには、if文を使います。if文には、if-then文とif-then-else文の2種類があります。順番に見ていきましょう。
最も単純な分岐「if-then文」
「ある条件が成り立つときだけある処理をしたい」という単純な条件分岐の場合は、if-then文を使います。if-then文は次のように記述します。
if (条件式) 文 |
直感的に処理の流れを理解できるように図で表してみると、図1のようになります。図では、前処理の後に条件式の判定をして、条件式が“真”の場合は“処理1”を実行してから“処理2”を実行しますが、条件式が“偽”の場合は“処理1”を飛ばして処理2を実行するという処理の流れを示しています。このうち赤線で囲んだ部分がif-then文と対応することになります。
![]() |
| 図1 if-then文 |
参考 「処理の流れも表せるUMLとは?」 |
| 本連載では処理の流れを表すのに、UML(Unified Modeling Language)という表記法のアクティビティ図(フローチャート)を使っています。UMLを使うことによりオブジェクト指向プログラムの設計を図で表せるので、プログラムを直感的に理解しやすくなります。 UMLの詳細は本連載の範疇(はんちゅう)ではないので説明しませんが、興味のある読者は下記記事などを参考にしてみてください。 |
ここで、処理を複数の文を使って記述したい場合があります。この場合はブロックを使って、複数の文を1つのブロック文にします。複数の文を中括弧({ })で囲むと、ブロックとなります。前述のif-then文をブロック文で書き直すと次のようになります。ここでは1つしか文がありませんが、中括弧({ })内には複数の文を記述できます。
if (条件式) { |
if-then文をJavaで書いてみよう!
それでは、単純なサンプルプログラムを動作させてみましょう。連載第1回と同様にEclipseを起動し、パースペクティブを[Java]に切り替えておいてください。パースペクティブが[Java]になっていないときは、メニューの[ウィンドウ]→「パースペクティブを開く」→[Java]を指定すれば、切り替えることができます。今回は次のような手順で新規にクラスを作成することにします。
- [パッケージ・エクスプローラー]の[Sample]をマウス右ボタンでクリック
- 表示されるポップアップメニューで[新規]→[クラス]を指定
- 表示される[新規Javaクラス]ダイアログで、[名前]にSample30と入力
- 同じ[新規Javaクラス]ダイアログで、[どのメソッド・スタブを作成しますか?]のところにある[public static void main(String[] args)]をチェック
- [終了]ボタンをクリック
コラム 「Eclipseをより良くするためのUsage Data Collectorとは?」 |
| Eclipseを起動すると、[Usage Data Upload]というダイアログボックスが表示されることがあります。これは、Eclipse 3.4に「UDC(Usage Data Collector)」と呼ばれる機能が含まれているからです。直訳すると、「利用データ収集機能」となります。 なぜこのような機能が搭載されているかというと、Eclipse 3.4利用者がどのようにEclipseを使っているのかを集めることにより、Eclipseの開発をより良くできるからです。「Eclipseの開発へ協力するために、この機能を有効にする」というのは、Eclipseプロジェクトへ貢献する立派な方法の1つです。 デフォルトでは無効となっているため、ダイアログを表示して、ユーザーにこの機能を有効にするかどうか問い合わせているので、協力できる方は、[Upload now]などを選択して利用データを提供してはいかがでしょうか。 |
出来上がったSample30クラスにコードを追加して、次のリスト1を作成してください。
| リスト1 |
public class Sample30 { |
最初のif文では条件式がtrueなので、「System.out.println(true);」が実行されます。次のif文では条件式がfalseなので、「System.out.println(false);」は実行されません。次に、boolean型の変数bを用意してtrueを代入しています。3つ目のif文では、この変数を条件式として使っています。bの値がtureなので、この場合はブロック内の3つの処理が実行されます。これらのことから、実行結果は次のようになります。
| リスト1の実行結果 |
true |
■ 条件を変えてみると……
次に、リスト1を少し変更して、if文の条件式でtrueをfalseにし、falseをtrueとし、変数bの値をfalseに変更して、どの処理が実行されるかを確認してみましょう。
| リスト2 |
public class Sample30 { |
すると、実行結果は次のようになります。最初のif文では条件式がfalseなので、「System.out.println(true);」が実行されません。次のif文では条件式がtrueなので、「System.out.println(false);」が実行されます。3つ目のif文では、変数bがfalseであるため、ブロック内の処理が実行されません。
| リスト2の実行結果 |
false |
以上で、条件が成立するときだけ処理を実行するには、if-then文を使えばよいことが分かりました。
次ページでは、複雑な条件分岐もできる「if-then-else文」や関係演算子と等値演算子について説明します。
| Index | ||||||||
|
||||||||
【改訂版】Eclipseではじめるプログラミング バックナンバー 連載インデックスへ»
- 第1回 Eclipse 3.4で超簡単Javaプログラミング基礎入門
- 第2回 Javaで一から理解するプログラムの変数と演算子
- 第3回 プログラミングの醍醐味! Javaで“条件式”を理解する
- 第4回 プログラミングの真骨頂! Javaで“反復処理”を覚える
- 第5回 データ集合を扱うのに便利なJavaの配列と拡張for文
- 第6回 複雑なデータを表現できるクラスやフィールドって?
- 第7回 クラスの振る舞いを表すJavaの“メソッド”とは?
- 第8回 Javaの参照型を文字列操作で理解して文法を総復習
- 第9回 プログラムを「変更」しやすくする“インターフェイス”
- 第10回 Javaの実案件に必須のパッケージとインポートを知る
- 第11回 「static」でクラス共有の変数・メソッドを使いこなせ!
- 第12回 継承やオーバーライドで簡単にクラスを“拡張”しよう
- 第13回 “コンストラクタ”と初期化、本当に理解できてる?
- 第14回 再利用性の高いクラス作成に重要な“アクセス制御”
- 第15回 Javaは「抽象クラス」で実装を上手に再利用できる
- 第16回 “ネスト”した型で始める軽量Javaプログラミング!?
- 第17回 あなたの知らない、4つのマニアックなJava文法
- 第18回 強く型付けされているJavaの理解に必修の“型変換”
- 第19回 キュー構造をJavaで実装してジェネリック型を理解する
- 第20回 拡張for文の真の実力を知り、反復処理を使いこなせ
- 第21回 7ステップで理解するJavaでの列挙型/enum使用法
- 第22回 いまさら聞けない「Javadoc」と「アノテーション」入門
- 第23回 プログラマの宿命! 例外とエラー処理を理解する
- 第24回 Javaの例外処理で知らないと損する7つのテクニック
| Java Solution全記事一覧 |
TechTargetジャパン
- EclipseでScalaプログラミングを始めるための基礎 (2012/2/10)
概要や5つの特徴を紹介し、開発環境を構築して対話型実行環境「REPL」やEclipse上でHello Worldを実行します - 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



