hsmwhsmw

初心者入門Android Command Line Toolsのダウンロードとインストール | Androidプログラミング入門 | JavaDrive

eyecatch

Android Command Line Toolsのダウンロードとインストールのダウンロード方法およびインストール方法について解説します。

目次

  1. Android Command Line Toolsをダウンロードする
  2. ファイルを展開して配置する

Android Command Line Toolsをダウンロードする

Android SDK Toolsのダウンロードは次のURLから開始します。

https://developer.android.com/

p6-1

画面上部の「Android Studio」をクリックして下さい。

p6-2

Android Studioのダウンロード用ページが表示されます。市のほうへスクロールしていくと「Command line tools only」というブロックがあります。

p6-3

p6-4

OS毎のダウンロード用のリンクが表示されています。今回はWindows10(64bit)環境で利用しますので、Windowsの右側に表示されている「sdk-tools-windows-4333796.zip」をクリックします。

p6-5

利用規約」が表示されます。よく読んで頂き、同意できる場合には画面左下の「上記の利用規約を読み、同意します。」にチェックをして下さい。その後で「ANDROID COMMAND LINE TOOLS FOR WINDOWS ダウンロード」をクリックして下さい。

p6-6

ダウンロードが開始されます。任意の場所に保存しておいてください。ダウンロードはこれで終了です。

ファイルを展開して配置する

ダウンロードしたファイルは圧縮ファイルです。展開すると「tools」というフォルダが含まれていますので、今回は「D:¥pg¥android¥」というディレクトリの中に展開したファイルを配置しました。

p6-7

Android Command Line Toolsのインストールはこれで完了です。

初心者入門for文 - 繰り返し - Ruby入門

「while」文や「until」文は指定した条件式によって繰り返しを継続するかどうかを判断していましたが、「for」文ではあらかじめ指定したオブジェクトから順に値を取り出しながら繰り返しを行います。

「for」文の書式は次のようになっています。

for 変数 in オブジェクト do
  実行する処理1
  実行する処理2
end

※「do」は省略可能です。

「for」文では繰り返しが1回行われるたびにオブジェクトに対して「each」メソッドが実行し取得した要素などを変数に代入します。よって「for」文で指定できるオブジェクトは「each」メソッドを持ったオブジェクトでなければなりません。例えば配列やハッシュ、範囲オブジェクトなどが該当します。

※配列やハッシュは別のページで詳しく見ていきます。範囲オブジェクトは次のページの「範囲オブジェクト」を参照して下さい。複数の要素を持つオブジェクトと考えて下さい。

例えば次のように使います。

for num in 1..3 do
  print("num = ", num, "¥n")
end
print("End")

ここで「1..3」は範囲オブジェクトと呼ばれるものです。「for」文の中で指定されると最初の値から最後の値までを順に要素として取り出します。

実際の実行される流れは次のようになります。

 1) 範囲オブジェクトから「1」を取り出し変数「num」に代入
 2) 変数「num」の値を出力
 3) 「end」まで達したので再度「for」文の先頭へ移動
 4) 範囲オブジェクトから「2」を取り出し変数「num」に代入
 5) 変数「num」の値を出力
 6) 「end」まで達したので再度「for」文の先頭へ移動
 7) 範囲オブジェクトから「3」を取り出し変数「num」に代入
 8) 変数「num」の値を出力
 9) 「for」文が終了
10) 「End」を出力

このように「for」文ではあらかじめ指定したオブジェクトから要素を全て取り出すと繰り返しは終了します。その為、「while」文や「until」文のように条件式を変化させるような処理は必要ありません。

サンプルプログラム

では簡単なプログラムで確認して見ます。

test3-1.rb

#! ruby -Ku
require "kconv"

print(Kconv.tosjis("繰り返し開始¥n"))
for num in 1..3 do
  print("num = ", num, "¥n")
end
print(Kconv.tosjis("繰り返し終了¥n"))

上記のプログラムを「test3-1.rb」として保存します。文字コードUTF-8です。そして下記のように実行して下さい。

for文

初心者入門オブジェクトが同一かどうかの比較する(== 演算子と is 演算子の違い) | Python入門

eyecatch

数値や文字列、リストやタプルなどのオブジェクトが同じかどうかを調べるには is 演算子を使用します。ここでは is 演算子を使ってオブジェクトが同じかどうか調べる方法と、オブジェクトの値が同じかどうかを調べる == 演算子との違いを解説します。

目次

  1. is 演算子の使い方と == 演算子との違い
  2. mutableオブジェクトとimmutableオブジェクトでの is 演算子の結果の違い
  3. id関数を使ってオブジェクト固有のidを取得する

is 演算子の使い方と == 演算子との違い

Python では数値や文字列、リストやタプルはすべてオブジェクトです。オブジェクトが同じかどうかを調べるには is 演算子を使用します。

x is y       x と y が同じオブジェクトの場合は True
x not is y   x と y が別のオブジェクトの場合は True

同じような演算子に == 演算子がありますが、 == 演算子はオブジェクトの値が同じかどうかを判定する場合に使用します。異なるオブジェクトであっても値が同じであれば True となります。それに対して is 演算子は値が同じであってもオブジェクトが異なる場合は False となります。

例えば次の例をみてください。 2 つのリストを作成し、 == 演算子と is 演算子を使って調べてみます。

>>> list1 = [1, 2, 3]
>>> list2 = [1, 2, 3]
>>> list1 == list2
True
>>> list1 is list2
False
>>>

最初に == 演算子で 2 つのリストを判定してみると True となります。リストの場合は各要素が同じデータ型で同じ値を持っている場合は True となるためです。それに対して is 演算子では False となります。値は同じでもオブジェクトはそれぞれ別々だからです。

では次の例をみてください。最初のリストを作成したあとで、 2 つ目のリストには最初のリストを代入しています。

>>> list1 = [1, 2, 3]
>>> list2 = list1
>>> list1 == list2
True
>>> list1 is list2
True
>>>

この場合 list2 と list1 は同じリストのオブジェクトを指し示しています。その為、値を比較する == が True を返すだけでなく、オブジェクトが同じかどうかを判定する is 演算子も True を返します。

このように == 演算子ではオブジェクトの値が同じかどうかを判定するのに対して is 演算子ではオブジェクトが同じかどうかを判定します。

mutableオブジェクトとimmutableオブジェクトでの is 演算子の結果の違い

先ほどはリストのオブジェクトを使って試してみましたが、今度は文字列で同じように試してみます。

>>> str1 = "Apple"
>>> str2 = "Apple"
>>> str1 == str2
True
>>> str1 is str2
True
>>>

文字列のオブジェクトをそれぞれ作成しているにも関わらず == 演算子だけではなく is 演算子も True を返しています。

オブジェクトには一度作成したあとで変更することができるもの( mutable といいます)と、一度作成すると変更できないもの( immutable )があります。数値や文字列、タプルは変更できないオブジェクトです。リストや辞書は変更できるオブジェクトです。

なぜリストは同じ値を持つオブジェクトを 2 つ作った時にそれぞれオブジェクトが異なるのに文字列では同じ値を持つオブジェクトを 2 つ作った時に同じオブジェクトになったのかというと、変更できるオブジェクトの場合は値が同じでも必ずオブジェクト毎に異なるオブジェクトとなりますが、変更できないオブジェクトの場合は同じデータ型で同じ値のオブジェクトが既に存在した場合は新しいオブジェクトを作成せずに既にあるオブジェクトを参照する場合があるためです。

注意が必要なのは immutable のオブジェクトは必ず別々のオブジェクトが作成されるのに対して、 mutable のオブジェクトは同じ値のオブジェクトを作成した時に同じオブジェクトを参照する場合もあるししない場合もあるということです。必ず同じオブジェクトになるという前提でコードを記述するのはお勧めできません。

id関数を使ってオブジェクト固有のidを取得する

組み込み関数で用意されている id 関数を使うと引数に指定したオブジェクトを表す固有の番号を取得することができます。例えば同じ値を持つリストを 2 つ作成し、それぞれ id 関数を使ってオブジェクトの id を取得してみます。

>>> list1 = [1, 2, 3]
>>> list2 = [1, 2, 3]
>>> id(list1)
2621838287560
>>> id(list2)
2621838778312
>>>

このようにリストの場合は同じ値を持つオブジェクトを作成しても、それぞれ別々のオブジェクトが割り当てられていることが分かります。

今度はリストを作成したあとで、別のリストに代入してみます。

>>> list1 = [1, 2, 3]
>>> list2 = list1
>>> id(list1)
2621839912264
>>> id(list2)
2621839912264
>>>

今度は 2 つのリストが同じ id となりました。 2 つのリストは同じオブジェクトを参照していることが確認できます。

次に同じ値を持つ 2 つの数値を作成して確認してみます。

>>> num1 = 10
>>> num2 = 10
>>> id(num1)
140732009243568
>>> id(num2)
140732009243568
>>>

別々に作成したオブジェクトですが、オブジェクトの id が同じであり同じオブジェクトを参照していることが確認できます。このように数値や文字列などの immutable オブジェクトの場合は既に同じ値を持つオブジェクトが存在した場合は同じオブジェクトを参照する場合があることが id 関数を使っても確認することができました。

-- --

is 演算子を使ってオブジェクトが同じかどうか調べる方法と、オブジェクトの値が同じかどうかを調べる == 演算子との違いを解説しました。

初心者入門要素を記述する | XML入門

XML文書では1つ1つのデータを要素と呼ばれるものを使って記述していきます。ここでは要素の記述方法について解説します。

1.XMLにおける要素とは
2.要素名のルール
3.要素の内容として別の要素を記述する
4.空要素とは
5.ルート要素を記述する

XMLにおける要素とは

要素の構文は次の通りです。

<要素名>内容</要素名>

<要素名>を開始タグ、</要素名>を終了タグと呼びます。開始タグと終了タグの間に要素の「内容」をテキストで記述します(他の子要素を含むこともできます)。開始タグから終了タグまでをまとめて要素と呼びます。

p3-1

要素名は自由に決められますが、どんなデータを扱っているのか分かる名前が望ましいです。

前のページで記述したXML文書のサンプルを見て下さい。

<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>
    <name>バナナ</name>
    <color>黄色</color>
  </food>

  <food>
    <name>リンゴ</name>
    <color>赤</color>
  </food>
</foods>

このXML文書には「<name>バナナ</name>」や「<color>黄色</color>」などの要素が含まれています。「<name>バナナ</name>」は「name」に関するデータで値は「バナナ」です。また「<color>黄色</color>」は「color」に関するデータで値は「黄色」です。

要素名のルール

要素名にはこれまでのサンプルのように半角英数の他に日本語を使うこともできます。次のサンプルは要素名に日本語を使ったものです。

sample3_1.xml

<?xml version="1.0" encoding="UTF-8" ?>
<食料品>
  <食べ物>
    <名前>バナナ</名前>
    <色>黄色</色>
  </food>

  <food>
    <名前>リンゴ</名前>
    <色>赤</色>
  </食べ物>
</食料品>

サンプルをブラウザで表示してみると次のように表示されます。

p3-2

いずれにしても要素名にはどんなデータについての要素なのかが分かるような要素名をつけて下さい。なお要素名に数字を含むことはできますが、数字から始まる名前を付けることはできません。

要素の内容として別の要素を記述する

要素の内容には別の要素を含むことができます。先ほどのサンプルをもう一度見て下さい。

<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>
    <name>バナナ</name>
    <color>黄色</color>
  </food>

  <food>
    <name>リンゴ</name>
    <color>赤</color>
  </food>
</foods>

「food」要素の開始タグ「<food>」と終了タグ「</food>」の間には「<name>バナナ</name>」と「<color>黄色</color>」という2つの別の要素が記述されています。

これは「food」に関するデータとして「name」と「color」に関するデータがあり、それぞれの値は「name」が「バナナ」で「color」が「黄色」、という意味になります。この場合の「food」は「name」と「color」の親要素、「name」と「color」が「food」の子要素となります。要素の内容についてさらに別の要素を使って定義することで、XML文書のデータをより処理しやすくなります。

例えば次のXML文書と比較してみて下さい。内容的には同じですが、データを利用する場合にはより細かく要素として取り出してあったほうが便利です。

<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>黄色のバナナ</food>
  <food>赤いリンゴ</food>
</foods>

さらに子要素を親要素とした子要素を含めることもできます。このようにXML文書は階層的な構造になります。

空要素とは

要素は開始タグと終了タグの間に内容を記述するものですが、内容が無い要素も存在します。このような要素を空要素といいます。空要素とは例えばHTML文書でいうと改行を表す<br>要素や画像を表す<img>要素のようなものです。要素の内容としてテキストで記述するようなものはありませんが、画像のようなデータが含まれている場合に空要素を使います。(画像の場合はテキストはありませんが、別のページで解説する「属性」を使って画像ファイルの場所などを記述します)。

空要素の場合は内容がありませんので、要素は次のように記述されます。

<要素名></要素名>

空要素の場合は開始タグと終了タグをまとめて次のように記述することもできます。

<要素名/>

スラッシュ(/)の前にスペースを1つ入れることもできます。

<要素名 />

ルート要素を記述する

XML文書には複数の要素を含まれます。また要素の中に別の要素を含めることもできます。ここでXML文書を記述する上でもう一つ重大なルールがあります。それはXML文書全体は(XML宣言をのぞいて)1つの要素の中に記述しなければいけないということです。

先ほどのXML文書のサンプルをもう一度見て下さい。

<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>
    <name>バナナ</name>
    <color>黄色</color>
  </food>

  <food>
    <name>リンゴ</name>
    <color>赤</color>
  </food>
</foods>

一番外側に「foods」要素があり、この要素の内容として他の全ての要素が記述されています。この一番外側にある要素をルート要素と呼びます。

例えば次のようなXML文書は一番外側にある要素が2つありますのでXML文書としては正しくありません。

<?xml version="1.0" encoding="UTF-8" ?>
<food>
  <name>バナナ</name>
  <color>黄色</color>
</food>

<food>
  <name>リンゴ</name>
  <color>赤</color>
</food>

XML文書を作成する場合は必ず一番外側のもっとも階層が上の要素は単独の要素になるようにして下さい。

初心者入門リスト内包表記を使ったリストの作成 | Python入門

eyecatch

リストを作成する時の方法の一つであるリスト内包表記の使い方について解説します。内包表記はうまく使用することでプログラムを簡潔に記述することができます。

目次

  1. リスト内包表記の使い方
  2. 条件式を加えたリスト内包表記

リスト内包表記の使い方

リスト内包表記は次のような書式を使用します。

[式 for 変数 in イテラブルオブジェクト]

リストの中に for 文が組み込まれているような書式となっています。

例えば具体的な使い方として数値の 1 から 5 までの連続した値を要素に持つリストを作成する場合で考えてみます。要素を直接指定する方法や、空のリストを作成したあとで for 文を使って要素を追加する方法、リストのコンストラクタに range オブジェクトを指定してリストを作成する方法などがあります。

mylist = [1, 2, 3, 4, 5]
max = 5
mylist = []
for i in range(1, max + 1):
    mylist.append(i)
max = 5	
mylist = list(range(1, max + 1))

これに対してリスト内包表記を使用した場合には次のように記述することができます。

max = 5
mylist = [i for i in range(1, max + 1)]

リストに含まれる要素を直接プログラムに記述できる場合は直接書いてもいいですが、プログラム内で 1 から max までの連続した要素を持つリストを作成しなければならないような場合は他の方法を使う必要があります。リスト内包表記を使った方法はプログラムを簡潔に記述できるだけでなく、他の方法と比べて高速に動作すると言われています。

リスト内包表記では range オブジェクトなどのイテラブルオブジェクトから順に要素を取り出し、変数に代入します。そしてその変数を使った式の値をリストの要素として追加します。式には変数の値に対して演算などを行ったものを記述することができます。

>>> mylist = [i for i in range(1, 6)]
>>> print(mylist)
[1, 2, 3, 4, 5]
>>>
>>> mylist = [i * 10 for i in range(1, 6)]
>>> print(mylist)
[10, 20, 30, 40, 50]
>>>

