😊

プログラミング自主学習 DAY10 Method/グローバル変数・ローカル変数/オブジェクト・Class/Instance

2023/06/15に公開

Method(メソッド)

メソッドとは相互に連関しているコードをグループ化してまとめたツールのことである。

1)double vat = valueOfSupply*vatRate+zxckasldzlkjczklxc/zxckljakljdkasd-xajqozSc...........

非常に複雑なコードがあると想像してみよう。

2)double vat = getVAT(valueOfSupply, vatRate);
1)のコードを2)のように簡単に圧縮できるならば、便利だろう。



そういった場合、マウスの右ボタンRefactorExtract Method(Shift + alt + m)をクリックし、複雑な命令をメッソドとして作成するで、より簡潔に表現することができる。

また、double型ValueOfsupplyとVatRateはこのように流れ、新しいメソッドgetVATが成り立つ。
2であれ3であれ、いずれか一つの変数に問題がある場合にはメソッドを使用できなくなる。

グローバル変数・ローカル変数

次は先に作成したメソッドをより簡単にしたい。

getVAT(valueOfSupply, vatRate); 
getVAT();

しかし、こちらには問題点は存在する。
1、2の変数はMain関数と波格好により、特定の範囲にしか変数として機能しない。

3とは異なる領域に存在することが分かる。
このように、特定の範囲でのみ変数として成り立つ変数をローカル変数(지역 변수)という。
ここでは2を消すことで簡潔にしたいと思うが、それを行えば、3まで変数が届かなくなり、
メソッドとして機能しないようになる。

そのため、ローカル変数であるvOSとvatRateをグローバル(전역 변수)変数に変更することで、
変数のエリアを拡張する必要がある。


これにより、エラーなしでメソッドを簡潔することに成功した。

public class AccountingMethodApp {

public static double valueOfSupply;
public static double vatRate;
public static double total;
public static double expanseRate;
public static void main(String[] args) {

valueOfSupply = 5000.0;
vatRate = 0.1;
expanseRate = 0.3;
print();

}

public static void print() {
System.out.println("value of supply : "+ valueOfSupply);
System.out.println("VAT : " +getVAT());
System.out.println("Total : "+getTotal());
System.out.println("Expanse : "+getExpanse());
System.out.println("Income : "+getIncome());
System.out.println("Devidend 1: "+getDividend1());
System.out.println("Devidend 2: "+getDividend2());
System.out.println("Devidend 3: "+getDividend3());
}

public static double getDividend1() {
return getIncome()*0.5;
}

public static double getDividend2() {
return getIncome()*0.3;
}

public static double getDividend3() {
return getIncome()*0.2;
}

public static double getIncome() {
return valueOfSupply-getExpanse();
}

public static double getExpanse() {
return valueOfSupply*expanseRate;
}

public static double getTotal() {
return valueOfSupply+getVAT();
}

public static double getVAT() {
return valueOfSupply*vatRate;
}

}

このように、ローカル変数、グローバル変数を使用し、よく使うロジックをメソッド化することができる。

Class(クラス)

``Show View(Alt+Shift+Q)Outline`(O)を通してクラスファイルのメンバー(変数とメソッド)を見ることができる。

実習で作ったAccountingAppは会計専用のアプリであるが、
プログラムの機能追加による複雑化に伴い、他の変数とメソッドが追加される可能性が存在する。
その結果、コードが混乱し、効率が低下する可能性がある。
そのような場合に活用するのはClass(クラスで)だ。

Class{}:Classの中で新しいClassを作成する。


既存の変数とメソッドをClass Accountingの波格好{}に移す。


エラーが発生した原因は、AccountingClassApp.classの変数とメッソドがAccounting.classに
移動したことである。以前勉強した「.」を使い、移動した変数とメッソドを呼び出すことができる。


Accounting. を入力することで、プログラムが以前とように同じ動作した。
これにより、プログラムの構造が変わっても、同じ結果を得ることができることが分かる。

Instance(インスタンス)

インスタンスとはあるクラスを複製し、異なるデータの値(結果)を持ちつつ、
同じメッソドを持ったコピーを作ることだ。

例えば、10000.0のみ計算したプログラムに20000.0の結果も計算する必要があれば、
このような場合、二つのクラスを作成することで解決できる。

しかし、他の計算をする追加する必要がある場合、コードはますます複雑になる長くなく傾向がある。
そのため、インスタンスを使用することで、コードを簡潔に保ちながら異なるデータに対応できる。以前、学習したnewを入力し、3つのクラス変わりに3つのインスタンスを作成する。

インスタンスを活用する場合、staticをあれば作動しないため、
Accounting ClassのStaticを消す必要がある。
ただし、public static void mainのstaticは消しては作動しないため、残しておく。

以上で、インスタンスを活用し、プログラムを改善してみた。

Youtubeの基礎講座JAVA1勉強完了!!!

Discussion