Assignmentoperator Expression Jsp

前のページへ1|2|3

式(Expression)

 「<%~%>」で表されるスクリプトレットの構文は、動的なコードを記述する場合に最も汎用的に採用できるスクリプトレット要素ですが、その分、記述がどうしても冗長になってしまうきらいがあります。

 特に、文字列を出力する場合に使用するout.print命令(あえてここでは「命令」といっておきます)は使用頻度も多く、いくつも連なるとコードの可読性を損ねることにもなりかねません。

 例えば、以下のような例を見てみましょう。


 断片的なスクリプトレットがHTMLのコードを分断しており、非常に見にくいコードです。もちろん、これを以下のように1つのスクリプトレットにまとめてしまうことも可能でしょう。


 しかし、これにしてもシングルクオーテーション(')とダブルクオーテーション(")の入り組んで複雑で一目ではなかなか分かりにくいコードです。見にくいということはそれだけでバグが混入しやすいコードであるともいえます。

 そこでJSPページでは、out.print命令を略記した<%=~%>という式構文(Expression)を認めています。上記の例を式構文で書き換えてみると、以下のようになります。


 いかがですか? 記述が極めて簡略化されたのがお分かりになるでしょう。ただし、スクリプトレットの場合と異なり、末尾にセミコロン(;)を付加した場合にはエラーとなりますので、注意してください。

 式構文では、単純な変数・定数だけでなく、値を返す命令(メソッド)やちょっとした演算子を記述することもできます。例えば、以下のようにです。


 上記2番目の式に含まれる「?」は三項演算子と呼ばれるもので「評価式 ? 式1 : 式2」の形式で記述します。評価式がtrueである場合には式1を、falseである場合には式2を出力します。簡単な条件分岐を短く記述することができますので、この式構文とあわせて用いることでコード全体を簡略化することも可能です。

 このように、式構文は非常に重要な要素の1つですが(JSPページにおいて簡潔であるということは、特に重要なことです)、あくまでデータの出力を簡略化する省略形であることを忘れないでください。ですから、例えば、


のように、2つ以上の命令を式構文内に記述することはできませんし、


のように複数の値を併記して出力することもできません。もしもこのようなことをしたい場合には、


のように「+」演算子で文字列連結を行うようにしてください。

 なお、以上の「宣言部」「スクリプトレット」「式(Expression)」を総称して、「スクリプティング要素」と呼ぶ場合もあります。

アクションタグ

 アクションタグは、JSPページ内でよく使用する定型的な処理をHTML同様のタグ形式で記述可能とすることで、目的とした記述方法です。 一般的に、アクションタグは以下のような構文で記述することができます。


または、


 タグの記述はXMLの記法にのっとる必要がある点に注意してください。大きくは以下がポイントです。

  • 大文字小文字が区別される
  • 終了タグは省略できない。空要素の場合には開始タグを「~/>」で閉じる
  • タグ同士は必ず入れ子(ネスト)構造になっていなければならない
  • 属性値は必ずダブルクオーテーションで囲む

 ただし、あくまでこのような規則に沿わなければならないのは、アクションタグの記述部分のみです。通常のHTMLタグについては、この限りではありません。

 JSP1.2で用意されている主なアクションタグには以下のようなものがあります。

アクションタグ概要
<jsp:include>指定されたページをインクルード
<jsp:forward>指定されたページにリダイレクト
<jsp:getProperty>JavaBeansのプロパティを取得
<jsp:setProperty>JavaBeansのプロパティに指定値(あるいはフォームの値)を設定
<jsp:useBean>JavaBeansの使用を定義

 このうち、<jsp:getProperty>、<jsp:setProperty>、<jsp:useBean>要素については、本連載の後半で解説するJavaBeansのパートで説明することにします。

 ここでは、残る2つのアクションタグについて、説明しておくことにしましょう。

<jsp:include>

 外部ファイルをインクルードします。構文は以下のとおりです。


 ただし、JSP1.1環境においてはflush属性はtrueのみ指定可能です。類似した機能として、前述の@includeディレクティブがあり、


はほぼ同意です。ただし、<jsp:include>要素は実行時に常にインクルードファイルの変更が確認されるのに対し、@includeディレクティブはオリジナルファイル(呼び出し元)が変更されない限り、インクルードファイルの変更は認識されません。つまり、前者はインクルードファイルを動的に処理しますが、後者はあくまで静的にしか処理していないということを意味します。

 この違いを認識していないと、意外なところで「プログラムの変更が認識されない」と迷う原因にもなりますので、注意してください。

<jsp:forward>

 現在のページをほかのJSPページやサーブレットに転送します。構文は以下のとおりです。


 なお、<jsp:forward><jsp:include>要素には、<jsp:param>要素を使用して、パラメータを渡すこともできます。例えば、以下のようにです。


 <jsp:param>要素を使用して渡されたパラメータ要素は、そのほかのフォーム要素同様、sample.jspでも使用したrequest.getParameter命令(メソッド)を使用して取得が可能です。

 以上が主要な標準アクションタグの機能ですが、JSP1.1からは、これら標準のアクションタグに加え、ユーザーが独自に定義したカスタムタグも使用できるようになりました。カスタムタグを織り交ぜることで、標準のアクションタグには含まれなかった独自のビジネスロジックをもタグ化し、究極的にはノンスクリプトのJSPページを記述することも可能でしょう(事実、JSP2.0では設定ファイルでスクリプトレットの使用を禁止することも可能になっています)。カスタムタグについては、本連載の後半で紹介したいと思います。

コメント

  文字どおりのコメントです。コメント部分は、コード解析時に無視されます。コメントというと、一見、実際のページの動きとは関係ないものであるために、どうしても軽視されがちですが、特に中長期的な運用を前提としたシステムでは必要不可欠な要素でもあります。

 そもそも他人の書いたコードを後から確認するというのは、苦痛であることがほとんどですが、コードに関する概要的な説明をコメントとして残しておくことで、その苦痛をかなり軽減することができます。

 もちろん、コードの1行1行にコメントを付加する必要はありませんが(というよりも、それではコメントの意味をなしません。それはコードをただ単に日本語に置き換えただけで、コードを1行1行確認する苦痛はなんら軽減されないのです!)、変数の意味や大きなブロック単位の概要、更新の履歴を記述しておくことで、コードの大枠を把握するのが容易となります。

 JSPページ内では大きく4種類のコメント構文を使用することが可能です。

<%--~--%>

 静的なコンテンツ部分に記述します。「<%--~--%>」で囲まれたコンテンツは、コンテナによる解析時に切り捨てられ、クライアント側には送信されません。

 宣言部やスクリプトレット内で使用することはできませんが、これらスクリプティング要素全体をまとめてコメントアウトすることができます。この性質を利用して、デバッグ時などにひとかたまりのロジックをまとめて無効化する際にも使えます。


/*~*/

 スクリプトレット、宣言部内で使用することができる、Javaの一般的なコメント構文です。「/*」から「*/」で閉じられるまでの複数行をコメントアウトします。

 静的なHTMLコード内では使用することができません。また、「/*~*/」で囲まれたコメントは「<%--~--%>」同様にサーバサイドで切り捨てられますので、クライアント側には送信されません。


//

 「/*~*/」同様、スクリプトレット、宣言部内で使用することができる、Javaの一般的なコメント構文です。//から現在行の末尾までの単一行をコメントアウトします。静的なHTMLコード内では使用することができません。また、「//」で指定されたコメントは「<%--~--%>」同様にサーバサイドで切り捨てられますので、クライアント側には送信されません。


<!--~-->

 HTMLの一般的なコメント構文です。静的なHTMLコードの中に記述することができます。クライアント側で処理されるコメント構文ですので、ブラウザ上には表示されませんが、[ソースの表示]でコードを表示させることで内容を参照することができます。デバッグ時に各ブロック単位の出力を確認する場合などにも利用可能です。


 いかがでしたか? これで、JSPページの基本的な構成は一通りご理解いただけたことと思います。もちろん、これだけで実践的なアプリケーションが即座に組めるようになるというものではありませんが、JSPを構成する大きな骨格を知ることで、今後の学習の一助となれば幸いです。

 次回はJSPページのメインコード部分であるスクリプトレット内で使える「暗黙オブジェクト」の主要な機能について取り上げてみることにしましょう。


前のページへ1|2|3

Copyright © ITmedia, Inc. All Rights Reserved.

One Point

式構文は「out.print」命令の省略形です。ちょっとしたデータ出力は、この式構文を利用することで、コード全体を簡略化し、JSPページの可読性を高めることができます。


One Point

アクションタグはタグ形式で記述することのできる命令です。JSPページではアクションタグやカスタムタグを用いることで、生のJavaコードの記述を排除することができます。


One Point

JSPのコメント構文には「<%--~--%>」「/*~*/」「//」「<!--~-->」という4つの種類があります。これらは用途によって使い分けます。


An assignment operator assigns a value to its left operand based on the value of its right operand.

The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.

Overview

The basic assignment operator is equal (), which assigns the value of its right operand to its left operand. That is, assigns the value of to . The other assignment operators are usually shorthand for standard operations, as shown in the following definitions and examples.

Assignment

Simple assignment operator which assigns a value to a variable. The assignment operation evaluates to the assigned value. Chaining the assignment operator is possible in order to assign a single value to multiple variables. See the example.

Syntax

Operator: x = y

Examples

// Assuming the following variables // x = 5 // y = 10 // z = 25 x = y // x is 10 x = y = z // x, y and z are all 25

Addition assignment

The addition assignment operator adds the value of the right operand to a variable and assigns the result to the variable. The types of the two operands determine the behavior of the addition assignment operator. Addition or concatenation is possible. See the addition operator for more details.

Syntax

Operator: x += y Meaning: x = x + y

Examples

// Assuming the following variables // foo = 'foo' // bar = 5 // baz = true // Number + Number -> addition bar += 2 // 7 // Boolean + Number -> addition baz += 1 // 2 // Boolean + Boolean -> addition baz += false // 1 // Number + String -> concatenation bar += 'foo' // "5foo" // String + Boolean -> concatenation foo += false // "foofalse" // String + String -> concatenation foo += 'bar' // "foobar"

Subtraction assignment

The subtraction assignment operator subtracts the value of the right operand from a variable and assigns the result to the variable. See the subtraction operator for more details.

Syntax

Operator: x -= y Meaning: x = x - y

Examples

// Assuming the following variable // bar = 5 bar -= 2 // 3 bar -= 'foo' // NaN

Multiplication assignment

The multiplication assignment operator multiplies a variable by the value of the right operand and assigns the result to the variable. See the multiplication operator for more details.

Syntax

Operator: x *= y Meaning: x = x * y

Examples

// Assuming the following variable // bar = 5 bar *= 2 // 10 bar *= 'foo' // NaN

Division assignment

The division assignment operator divides a variable by the value of the right operand and assigns the result to the variable. See the division operator for more details.

Syntax

Operator: x /= y Meaning: x = x / y

Examples

// Assuming the following variable // bar = 5 bar /= 2 // 2.5 bar /= 'foo' // NaN bar /= 0 // Infinity

Remainder assignment

The remainder assignment operator divides a variable by the value of the right operand and assigns the remainder to the variable. See the remainder operator for more details.

Syntax

Operator: x %= y Meaning: x = x % y

Examples

// Assuming the following variable // bar = 5 bar %= 2 // 1 bar %= 'foo' // NaN bar %= 0 // NaN

Exponentiation assignment

This is an experimental technology, part of the ECMAScript 2016 (ES7) proposal.
Because this technology's specification has not stabilized, check the compatibility table for usage in various browsers. Also note that the syntax and behavior of an experimental technology is subject to change in future version of browsers as the spec changes.

The exponentiation assignment operator evaluates to the result of raising first operand to the power second operand. See the exponentiation operator for more details.

Syntax

Operator: x **= y Meaning: x = x ** y

Examples

// Assuming the following variable // bar = 5 bar **= 2 // 25 bar **= 'foo' // NaN

Left shift assignment

The left shift assignment operator moves the specified amount of bits to the left and assigns the result to the variable. See the left shift operator for more details.

Syntax

Operator: x <<= y Meaning: x = x << y

Examples

var bar = 5; // (00000000000000000000000000000101) bar <<= 2; // 20 (00000000000000000000000000010100)

Right shift assignment

The right shift assignment operator moves the specified amount of bits to the right and assigns the result to the variable. See the right shift operator for more details.

Syntax

Operator: x >>= y Meaning: x = x >> y

Examples

var bar = 5; // (00000000000000000000000000000101) bar >>= 2; // 1 (00000000000000000000000000000001) var bar -5; // (-00000000000000000000000000000101) bar >>= 2; // -2 (-00000000000000000000000000000010)

Unsigned right shift assignment

The unsigned right shift assignment operator moves the specified amount of bits to the right and assigns the result to the variable. See the unsigned right shift operator for more details.

Syntax

Operator: x >>>= y Meaning: x = x >>> y

Examples

var bar = 5; // (00000000000000000000000000000101) bar >>>= 2; // 1 (00000000000000000000000000000001) var bar = -5; // (-00000000000000000000000000000101) bar >>>= 2; // 1073741822 (00111111111111111111111111111110)

Bitwise AND assignment

The bitwise AND assignment operator uses the binary representation of both operands, does a bitwise AND operation on them and assigns the result to the variable. See the bitwise AND operator for more details.

Syntax

Operator: x &= y Meaning: x = x & y

Example

var bar = 5; // 5: 00000000000000000000000000000101 // 2: 00000000000000000000000000000010 bar &= 2; // 0

Bitwise XOR assignment

The bitwise XOR assignment operator uses the binary representation of both operands, does a bitwise XOR operation on them and assigns the result to the variable. See the bitwise XOR operator for more details.

Syntax

Operator: x ^= y Meaning: x = x ^ y

Example

var bar = 5; bar ^= 2; // 7 // 5: 00000000000000000000000000000101 // 2: 00000000000000000000000000000010 // ----------------------------------- // 7: 00000000000000000000000000000111

Bitwise OR assignment

The bitwise OR assignment operator uses the binary representation of both operands, does a bitwise OR operation on them and assigns the result to the variable. See the bitwise OR operator for more details.

Syntax

Operator: x |= y Meaning: x = x | y

Example

var bar = 5; bar |= 2; // 7 // 5: 00000000000000000000000000000101 // 2: 00000000000000000000000000000010 // ----------------------------------- // 7: 00000000000000000000000000000111

Examples

Left operand with another assignment operator

In unusual situations, the assignment operator (e.g.) is not identical to the meaning expression (here ). When the left operand of an assignment operator itself contains an assignment operator, the left operand is evaluated only once. For example:

a[i++] += 5 // i is evaluated only once a[i++] = a[i++] + 5 // i is evaluated twice

Specifications

Browser compatibility

The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidiOS SafariSamsung InternetNode.js
Addition assignment ()Full support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support Yes ? Full support Yes
Bitwise AND assignment ()Full support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support Yes ? Full support Yes
Bitwise OR assignment ()Full support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support Yes ? Full support Yes
Bitwise XOR assignment ()Full support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support Yes ? Full support Yes
Division assignment ()Full support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support Yes ? Full support Yes
Exponentiation assignment ()Full support 52 ? Full support 52No support NoFull support Yes ? Full support 51Full support 52 ? Full support 52Full support Yes ? ? Full support Yes
Left shift assignment ()Full support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support Yes ? Full support Yes
Multiplication assignment ()Full support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support Yes ? Full support Yes
Remainder assignment ()Full support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support Yes ? Full support Yes
Right shift assignment ()Full support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support Yes ? Full support Yes
Assignment ()Full support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support Yes ? Full support Yes
Subtraction assignment ()Full support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support Yes ? Full support Yes
Unsigned right shift assignment ()Full support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support YesFull support Yes ? Full support Yes

Legend

Full support
Full support
No support
No support
Compatibility unknown
Compatibility unknown

See also

Document Tags and Contributors

 Contributors to this page:wbamberg, stephaniehobson, fscholz, jameshkramer, nmve, kdex, torazaburo, samuele-artuso, io-ma, Sebastianz, JDurston, phylasnier, Havvy, Delapouite, Meghraj, Sheppy, trevorh, ethertank, Potappo, Mgjbot, Marcoos, Dria

 Last updated by:wbamberg,

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *