プログラマー – エンジニアの入り口 https://eng-entrance.com 「エンジニアの入り口」は、プログラミング入門やエンジニアリング入門の知識が満載の初心者のための勉強サイトです。プログラミングやサーバ、ネットワークの基礎知識や勉強方法を習得できます。 Thu, 16 Jun 2022 02:38:53 +0000 ja hourly 1 https://wordpress.org/?v=5.2.19 Javaプログラミング ~陥りやすいミス③~ https://eng-entrance.com/java%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0-%ef%bd%9e%e9%99%a5%e3%82%8a%e3%82%84%e3%81%99%e3%81%84%e3%83%9f%e3%82%b9%e2%91%a2%ef%bd%9e https://eng-entrance.com/java%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0-%ef%bd%9e%e9%99%a5%e3%82%8a%e3%82%84%e3%81%99%e3%81%84%e3%83%9f%e3%82%b9%e2%91%a2%ef%bd%9e#respond Tue, 24 May 2016 00:56:29 +0000 http://www.linuxacademy.ne.jp/lablog/?p=880 今回で3回目となる
「Javaプログラミングでの陥りやすいミス」
シリーズ

今回のテーマは『配列の扱い方』です。

さて、配列とは何だったでしょか?

「複数の値を連続的に並べて
ひとまとめに扱うデータ構造」

これを配列と言います。

では、Javaで配列を使用するには?

まず初めに、
「配列の宣言と生成」が必要となります。

配列の宣言と生成

配列の宣言・生成方法には、
次の2種類があります。

① 型名[] 配列名;
配列名 = new 型名[要素数];

② 型名[] 配列名 = new 型名[要素数];

上記の2つは同じ意味で、
単に、①を1行で表現したものが
②になります。

また、配列を生成する際には、
new演算子を使用し、

配列に格納する値(要素)の数を
「要素数」で指定します。

具体的には、以下のようになります。

① int[] a;
a = new int[3];
② int[] a = new int[3];

上記は、整数の値を3つ格納できる
aという配列になります。

しかし、以下のような書き方は、
コンパイルエラーになりますので
注意してください。

int[3] a;

配列の初期化

配列の宣言と生成が終わったところで、
今度は配列に値を入れていきます。

配列に初めて値を入れることを
「配列の初期化」と言います。

配列の初期化方法は、
次の3種類があります。

① int[] a = new int[3];

a[0] = 10;
a[1] = 20;
a[2] = 30;

② int[] a = new int[]{10, 20, 30};
③ int[] a = {10, 20, 30};

①は、
配列の宣言と生成が終わった後、
[]の中に
配列の何番目に値を入れるかを
指定して初期化しています。

②は、
配列の生成と同時に値を指定して
初期化しています。

ただし、
以下のように要素数を指定して
初期化すると、

コンパイルエラーになるため
注意が必要です。

int[] a = new int[3]{10, 20, 30};

要素数を指定しなくとも、
{}内の値の数がそのまま要素数となる、
ということです。

③は、一見すれば
コンパイルエラーになりそうですが、
Javaでは、
new演算子を使用せずに宣言した配列に
直接値を入れて初期化することもできます。

配列の代入

ここまで、「配列の宣言と生成」と
「配列の初期化」について
方法と注意点をお話してきました。

最後に、
配列を扱う上で一番陥りやすいミス
「配列の代入」についてみていきます。

では早速、
以下の例を考えてみましょう。

int[] a = new int[]{10, 20, 30};
int[] b = a;

a[0] = 50;
System.out.println(b[0]);

さて、上記の結果は
どう表示されるでしょうか。

10

ではありません。

50

と表示されます。

なんで??と思われた方は、
前回の「文字列の比較」の最後を
思い出してください。

上記の例は、

String str1 = new String("あ");
String str2 = str1;

と同じです。

"あ"という文字列は1つだけ生成され、
変数str1と変数str2には同じ"あ"の場所が
格納されます。

今回の場合も、
{10, 20, 30}という値は1つだけ生成され、
配列aと配列bには同じ{10, 20, 30}の場所が
格納されるのです。

配列も文字列同様、
new演算子によって生成されます。

そのため、
配列名(aやb)には実際の値ではなく、
その値の場所が格納されます。

new演算子は、
生成した値の格納場所を返す
「演算子」なのです。

kohsaka

これにより、
配列aの値を変更することは、
配列bの値を変更することになるため、
b[0]の値も50になります。

配列を扱う際には注意点が多いので、
慎重にプログラミングしてください。

-------------------------------------------------------
■□お知らせ□■ 新しいLAブログができました。
初心者向け】快適なプログラミング環境を作るパソコン選びのポイント6つ
どのPCを買えばいいか迷いますよね。他にも役立つ情報が盛りだくさん。
是非ご覧ください。
------------------------------------------------------

]]>
https://eng-entrance.com/java%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0-%ef%bd%9e%e9%99%a5%e3%82%8a%e3%82%84%e3%81%99%e3%81%84%e3%83%9f%e3%82%b9%e2%91%a2%ef%bd%9e/feed 0
文字列を扱う際の注意点 https://eng-entrance.com/%e6%96%87%e5%ad%97%e5%88%97%e3%82%92%e6%89%b1%e3%81%86%e9%9a%9b%e3%81%ae%e6%b3%a8%e6%84%8f%e7%82%b9 https://eng-entrance.com/%e6%96%87%e5%ad%97%e5%88%97%e3%82%92%e6%89%b1%e3%81%86%e9%9a%9b%e3%81%ae%e6%b3%a8%e6%84%8f%e7%82%b9#respond Mon, 16 May 2016 01:55:50 +0000 http://www.linuxacademy.ne.jp/lablog/?p=872 前回、
「文字列の比較」をテーマに
お話をしました。

