投稿

ラベル(Java)が付いた投稿を表示しています

参照渡しと値渡し、引数には注意が必要!?

イメージ
参照渡しと値渡し 参照渡しと値渡し 引数には注意が必要 前回 、プリミティブ型とクラス型についてまとめました。 内容としては、変数であっても プリミティブ型の変数 と クラス型の変数 によってデータの格納の仕方が異なるため、比較を行うときには注意が必要である。というものです。 今回の内容は、この プリミティブ型の変数 と クラス型の変数 には比較以外に 引数 でも注意が必要となります。 私もこの引数で注意を怠り謎の不具合が出たことがあります。これはプログラミングに慣れてきたころに起こるミスだと思います。 参照渡しと値渡しとは プリミティブ型は 箱のイメージ なのに対して、クラス型は データの場所 を格納します。そのため引数でデータを渡すときにも、データの値を直接渡すのか、データの場所を渡すのか変わってきます。 値渡し プリミティブ型 を引数とした時には、この 値渡し となります。 これは、引数に与えられたデータをコピーして、メソッド内で使う変数と、引数に渡した変数は 別物 として扱われます。 そのためメソッド内で引数の変数の値を変えても、もとの変数の値は変わりません。 参照渡し クラス型 を引数とした時には、この 参照渡し となります。 これは、もとの変数のデータの場所を引数の変数に渡します。そのためメソッド内で引数の変数の値を変えると、メソッドを抜けた後のもとの変数の値も変わったままになります。 では、以下のコードを実行してみましょう。 class Test { public static void main( String[] args ) { int ...

なぜJavaで「==」で文字列比較できないのか

プリミティブ型とクラス型 プリミティブ型とクラス型について はじめに 今回は「プリミティブ型とクラス型」についてまとめたいと思います。 なぜこの内容を選んだのかというと、昔Javaを書いている時に なぜJava文字列比較で「 == 」を使えないのか? という疑問が生まれたのです。これが最近、研修を受けることによって復活したためです。 当時はまだプログラミングを始めたばかりということで「 できないんだー 」くらいにしか思っていませんでした。そして年数を重ね、だいぶ分かるようになってきたところでJavaの研修で再び「文字列比較に「==」は使えない」と学んだ。 説明はされたが、気になったので調べようと思います。 「==」が使えないのか確認 では、なぜ「 == 」での比較ができないのでしょうか。変数として使っている int や double では当たり前のように「 == 」を使うことができます。同じ変数のなら使えるはず、、、 実際、「 == 」を使ってコードを書いてもコンパイルエラーにはなりません。そう、「 == 」が使えないわけではないのです。ためしに以下のコードを書いて実験してみましょうか。 String a = "abc"; String b = "abc"; if( a == b ) { System.out.println( "同じ" ); } else { System.oiu.println( "違う" ); } これを実行すると、「 同じ 」と出力されたはずです。ちゃんと比較できていますね!! では次にコードを書き換えてみましょう。 String a = "abc"; String b = "ab"; b += "c"; if( a == b ) { ...

VisualStudioとEclipseどっちがオススメ?

VisualStudio VS Eclipse VisualStudio VS Eclipse はじめに 私はC#をメインで使っているため VisualStudio を多く使っています。しかし、最近はJavaの研修があるため Eclipse も使うようになりました。 実際、 IDE はそこそこ容量をとるので何個もインストールするのに抵抗がある人や、プログラミング言語をどれにしようか悩んでいる人はいると思います。 私は、2つを同時に使っているため、それぞれの 私的な 長所と短所が色々見えてきました。なので今回は「 VisualStudio VS Eclipse 」についてまとめようと思います。 VisualStudioについて VisualStudioはマイクロソフトが開発しているIDEです。 C++ や C# 、 F# などがサポートされています。 XamarinとC#を使用し、スマートフォンアプリの開発ができます。ビルドはできませんが iosアプリ の作成もできます。 いいところ 変数の予測変換がある クラス、メソッドなどの予測変換はどのIDEにもあるのですが、自分が作成した変数まで予測してくれるのは少ないと思います。変数を使用する機会が多いときには助かりますね。 Xamarinでマルチプラットフォーム作成 Xamarin.formsを使用することで、Androidやios、デスクトップのアプリをC#を使い、同時に作成する事ができます。プラットフォームごとに開発の環境を作らなくてよいのは助かります。 ...

プログラミングにおける中括弧の位置

プログラミングのスタイル プログラミングにおける中括弧の位置 中括弧の位置はどこに書く? 私は趣味ではC#を書き、会社でJavaを扱っています。そのため2つの言語の書き方で違いがいくつかあるんですよね。 まえに プログラミングの命名規約 についてまとめました。 こちら 今回取り上げる書き方の違いは 中括弧の位置 です。 クラスやメソッドなどは中括弧「 {} 」で囲って処理を記述しますが、みなさんはコードを書くときどこに記述しますか? 2つの例を書いてみましょう。 class Sample { // ここに処理を記述 } class Sample { // ここに処理を記述 } このように2種類の書き方があると思います。 中括弧の「 { 」の位置が違いますね。クラスやメソッド名の横に書くか、改行して真下に書くか 私は、改行する記述方法の方が多いです。VisualStudioの初期設定がこちらなんですよね。そのためC#を書いている人は改行している人が多いと思います。 調べたところ、この書き方にはそれぞれ名前がついているらしく、「 BDS/オールマン・スタイル 」と「 K&Rスタイル 」と言うらしいです。 2つのスタイルの違い この2つのスタイルの違いは何か、 ざっくり言うと { の位置が違うだけ です。 先ほどは数行しか書かなかったが、長文のコードを書いていると見た目が大きく変わってきます。 BDS/オールマン・スタイル class Sample { public static void Main( string[] args ) { for(int i=0;i<5;i++) ...

C#とJavaの命名規約について

命名規約 プログラミングにおける命名規約とは 私は趣味でC#を使っています。しかし、会社の研修ではJavaを扱っています。2つの言語はほとんど同じためスムーズに書ける! はずでした、 基本的な書き方は同じなのですが、変数名や関数名で躓いたのです。 皆さんは数値を文字列に変換したいとき、どのようにコードを書きますか? C# int n = 0; string str = n.ToString(); Java int n = 0; String str = Integer.toString( n ); この違い分かりますか?色々ツッコみたいんですが、今回はメソッド名について触れます。 C#とJavaでToStringとtoStringの先頭文字の「T」が大文字と小文字で異なるんですよ! それだけ? そういわれてしまうと何とも言えないんですが(笑) ただ先頭文字のため、エディタの予測候補がうまくいかなくなるんですよね。どっちかに揃えて欲しいなぁ では、なぜ書き方が異なるのでしょうか、 これは、使っている命名規約が異なるためなんです。その前に、変数の名前について話しましょう。 そもそも変数の名前とは? プログラミングでは、数値や文字列を入れておく変数(箱のようなもの)に名前を付けて識別します。なので自分一人で作っているときや、小さいプログラムであれば「a」とか「b」とか正直なんでもいいんです。 ですが、大量のコードになったり、チーム開発となるとそうはいきません。誰が見てもわかりやすい名前をつけないと問題が起こることがあります。 なので、分かりやすくするために、単語などを組み合わせて名前を付けます。 例えば、「データを送る」というメソ...