Javaを勉強してTypeScriptも知る
HirosawaTsuyoshi
2021/06/01
何を学んでいるか
- Javaの基礎であり、主にclassベースのオブジェクト指向の基礎
- class, field, method, instance, constructor, 例外処理, 参照渡し...
授業前のJavaの印象
- レガシー技術
- イケてない
- 過去の遺物
JavaとTypeScript
共通点
- 静的型付け言語である
- classやinterfaceを使った実装ができる
- オブジェクト指向
- 制御構文(for, if)や演算子周り、例外処理はほぼ同じ
Java
-
関数のmain()がエントリーポイント
public class Hoge { public static void main(String[] args){} }
-
配列生成時に要素数を指定する
int[] array; a = new int[2]; a[0] = 10; a[1] = 7; // TypeScriptの場合 const array: Array
= new Array(2);
TypeScript
- TypeScriptはJavaScriptに対して、省略も可能な静的型付けとクラスベースオブジェクト指向を加えた厳密なスーパーセットとなっている
JavaとTypeScriptで変数に型を付ける場合
Javaで変数に型を付ける場合は、
String a = "Javaだよ";
TypeScriptの場合は↓
const a: string = "Typesctiptだよ";
Javaは静的型付け言語で、TypeScriptは動的型付け言語であるJavaScriptに 型注釈
(型指定) をし、コンパイラーに型を注釈として与えています。
Java と TypeScriptでHello Worldを出力する場合
- クラスの公開は export の有無で、メンバー変数やメソッドのアクセスレベルは Java と 同じ
- 型を後に書く (e.g. 引数 String[] args が args: String[]、メソッド戻り値が : void と 後)
- Java の mainメソッド に あたるものは無いので任意のメソッド名でで実行する
public class GreetingJava {
public static void main(String[] args) {
System.out.println("Hello World !");
}
}
export class GreetingTypeScript {
public static main(args: String[]): void {
console.log('Hello World !');
}
}
GreetingTypeScript.main(undefined);
classの概念
- classは以下のメンバからなる
- field
- method
- constructor
- インスタンスを作成する(new …() を呼ぶ)とき
に実⾏される処理を定義したもの(名前はクラス名と同じ)
- インスタンスを作成する(new …() を呼ぶ)とき
class Student {
// field
private int id; // 外から参照できない局所変数
private String name; // 外から参照できない局所変数
// constructor
public Student(int id) {
this.id = id // 明示的にfieldを指す場合はthisを使う
}
// method
public int getStudentId() {
return this.id;
}
}
class studentManager {
public static void main(String[] args) {
// インスタンス作成
Student student = new Student(12);
System.out.println(student.getStudentId()) // 12
}
}
- アクセスを修飾子
- private
- 同一class内からのみアクセス可能
- fieldに直接アクセスできると想定していない値を設定させられるかも
- public
- すべてのclassからアクセス可能
- protected
- 同一パッケージ内とサブクラスからアクセス可能
- private
- privateなフィールドにpublicなメソッドを⽤いて
アクセスできるようにすることをカプセル化と呼ぶ
参照渡しはTypeScriptでも発生する
- objectの時に起こる(https://qiita.com/18kondo/items/a776243965abd0965d12)
- Playground: https://is.gd/MwJ7FR
export class User {
name: string;
age: number;
}
class User {
name: string;
age: number;
}
const main = () => {
let users: User[] = [];
let user: User = { name: "alpha", age: 20 };
users.push(user);
console.log('before', { users });
user.name = "beta";
users.push(user);
console.log('after' ,{ users });
};
main();
// before { users: [{ name: "alpha", age: 20 }]}
// after { users: [{ name: 'beta', age: 20 }, { name: 'beta', age: 20 }]}