Javaプログラミングにおいて、

文字列が同じかどうかを比較するには、
「==」演算子ではなく、
「equals」メソッドを使用する

という内容でした。

では、なぜ
整数(int型)は「==」演算子で
比較できるのに、
文字列(String型)は「==」演算子で
比較できないのでしょうか。

今回は、この疑問を解き明かしながら、
Javaプログラミングにおいて文字列を扱う際の
注意点をお話していきます。

「==」演算子で
文字列が比較できない理由

文字列を比較するときに
「==」演算子が使用できない理由は
下記の2つを確認すれば分かります。

・「==」演算子の挙動
・文字列の生成方法

「==」演算子の挙動

変数同士を「==」演算子で比較する場合、
変数に格納されている値同士を比較します。

例えば、

int a = 3;
int b = 3;

if (a == b) {
System.out.println("同じ");
} else {
System.out.println("違う");
}

上記の結果は、"同じ"と表示されました。

変数aには3が格納されます。

また、変数bにも3が格納されます。

そのため、
変数aと変数bは同じものであると評価され
"同じ"と表示されました。

では、文字列の場合は
どうでしょうか。

String str1 = new String("あ");
String str2 = new String("あ");

if (str1 == str2) {
System.out.println("同じ");
} else {
System.out.println("違う");
}

上記の結果は、"違う"と表示されました。

つまり、変数str1と変数str2には
"あ"という文字列ではなく、
それぞれ違うものが格納されている、
ということになります。

では一体、
変数str1と変数str2には
何が格納されているのでしょうか。

理由2 文字列の生成方法

文字列を生成するときに、
「new」という演算子を使用しました。

String str1 = new String("あ");
String str2 = new String("あ");

実は、この「new」演算子は、
文字列を生成した後、

その文字列が
どこにあるかという情報(場所)を
値として返します。

そのため、変数str1には、
最初に生成された"あ"という
文字列の場所が格納され、

変数str2には、
次に生成された"あ"という
文字列の場所が格納されます。

2つの"あ"という文字列は
別々の場所に生成されるため、
結果的として変数str1と変数str2には
違う値が格納されることになります。

そのため、文字列の比較には、
「==」演算子が使用できない、
ということになります。

文字列の不思議

ここまでのお話で、
なぜ文字列の比較には、
「==」演算子が使用できないか、
分かって頂けたかと思います。

では最後に、
以下の例を考えてみましょう:

String str1 = "あ";
String str2 = "あ";

if (str1 == str2) {
System.out.println("同じ");
} else {
System.out.println("違う");
}

Javaでは、
文字列を生成する際に、
上記のようなコードを
記述することもできます。

上記の結果は、
どうなるでしょうか。

結果は...

"同じ"

と表示されます。

なぜ??

これは、

String str1 = new String("あ");
String str2 = new String("あ");

String str1 = "あ";
String str2 = "あ";

とでは、
文字列の生成方法に違いがあるためです。

「new」演算子を使用した場合は、
2つの"あ"が別々の場所に生成されます。

しかし、「new」演算子を
使用しない場合は、
メモリの無駄を無くすため、

コンパイルの際、自動的に
下記のようなコードに変換されます。

String str1 = new String("あ");
String str2 = str1;

上記の場合、
"あ"という文字列は
1つだけ生成され、
変数str1と変数str2には
同じ"あ"の場所が格納されます。

kohsaka

これにより、
「==」演算子で比較したときに

"同じ"

と表示されるわけです。

このように、
文字列の生成方法の違いにより、
比較の結果が変わることもあるため
注意してください。

-------------------------------------------------------
■□お知らせ□■ 新しいLAブログができました。
lsコマンドで覚えたい15のオプション【Linuxコマンド集】
他にも学習に役立つ情報が盛りだくさんです。是非ご覧ください。
------------------------------------------------------

]]>
https://eng-entrance.com/%e6%96%87%e5%ad%97%e5%88%97%e3%82%92%e6%89%b1%e3%81%86%e9%9a%9b%e3%81%ae%e6%b3%a8%e6%84%8f%e7%82%b9/feed 0
Javaプログラミング  Javaプログラミング ~陥りやすいミス②~ https://eng-entrance.com/java%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e3%80%80-java%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0-%ef%bd%9e%e9%99%a5%e3%82%8a%e3%82%84%e3%81%99%e3%81%84 https://eng-entrance.com/java%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e3%80%80-java%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0-%ef%bd%9e%e9%99%a5%e3%82%8a%e3%82%84%e3%81%99%e3%81%84#respond Tue, 10 May 2016 05:07:07 +0000 http://www.linuxacademy.ne.jp/lablog/?p=866 以前、Javaプログラミングにおいて
陥りやすいミスの第1弾として

「インクリメント演算子と
 ディクリメント演算子」のお話をしました。

今回は、陥りやすいミス第2弾。

「文字列の比較」についてお話します。

比較の種類

比較といっても色々な比較があります。

大きい、小さい、同じ、異なる、...

ここでは、

「2つの文字列が
 同じ文字列かどうかを比較する」

ということについて考えます。

ではまず、2つの値の比較方法を
見ていきましょう。

比較演算子"=="

Javaにおいて、
2つの値を比較する演算子として
「比較演算子」があります。

さらに比較演算子の中には、
2つの値が同じかどうかを評価する

"=="

というものがあります。

例えば、2つの整数が同じかどうかを
確認するプログラムは以下のようになります。