最初のリストではイテラブルオブジェクトの要素をそのままリストの要素にしています。二番目のリストではイテラブルオブジェクトから取り出した要素に 10 を乗算した値をリストの要素にしています。これは次のように書いた場合と同じです。

>>> mylist = []
>>> for i in range(1, 6):
...     mylist.append(i * 10)
...
>>> print(mylist)
[10, 20, 30, 40, 50]
>>>

リスト内包表記は独特な記述方法のため慣れていないと使いにくいですが、簡潔に記述でき速度の点でもメリットがあると言われているので他の方のプログラムでも見る機会がい多いので、是非使い方は覚えておいてください。

条件式を加えたリスト内包表記

リスト内包表記では条件式を加えて条件式が真となった場合だけリストに要素として追加することができます。書式は次の通りです。

[式 for 変数 in イテラブルオブジェクト if 条件式]

イテラブルオブジェクトから要素を取り出し変数に代入したあと、条件式が真となった場合に式の値をリストの要素として追加します。

次の例ではイテラブルオブジェクトから取り出した要素の値が 3 の倍数だった場合だけリストに要素として追加しています。

>>> mylist = [i for i in range(1, 20) if i % 3 == 0]
>>> print(mylist)
[3, 6, 9, 12, 15, 18]
>>>

これは次のように書いた場合と同じです。

>>> mylist = []
>>> for i in range(1, 20):
...     if i % 3 == 0:
...         mylist.append(i)
...
>>> print(mylist)
[3, 6, 9, 12, 15, 18]
>>>

このように条件式が必要となる場合でもリスト内包表記を使ってリストオブジェクトを作成することができます。

-- --

リストを作成する時の方法の一つであるリスト内包表記の使い方について解説しました。

初心者入門unshift関数 - 配列/リスト - Perl関数のリファレンス

「unshift」関数は対象となる配列の先頭に要素を追加します。

配列の先頭にリストを追加します。

パラメータ:
  ARRAY  対象の配列
  LIST  追加するリスト
戻り値:
  リストを追加後の配列の要素数

1番目の引数には対象となる配列が格納された配列変数を指定します。2番目の引数には追加する単独の要素、又はリストを指定します。

具体的には次のように記述します。

my @city = ("東京", "大阪");

unshift(@city, "名古屋");
unshift(@city, ("札幌", "福岡"));

サンプルプログラム

では簡単なプログラムで確認して見ます。

test3-1.pl

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my @city = ("東京", "大阪");

unshift(@city, "名古屋");

for (my $i = 0; $i <= $#city; $i++){
  print "$city[$i]¥n";
}

print "¥n";

unshift(@city, ("札幌", "福岡"));

for (my $i = 0; $i <= $#city; $i++){
  print "$city[$i]¥n";
}