int a = 3;
int b = 3;

if (a == b) {
System.out.println("同じ");
} else {
System.out.println("違う");
}

上記の結果は、「同じ」と表示されます。

比較演算子「==」は、
値が同じであればtrueを返し、
値が異なればfalseを返します。

文字列の比較

では、上記の例にならって
文字列の比較をしてみます。

String str1 = new String("あ");
String str2 = new String("あ");

if (str1 == str2) {
System.out.println("同じ");
} else {
System.out.println("違う");
}

上記の結果は、
「違う」と表示されます。

「え?何で?」と思われる方も
いるのではないでしょうか。

実は、文字列の比較には、
比較演算子「==」は使えないのです。

では文字列を比較するには
どうすればよいのでしょうか。

文字列を比較するには、
equalsというStringクラスに
定義されているメソッドを使います。

String str1 = new String("あ");
String str2 = new String("あ");

if (str1.equals(str2)) {
System.out.println("同じ");
} else {
System.out.println("違う");
}

上記の結果は、「同じ」と表示されます。

equalsメソッドは、
2つの文字列が同じ文字列であれば
trueを返し、
異なる文字列であればfalseを返します。

また、上記のif文は、

if (str2.equals(str1)) {

と記述しても同じです。

文字列を比較するときの注意点

ここまでの話をまとめると、

・文字列の比較には
 比較演算子「==」は使えない

・文字列の比較にはStringクラスの
equalsメソッドを使う

ということになります。

kohsaka

Javaプログラミングにおいて、
文字列は非常に使用頻度が高く、
文字列の比較は良く行います。

文字列は、
数値の比較と同じ方法では
比較できませんので、
注意してください。

■PS
新しいLAブログができました。
【初心者向け】3分でわかるLinuxでできることまとめ 10選
他にも学習に役立つ情報が盛りだくさんです。是非ご覧ください。

]]>
https://eng-entrance.com/java%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e3%80%80-java%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0-%ef%bd%9e%e9%99%a5%e3%82%8a%e3%82%84%e3%81%99%e3%81%84/feed 0
switch文の危険な使い方 https://eng-entrance.com/switch%e6%96%87%e3%81%ae%e5%8d%b1%e9%99%ba%e3%81%aa%e4%bd%bf%e3%81%84%e6%96%b9 https://eng-entrance.com/switch%e6%96%87%e3%81%ae%e5%8d%b1%e9%99%ba%e3%81%aa%e4%bd%bf%e3%81%84%e6%96%b9#respond Mon, 02 May 2016 08:51:34 +0000 http://www.linuxacademy.ne.jp/lablog/?p=861 以前に
『分岐処理とは?』のところで登場した
「switch文」を覚えているでしょうか。

「switch文」は
多分岐処理を記述する際に、

if文よりも
ソースコードの読みやすさと実行速度に
優れている、

というお話をしました。

しかし、
この「switch文」には
危険な使い方があるのです。

「switch文」の書式

「switch文」の一般的な書式は、
以下のようになります:

switch (条件式) {
case i:
条件式がiのときの処理
 break;
case j:
条件式がjのときの処理
 break;
...
default:
 条件式が上記以外のときの処理
 break;
}

※i, jは異なる整数

具体的には、

int value = x; ...①

switch (value) {
case 0:
System.out.println("0");
break;
case 1:
System.out.println("2");
break;
default:
System.out.println("-1");
break;
}

上記の場合、

①のxが0なら
0
と出力され、

①のxが1なら
1
と出力され、

①のxが0と1以外なら
-1
と出力されます。

「switch文」では、
このような書き方が一般的なのですが、
『フォールスルー』という特殊な書き方も
存在します。

フォールスルー
(fall through)

『フォールスルー』とは、
switch文において、breakを省略した
書き方のことです。

breakを省略とは
どういうことでしょうか。

例えば、

int value = x; ...②

switch (value) {
case 0:
case 1:
System.out.println("0or1");
break;
default:
System.out.println("-1");
break;
}

上記の場合、

②のxが0か1なら
0or1
と出力され、

②のxが0と1以外なら
-1
と出力されます。

このようにswitch文では、
case文にbreakを記述することは
強制ではないのです。

breakは、次のcase文の処理を
実行させたくない場合に記述します。

そのため、
もし次のcase文の処理を
続けて実行したいときには、
breakを省略できるのです。

危険なフォールスルー

さて、先ほどのフォールスルーの例は、
あまり危険ではありません。
(逆に直感的で読みやすい)

しかし、以下のような例では
どうでしょうか。

int value = x; ...③

switch (value) {
case 0:
System.out.println("0");
case 1:
System.out.println("1");
break;
default:
System.out.println("-1");
break;
}

上記の場合、

③のxが0なら
0
1
と出力され、

③のxが1なら
1
と出力され、

③のxが0と1以外なら
-1
と出力されます。

このようなフォールスルーは、
処理が複雑になりやすく、

さらに、
ソースコードを見たときに、
意図的にbreakを記述しなかったのか、
単にbreakを記述し忘れたのか、
区別がつきにくくなります。

基本的には意図的ではない
(記述し忘れによる)
『フォールスルー』は
バグとなってしまいます。

kohsaka

このような
危険なフォールスルー対策として、
「C#」というプログラミング言語では、
フォールスルーを記述できないように
なっています。

そのため、switch文を使う際には、
極力フォールスルーは使わないように
心掛けてください。

■PS

こちらでの記事を更新しはじめました。下記の記事は人気です。
フリーテキストエディタ11選

]]>
https://eng-entrance.com/switch%e6%96%87%e3%81%ae%e5%8d%b1%e9%99%ba%e3%81%aa%e4%bd%bf%e3%81%84%e6%96%b9/feed 0
Javaプログラミング ~陥りやすいミス①~ https://eng-entrance.com/java%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e3%80%80%ef%bd%9e%e9%99%a5%e3%82%8a%e3%82%84%e3%81%99%e3%81%84%e3%83%9f%e3%82%b9%e2%91%a0%ef%bd%9e https://eng-entrance.com/java%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e3%80%80%ef%bd%9e%e9%99%a5%e3%82%8a%e3%82%84%e3%81%99%e3%81%84%e3%83%9f%e3%82%b9%e2%91%a0%ef%bd%9e#respond Mon, 25 Apr 2016 01:54:00 +0000 http://www.linuxacademy.ne.jp/lablog/?p=851 今回から数回に渡り、
「Javaプログラミングにおける
 初心者が陥りやすいミス」
についてお話しようと思います。

第一弾は、

「インクリメント演算子と
 ディクリメント演算子」

に関する注意点です。

インクリメント演算子
ディクリメント演算子

この演算子は、
単項演算子にというものに
分類されます。

インクリメント演算子は「++」と記述し、
オペランドに1を加算する演算子です。

ディクリメント演算子は「--」と記述し、
オペランドから1を減算する演算子です。

さらに、この演算子を
オペランドの前に記述した場合、

例えば、

 ++i
 --i

のような場合(iは変数)、

「前置インクリメント演算子」
「前置ディクリメント演算子」

と呼びます。

また、この演算子を
オペランドの後ろに記述した場合、

例えば、

 i++
 i--

のような場合(iは変数)、

「後置インクリメント演算子」
「後置ディクリメント演算子」

と呼びます。

なぜ、同じ演算子で
記述の仕方が2種類あるのでしょうか。

前置と後置の違い

前置と後置の具体的な例を
見ていきましょう。

ここでは、
インクリメント演算子の例を
見ていきます。

例(その1)

 
int i = 0;
int j = 0;

i++;
++j;
System.out.println(i); ...①
System.out.println(j); ...②

上記の例では、
①も②もどちらも1と出力されます。

この結果は
予想通りの結果ではないでしょうか。

では、次の例はどうでしょう。

例(その2)

int i = 0;
int j = 0;
int result = 0;

result = i++;
System.out.println(result); ...①
result = ++j;
System.out.println(result); ...②

上記の例では、

①は0
②は1

と出力されます。

なぜ?と思われた方も
いるのではないでしょうか。

陥りやすいミス

なぜこのような結果に
なるのでしょうか。

実は、インクリメント演算子は、
「例(その1)」のように、

単体で使う場合は、
前置も後置も単にオペランドに
1を加算するだけです。

※ディクリメント演算子も同様

しかし、インクリメント演算子を
他の演算子と共に使う場合は
注意が必要です。

「例(その2)」の場合、

result = i++;

は、

(result = i) + 1;

のように、
代入が行われた後に加算が行われます。

※ディクリメント演算子も同様

また、

result = ++j;

は、

result = (j + 1);

のように、

加算が行われた後に代入が行われます。
※ディクリメント演算子も同様

インクリメント演算子を
他の演算子と共に使う場合、

前置と後置では、
加算のタイミングが異なる、
ということになります。

インクリメント(ディクリメント)の
使用頻度は高い

プログラミングにおいて、
インクリメントあるいは
ディクリメントは、
使用頻度が非常に高い演算です。

特に、繰り返し処理などでは、
よく使用されます。

kohsaka

そのため、
この演算子を使用する際には、

・単体での使用なのか、
 他の演算子と併用なのか

・他の演算子と併用の場合は、
 加算のタイミングを考慮

上記の点に
注意するようにしてください。
------------------------------------------------
PS.学習&就職サポートが充実!憧れのエンジニアへ!
社会人のためのJavaスクール
------------------------------------------------

]]>
https://eng-entrance.com/java%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e3%80%80%ef%bd%9e%e9%99%a5%e3%82%8a%e3%82%84%e3%81%99%e3%81%84%e3%83%9f%e3%82%b9%e2%91%a0%ef%bd%9e/feed 0
演算子の種類 https://eng-entrance.com/%e6%bc%94%e7%ae%97%e5%ad%90%e3%81%ae%e7%a8%ae%e9%a1%9e https://eng-entrance.com/%e6%bc%94%e7%ae%97%e5%ad%90%e3%81%ae%e7%a8%ae%e9%a1%9e#respond Mon, 18 Apr 2016 08:38:31 +0000 http://www.linuxacademy.ne.jp/lablog/?p=839 以前に「演算子」についてお話をしました。

ソースコード上で
演算(計算)をするための記号が「演算子」です。

一般的なプログラミング言語では、
約30種類の演算子が定義されています。

これだけある演算子ですが、
大きく3つに分類することができます。

演算子の種類

演算子は、

・単項演算子
・二項演算子
・三項演算子

の3種類に分類することができます。

さて、「項」とは一体何でしょうか。

演算をするためには、
演算の対象となるものが必要になります。

例えば、足し算をする演算子である
「+」の場合、

3 + 5

という使い方をします。

このとき、
「3」や「5」が演算の対象となります。

このような演算の対象となるものを
「項」と言います。

ちなみに「項」のことを
「オペランド」とも言います。

必要とする「項」の数によって
演算子は分類されています。

1つだけ必要とする演算子を
「単項演算子」、

2つ必要とする演算子を
「二項演算子」、

3つ必要とする演算子を
「三項演算子」