上記を「test3-1.pl」の名前で保存します(文字コードUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。

unshift関数

初心者入門等価演算子 - 演算子 - JavaScript入門

関係演算子の中で等しいかどうかを調べるために使われるのが等価演算子です。

演算子使用例意味
==a == ba と b は等しい
===a === ba と b は同一
!=a != ba は b は等しくない
!==a !== ba は b は同一でない

JavaScriptでは2つの値が等しいかどうか比較するために「==」演算子と「===」演算子が用意されています。どちらの演算子でも対象となる2つの値が等しい場合はtrueを返し、等しくない場合はfalseを返します。また「!=」演算子と「!==」演算子は逆に対象となる2つの値が等しくない場合はtrueを返し、等しい場合はfalseを返します。

次の例を見てください。

var old = 20;

if (old == 20){
  alert("20歳です");
}else{
  alert("20歳ではありません");
}

変数「old」に代入された値を20と比較します。等しければ「alert("20歳です");」を実行し、等しくなければ「alert("20歳ではありません");」を実行します。今回の場合は等しいため「alert("20歳です");」を実行します。

ではなぜ「==」演算子と「===」演算子の二種類が用意されているかというと、等しいかどうかの判別基準が異なるためです。簡単に言ってしまうと「===」演算子は対象の値が同一かどうかを判別し、「==」演算子は対象の値を比較して等しいかどうかを判別します。

では具体的にどのように判別が行われるのかをそれぞれ確認します。

「===」演算子の比較の手順

「===」演算子には次のように比較が行われます。

データ型が異なる場合は無条件でfalseとなります。またいずれか1つであっても値がNaNの場合もfalseとなります。

対象となる二つの値がどちらも数値、文字列、論理値とデータ型が同じで値も等しければtrueとなります。またどちらもnullの場合、どちらも未定義値の場合もtrueとなります。trueと未定義値の比較はfalseとなります。

10 === 10           true
"abc" === "abc"     true
true === true       true
10 === "10"         false
NaN === NaN         false
null === null       true
null === undefined  false

対象の値がオブジェクトであった場合、対象となる二つの値が同じオブジェクトを参照している場合だけtrueとなります。次の例を見てください。

var pref1 = ['東京都', '大阪府', '北海道'];
var pref2 = pref1;

pref1 === pref2    true

変数pref1と変数pref2は同じ1つの配列の値を参照しています。(オブジェクト型の変数の代入については「参照型の値を変数へ代入」を参照して下さい)。このような場合はtrueとなります。

var pref1 = ['東京都', '大阪府', '北海道'];
var pref2 = ['東京都', '大阪府', '北海道'];

pref1 === pref2    false

変数pref1と変数pref2はどちらも配列の値が格納されており、その配列の各要素の値は同じです。しかし配列の値そのものは別のものですのでこのような場合はfalseとなります。

「==」演算子の比較の手順

「==」演算子には次のように比較が行われます。

データ型が同じ場合は値を比較します。同じ値であった場合はtrueとなります。どちらも同じオブジェクト型の場合には「===」演算子の場合と同じく対象となる二つの値が同じオブジェクトを参照している場合だけtrueとなります。

数値と文字列の場合には、まず文字列を数値に変換した上で比較します。例えば数値の「10」と文字列の「10」を比較する場合には、まず文字列の「10」が数値の「10」に変換されて比較されるためtrueとなります。文字列が数値に変換できなかった場合には「NaN」に変換され条件式は必ずfalseとなります。

10 == 10          true
"abc" == "abc"    true
true == true      true
10 == "10"        true

どちらかの値だけが論理値だった場合、trueは数値の1に変換されて比較され、falseは数値の0に変換されて比較されます。

true == 1         true
false == 1        false

nullと未定義値の比較はtrueとなります。

null == undefined  true

対象の値がオブジェクトの場合には数値または文字列に変換した上で比較が行われます(文字列に変換された場合はさらに数値に変換されます)。変換できなかった場合は条件式はfalseとなります。

どちらかの値がNaNの場合は必ずfalseとなります。NaNとNaNを比較した場合もfalseです。

NaN == NaN         false

このように「===」演算子と「==」演算子では対象となる値が同じでも結果が同じになる場合もありますし異なる場合もあります。その為、使用する場合には比較するルールをよく理解した上で使用して下さい。

サンプルコード

では簡単なサンプルで試してみます。

  • sample12_1.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>JavaScript テスト</title>
</head>
<body>

<script type="text/javascript" src="./js/script12_1.js">
</script>

</body>
</html>
  • script12_1.js
if (null === undefined){
  document.write("<p>null === undefined</p>");
}else{
  document.write("<p>null !== undefined</p>");
}

if (null == undefined){
  document.write("<p>null == undefined</p>");
}else{
  document.write("<p>null != undefined</p>");
}

var pref1 = ['東京都', '大阪府', '北海道'];
var pref2 = pref1;
var pref3 = ['東京都', '大阪府', '北海道'];

if (pref1 === pref2){
  document.write("<p>pref1 === pref2</p>");
}else{
  document.write("<p>pref1 !== pref2</p>");
}

if (pref1 === pref3){
  document.write("<p>pref1 === pref3</p>");
}else{
  document.write("<p>pref1 !== pref3</p>");
}

if (pref1 == pref2){
  document.write("<p>pref1 == pref2</p>");
}else{
  document.write("<p>pref1 != pref2</p>");
}

if (pref1 == pref3){
  document.write("<p>pref1 == pref3</p>");
}else{
  document.write("<p>pref1 != pref3</p>");
}

上記を実際にブラウザ見てみると次のように表示されます。

p12-1