と言います。

単項演算子

代表的なものとしては
インクリメント演算子(++)と
呼ばれるものがあります。

インクリメント演算子は、
下記のような形で使います。

i++

上記の例では、
「変数iの値に1を足す」という
演算を行います。

二項演算子

「+」「-」「*」「%」など

四則演算に代表される
数多くの演算子があります。

三項演算子

項が3つ必要な演算子です。

「そんな演算子は知らない」

という方もいるのでは
ないでしょうか。

三項演算子はマイナー?

実は、この三項演算子、
プログラミングの世界では
あまり好んで使われていないようです。

ソースコードが読みにくくなる、
という理由から、

企業によっては、
三項演算子の使用を禁止している
ところもあるようです。

また、
三項演算子が存在しない
プログラミング言語もあります。

例えば、Pythonには、
三項演算子はありません。

このように一見マイナーな
三項演算子ですが、

使い方によっては便利な演算子です。

三項演算子の書式

三項演算子は

「?:」

この1種類しかありません。

書式としては、

 条件式 ? 式1 : 式2

となります。

これは、
条件式を評価して正しければ
(真であれば)式1を返し、
正しくなければ(偽であれば)
式2を返します。

この説明を見て、

「if文と同じでは?」

と思われた方も
いるのではないでしょうか。

しかし、
三項演算子は演算子です。

結果として式を返します。

if文のように
条件に応じた処理を記述するのでは
ない点に注意してください。

例えば、
変数ageが20以上なら"成年"、
変数ageが19以下なら"未成年"
と表示するソースコードを

三項演算子を使って
Java言語風に書くと、
以下のようになります:

String str = null;
str = age >= 20 ? "成年" : "未成年";
System.out.println(str);

※System.out.println()は
 指定したものを画面に
 表示するためのメソッド

上記の場合、
「age >= 20」が条件式となり、
真なら"成年"が返り
変数strに代入され、
偽なら"未成年"が返り
変数strに代入されます。

これは、
三項演算子(?:)のほうが
代入演算子(=)よりも
優先順位が高いため、

先に三項演算子が実行され、
その返り値が代入演算子により
代入されることになります。

上記の例を
if文を使用して書くと、
以下のようになります:

String str = null;
if (age >= 20) {
str = "成年";
} else {
  str = "未成年";
}
System.out.println(str);

見た目には、
三項演算子のほうがif文より
スッキリして見えます。

三項演算子のほうは、
演算子の優先順位を知らないと
読み解くことができません。

このようなことから、
三項演算子を使用すると
ソースコードが読みにくいと言われます。

しかし、個人的には、
好んで良く使用しています。

書き方によっては、
先ほど3行で記述した
三項演算子のソースコードを、
1行で記述することもできます。

System.out.println(age >= 20 ? "成年" : "未成年");

kohsaka

三項演算子は演算子なので、
メソッドの引数に
記述することも可能です。

このように、
ちょっとマニアックな使い方もできる
三項演算子、

機会があれば、
是非使ってみてはいかがでしょうか。

------------------------------------------------
PS.プログラミングの基礎を学ぶ最善の方法とは?
すでに多くの人が
社会人のためのプログラミングスクール
学習を始めています。
------------------------------------------------

]]>
https://eng-entrance.com/%e6%bc%94%e7%ae%97%e5%ad%90%e3%81%ae%e7%a8%ae%e9%a1%9e/feed 0
分岐処理のすすめ~用途で使い分ける~ https://eng-entrance.com/%e5%88%86%e5%b2%90%e5%87%a6%e7%90%86%e3%81%ae%e3%81%99%e3%81%99%e3%82%81%ef%bd%9e%e7%94%a8%e9%80%94%e3%81%a7%e4%bd%bf%e3%81%84%e5%88%86%e3%81%91%e3%82%8b%ef%bd%9e https://eng-entrance.com/%e5%88%86%e5%b2%90%e5%87%a6%e7%90%86%e3%81%ae%e3%81%99%e3%81%99%e3%82%81%ef%bd%9e%e7%94%a8%e9%80%94%e3%81%a7%e4%bd%bf%e3%81%84%e5%88%86%e3%81%91%e3%82%8b%ef%bd%9e#comments Mon, 11 Apr 2016 05:45:34 +0000 http://www.linuxacademy.ne.jp/lablog/?p=807 From:リスキルテクノロジー 高坂一城
新宿本校にて

プログラムでは、
ある条件に応じて処理を分けたい、
という場面があります。

年齢が20歳以上ならお酒を販売する、
20歳未満ならお酒を販売しないといったものです。

こういったときのために、
プログラミング言語には、

「条件によって処理を分ける」という

機能が用意されています。

この機能が『分岐処理』です。

分岐処理の種類

一般的なプログラミング言語の場合、

『if文』という書き方と、

『switch文』という書き方があります。

if文とswitch文の違い

なぜ、分岐処理には
2つの書き方があるのでしょうか?

実は、どちらの書き方でも、
同じ分岐処理を記述することができます。

(前回のループ処理もそうでしたね)

違いは、書式の違いによる
ソースコードの読みさすさと実行速度です。

また、分岐処理には、

「二分岐」と呼ばれる、
2つの処理のどちらかを実行するものと、

「多分岐」と呼ばれる、
3つ以上の処理のどれか一つを実行するもの
があります。

二分岐

if文の書式(二分岐)

if文による二分岐の分岐処理は、
以下のような書式になります:

if (条件式) {
 条件式が正しい(true)ときの処理
} else {
 条件式が正しくない(false)ときの処理
}

if文は、
条件式を評価した結果が、
trueかfalseかによって
処理を分岐します。

switch文の書式(二分岐)

switch文による二分岐の分岐処理は、
以下のような書式になります:

switch (条件式) {
case n:
 条件式がnのときの処理
 break;
default:
 条件式がn以外のときの処理
 break;
}
※nは整数

switch文は、条件式を評価した結果が、
特定の整数かどうかによって
処理を分岐します。

二分岐の場合の違い

上記の2つの書式から、
二分岐の場合はif文のほうが
ステップ数が少なく見やすくなります。

また二分岐の場合の実行速度は、
if文もswitch文も
どちらもほとんど変わりません。

多分岐

if文の書式(多分岐)

if文による多分岐の分岐処理は、
以下のような書式になります:

if (条件式1) {
 条件式1が正しい(true)ときの処理
} else if (条件式2) {
 条件式2が正しい(true)ときの処理
} else if (条件式3) {
 条件式3が正しい(true)ときの処理
・・・
} else {
 上記以外のときの処理
}

switch文の書式(多分岐)

switch文による多分岐の分岐処理は、
以下のような書式になります:

switch (条件式) {
case i:
 条件式がiのときの処理
 break;
case j:
 条件式がjのときの処理
 break;
case k:
 条件式がkのときの処理
 break;
・・・
default:
 上記以外のときの処理
 break;
}

※i、j、kは異なる整数

多分岐の場合の違い

上記の2つの書式を見てもわかる通り
多分岐の場合もswitch文のほうが
ステップ数は多いですが
ソースコードは読みやすくなります。

また多分岐の場合の実行速度は、
switch文のほうがif文よりも速いと
されています。

if文は条件式を上から順番に
評価していくのに対し、

switch文は
条件式の評価は1度だけで、
あとは同じ数字を見つけるだけ
という違いによるものです。

(内部的には、「テーブルジャンプ」や
「二分探索」という技術が使われている)

if文とswitch文の使い分け

ソースコードの読みさすさと
実行速度から、

・二分岐の場合は、『if文』が適している

・多分岐の場合は、『switch文』が適している

ということが言えます。

しかし、どのプログラミング言語でも
分岐処理を勉強するときには
「if文」がはじめに登場します。

そのためか、
switch文を敬遠する方を
多く見かけます。

最近のプログラミング言語では、
switch文の条件式の評価結果に、
整数以外の値が使える言語も存在します。

kohsaka

例えばJava言語では、
バージョン7以降において、
条件式の評価結果に「文字列」が
扱えるようになりました。

このように利便性も増しています。

ぜひ、多分岐処理の時には
switch文にも挑戦してみてください。

------------------------------------------------
PS.Javaを基礎からしっかり学びたいなら、
社会人のためのJavaスクールで!!
------------------------------------------------

]]>
https://eng-entrance.com/%e5%88%86%e5%b2%90%e5%87%a6%e7%90%86%e3%81%ae%e3%81%99%e3%81%99%e3%82%81%ef%bd%9e%e7%94%a8%e9%80%94%e3%81%a7%e4%bd%bf%e3%81%84%e5%88%86%e3%81%91%e3%82%8b%ef%bd%9e/feed 1
使いこなせば効率的!「ループ処理」とは? https://eng-entrance.com/%e4%bd%bf%e3%81%84%e3%81%93%e3%81%aa%e3%81%9b%e3%81%b0%e5%8a%b9%e7%8e%87%e7%9a%84%ef%bc%81%e3%80%8c%e3%83%ab%e3%83%bc%e3%83%97%e5%87%a6%e7%90%86%e3%80%8d%e3%81%a8%e3%81%af%ef%bc%9f https://eng-entrance.com/%e4%bd%bf%e3%81%84%e3%81%93%e3%81%aa%e3%81%9b%e3%81%b0%e5%8a%b9%e7%8e%87%e7%9a%84%ef%bc%81%e3%80%8c%e3%83%ab%e3%83%bc%e3%83%97%e5%87%a6%e7%90%86%e3%80%8d%e3%81%a8%e3%81%af%ef%bc%9f#respond Mon, 04 Apr 2016 03:45:25 +0000 http://www.linuxacademy.ne.jp/lablog/?p=801 From:リスキルテクノロジー 高坂一城 新宿本校にて プログラムでは、 同じ処理を何度も実行することが しばしばあります。 その時に、同じ処理を何度も プログラムの中に記述することは、 決して効率がいいとは言えません。 一回だけ処理を記述したら、 その処理を何度も繰り返し 実行してくれる機能があると 非常に便利です。 このように 『同じ処理を繰り返し実行する』 機能がプログラミング言語には 用意されています。 この機能が『ループ処理』です。

ループ処理の種類

一言でループ処理と言っても、 プログラミング言語によっては、 数種類用意されています。 一般的な プログラミング言語の場合は、 『for』 という書き方(for文と呼ばれる)と、 『while』 という書き方(while文と呼ばれる) があります。

for文とwhile文の違い

なぜ、 ループ処理には2つの書き方が あるのでしょうか? 実は、どちらの書き方でも、 同じループ処理を記述することができます。 違いは、書式の違いによる 記述の易さです。

for文の書式

for文のよくある使われ方としては、 以下のような書式があります。

for (カウンタの初期化; カウンタのチェック; カウンタの増加) {   繰り返したい処理 }

カウンタと呼ばれる、 今何回目の繰り返しかを表現するもの(変数) に対して、 「カウンタの初期化」で初期値を設定します。 その後、「カウンタのチェック」で カウンタが繰り返すべき回数に 達しているか否かをチェックします。 まだ達していなければ、 「繰り返したい処理」を実行します。 最後に「カウンタの増加」で カウンタの数を増やして、 再度「カウンタのチェック」を行います。 上記を カウンタが繰り返すべき回数に 達するまで実行します。

while文の書式

while文の書式はシンプルで、 以下のようになります。

while (条件式) {   繰り返したい処理 }

「条件式」で条件が成立している間 「繰り返したい処理」を実行します。

for文とwhile文の使い分け

先にある書式の違いから、 以下のようなことがわかると思います。 ・for文は、  『繰り返し回数が決まっている処理』  に適している ・while文は、  『繰り返し回数が決まっていない処理』  に適している 具体的には、  「1000円を年利5%で預金したとき、10年後の預金額を計算するプログラム」 は、for文が適しています。

【参考:プログラム例】  double amount = 1000;  for (int year = 0; year < 10; year++) {   amount *= 1.05;  } amountを表示

また、  「1000円を年利5%で預金したとき、 預金額が2000円を超えるまでの   年数を計算するプログラム」 は、whileが適しています。

【参考:プログラム例】  double amount = 1000;  int year = 0;  while (amount <= 2000) {   year++;   amount *= 1.05;  } yearを表示

このように、 for文とwhile文のどちらを使えばいいか 迷った時には、 繰り返し回数が決まっているかどうかを 基準にしてください。 ただし、どちらの書き方でも、 同じループ処理を記述することができます。 そのため、プログラミング初心者は、 まず自分が書き易いほうでプログラミングを してみましょう。

kohsaka

そして、 少しプログラミングに慣れてきたら、 どちらを使うか検討してみてください。 このような 勉強の仕方がいいのではないでしょうか。 ------------------------------------------- PS.Javaを基礎からしっかり学びたいなら、 社会人のためのプログラミングスクールで!! -------------------------------------------

]]>
https://eng-entrance.com/%e4%bd%bf%e3%81%84%e3%81%93%e3%81%aa%e3%81%9b%e3%81%b0%e5%8a%b9%e7%8e%87%e7%9a%84%ef%bc%81%e3%80%8c%e3%83%ab%e3%83%bc%e3%83%97%e5%87%a6%e7%90%86%e3%80%8d%e3%81%a8%e3%81%af%ef%bc%9f/feed 0
基本だけど注意が必要!演算子とは https://eng-entrance.com/%e5%9f%ba%e6%9c%ac%e3%81%a0%e3%81%91%e3%81%a9%e6%b3%a8%e6%84%8f%e3%81%8c%e5%bf%85%e8%a6%81%ef%bc%81%e6%bc%94%e7%ae%97%e5%ad%90%e3%81%a8%e3%81%af https://eng-entrance.com/%e5%9f%ba%e6%9c%ac%e3%81%a0%e3%81%91%e3%81%a9%e6%b3%a8%e6%84%8f%e3%81%8c%e5%bf%85%e8%a6%81%ef%bc%81%e6%bc%94%e7%ae%97%e5%ad%90%e3%81%a8%e3%81%af#respond Mon, 28 Mar 2016 02:45:58 +0000 http://www.linuxacademy.ne.jp/lablog/?p=792 From:リスキルテクノロジー 高坂一城 新宿本校にて ソフトウェア開発をする際、 ソースコード上で「演算(計算)」をすることが しばしばあります。 例えば、 ある品物の消費税込の価格を計算するには、 税抜き価格 * 1.08 ("*"は掛け算) といった演算をする必要があります。 上記の例で "*"という演算(ここでは掛け算)をするための記号を 「演算子」と呼びます。 掛け算以外にも、 一般的なプログラミング言語には、 +:足し算 -:引き算 /:割り算 といった演算子が存在します。

複雑な演算

先ほどの例では、 演算子が一つしかありませんでしたが、 4 + 8 / 4 * 2 - 6 このように複数の演算子が存在する場合、 どのように演算されるのでしょうか。 例えば、 左側から順番に演算をした場合、 答えは、「0」になります。 しかし、「0」という答えは正しくありません (正しくは2となります)。 つまり今回の例の場合、 左から順番に演算をしてはいけない、 ということになります。 では、 どういう順番で演算されるのでしょうか。

演算の順番

演算子には、 「優先順位」と「結合規則」という ルールがあります。 このルールに従って演算が行われます。

優先順位

優先順位は、 どの演算を先に行うのかを決定するために 使われます。 一般的なプログラミング言語では、 以下のようになります。 -------------------------------- 優先順位 演算子 --------------------------------   高   * /   低   + - -------------------------------- "*"と"/"は"+"と"-"よりも 優先順位が高いため、先に演算されます。 例えば、 3 + 5 * 4 の場合、 「5 * 4」が先に行われ、 その結果(20)が「3」と足し算される このようになります。

結合規則

結合規則とは、 優先順位の同じ演算子が複数存在する場合、 どの演算を先に行うのかを決定するために 使われます。 一般的なプログラミング言語では、 以下のようになります。 -------------------------------- 結合規則 演算子 --------------------------------   左   * /   左   + - -------------------------------- "*"と"/"は優先順位が等しいため、 同時に存在する場合は左側から順に 演算されることを意味します。 "+"と"-"の場合も同様です。 例えば、 8 / 4 * 2 の場合、 「8 / 4」が先に行われ、 その結果(2)が「2」と掛け算される このようになります。

演算子の間違いによる バグは見つけにくい

このように、 ソースコード上で演算を実施する場合、 演算子の「優先順位」と「結合規則」を 常に意識する必要があります。 また、ここでは 4種類の演算子しか取り上げていませんが、 一般的なプログラミング言語では、 「30種類」程度の演算子が存在します。 全ての演算子に 「優先順位」と「結合規則」が 定められています。

kohsaka

さらに、演算子の記述順序を間違えても、 (文法的な)エラーにはなりません。 そのため、演算子の記述間違いによる バグ(不具合)を引き起こさないように 「優先順位」と「結合規則」には 注意をしてみてください。 ------------------------------------- PS.Javaを基礎からしっかり学びたいなら、 社会人のためのプログラミングスクールで!! -------------------------------------

]]>
https://eng-entrance.com/%e5%9f%ba%e6%9c%ac%e3%81%a0%e3%81%91%e3%81%a9%e6%b3%a8%e6%84%8f%e3%81%8c%e5%bf%85%e8%a6%81%ef%bc%81%e6%bc%94%e7%ae%97%e5%ad%90%e3%81%a8%e3%81%af/feed 0
Pythonって何? https://eng-entrance.com/python%e3%81%a3%e3%81%a6%e4%bd%95%ef%bc%9f https://eng-entrance.com/python%e3%81%a3%e3%81%a6%e4%bd%95%ef%bc%9f#respond Mon, 21 Mar 2016 11:07:12 +0000 http://www.linuxacademy.ne.jp/lablog/?p=768 From:リスキルテクノロジー 高坂一城 新宿本校にて

kohsaka

ソフトウェア開発をする上で プログラミング言語はなくてはならないモノです。 そのようなプログラミング言語ですが、 何種類あるかご存知ですか? ある調査機関によると 世界には「約8,500種類」 のプログラミング言語が存在する、 という調査結果が出ています。 これだけの種類があるプログラミング言語ですが、 世の中ではどういう言語が よく使われているのでしょうか。

プログラミング言語ランキング

オランダにある TIOBE Softwareという会社は、 どのようなプログラミングが話題になっているのか、 という調査を毎月実施し、 その結果をホームページにて掲載しています。 インターネット上にある複数の検索エンジンで、 そのプログラミング言語がどれだけ多く 検索されたのかで調査・集計しています。 今年(2016年)2月の プログラミング言語ランキング上位5言語は、 以下のようになっています。 1位 Java 2位 C 3位 C++ 4位 C# 5位 Python やはりJavaの人気は高いのですが、 中でも注目すべきは 5位の「Python(パイソン)」です。

Pythonって何?

「Python」というプログラミング言語は、 日本ではあまり馴染みが薄いかもしれません。 しかし、 このランキングを見ても分かる通り、 世界で5番目に注目されているプログラミング言語 ということになります。 なぜ、 Pythonは世界で注目されているのか。 なぜ、 日本ではPythonが注目されていないのか。 この理由について 考えていきたいと思います。

なぜPythonは 世界で注目されているのか

結論から言うと「Python」は、 プログラミングをこれから勉強しよう という初心者にとって勉強しやすい言語である、 という点が理由にあげられます。 それを裏付けるデータとして、 全米で最も優れた コンピュータサイエンス教育を行っている 大学ランキングがあります。 ランキングの上位39校中、69%にあたる27校が 「Python」を採用しています。 更に、トップ10校に限定すると、 なんと8校が「Python」の教育を 行っているのです。 このことからも「Python」が 初心者向けのプログラミング言語である、 ということが分かります。 「Python」がどれだけ勉強し易いか(簡単か)を 「Java」と比較してみましょう。 どのプログラミング言語でも 一番最初に実行するサンプルプログラムとして有名な 「Hello World」というプログラム (単に "Hello World" という文字列を画面に表示する) で比較します。

Java

public static void main(Stirng[] args) {
  System.out.println("Hello World");
}

Python

print "Hello World"

あるいは

print("Hello World")

ぱっと見ただけでも、 Pythonのほうが簡単そうにみえますよね。

なぜPythonは日本では あまり注目されていないのか

これだけ世界で注目されている「Python」ですが、 なぜ日本ではあまり注目されていないのでしょうか。 Pythonは、 「スクリプト言語」というカテゴリの プログラミング言語です。 日本ではスクリプト言語として、 Rubyという言語が普及しています。 実は、このRuby、 日本人が作ったプログラミング言語です。 そういった理由もあり日本では、 PythonではなくRubyが注目され、 使われるようになりました。 これが「Python」が日本であまり注目されない 理由の一つとなっています

Pythonの今後

ここまで、 Pythonが注目される理由を見てきました。 では、今後Pythonは ランキング1位のJavaに取って代わるのでしょうか。 恐らく PythonがJavaに取って代わる、ということは ないでしょう。 なぜなら、PythonとJavaでは プログラミング言語のカテゴリが違います。 また、全米の大学ランキングでは Pythonがトップですが、 ・Pythonは初級コース ・Javaは上級コース といった使い分けをしている大学もあります。 また、Javaも大学ランキングでは2番目に多い 39校中22校が採用しています。 更に、実際のITの現場では、 圧倒的にJavaが使われる頻度が高いのです。 しかし、 勉強し易い言語として君臨してきましたJavaを、 上回る勉強し易い言語が出てきたことも事実です。 この先、機会があれば Pythonプログラミングについても触れていきたいと 思います。 ---------------------------------------------- PS. とはいえ、仕事という面では、 日本でもっとも需要が多いのは圧倒的にJavaでしょう。 Javaスクールならリスキルテクノロジー ----------------------------------------------

]]>
https://eng-entrance.com/python%e3%81%a3%e3%81%a6%e4%bd%95%ef%bc%9f/feed 0