[iOS] Swift vs Java – basic mode

swift vs java

Swift adalah bahasa pemrograman yang dibuat oleh Apple Inc. untuk menggantikan bahasa Objective C dalam mengembangkan aplikasi berbasis iOS. Sedangkan Java adalah bahasa pemrograman yang dipilih Google untuk mengembangkan aplikasi berbasis Android. Swift saat ini berstatus Open Source yang artinya dapat digunakan di platform non Apple seperti Windows dan Linux. Di postingan kali ini kita akan mencoba mengenal penggunaan basic dari Swift dan membandingkannya dengan bahasa Java. So let’s start !

1. Deklarasi Variable

Variable dalam bahasa Java bisa dideklarasikan di level class atau di level method. Hal ini juga berlaku untuk Swift. Perbedaannya adalah Swift tidak ‘memaksa’ kita untuk menentukan tipe variable pada saat pendeklarasian variable seperti pada bahasa Java. Hal ini dikarenakan Swift mempunyai fitur “type inference” yang secara otomatis menentukan tipe variable pada saat kita memberikan nilai variable ketika kita mendeklarasikannya.

Contoh deklarasi variable Java (level class) :

class Account {

	String firstName = “boni”;
	String lastName = “octavianus”;
}

Pada contoh listing program di atas, kita membuat class bernama “Account” dengan dua variable bernama “firstName” dan “lastName”.

Contoh deklarasi variable Swift (level class) :

class Account {

	var firstName = “boni”;
	var lastName = “octavianus”;
}

Pada contoh listing program di atas, kita membuat class bernama “Account” dengan dua variable bernama “firstName” dan “lastName” tanpa mendeklarasikan tipe variable, tetapi Swift secara otomatis membuat kedua variable tsb. mempunyai tipe String. Walaupun begitu kita bisa saja secara eksplisit menentukan tipe variable dengan cara menuliskan tipe variable setelah nama variable dengan dipisahkan oleh simbol colon (“:”).

class Account {

	var firstName : String = “boni”;
	var lastName : String = “octavianus”;
}

2. Nilai default instance variable

Perbedaan berikutnya yang pelu diperhatikan adalah dengan Java kita tidak perlu memberikan nilai default kepada setiap instance variable pada saat deklarasi variable, karena Java secara otomatis memberikan nilai default untuk kita (double = 0.0, int = 0, String = null, boolean = false).

class Account {

	String firstName;
	String lastName;
}

class AccountTest {
	
	public static void main (String[] args) {
		Account account = new Account();
		System.out.println(account.firstName); // null pointer exception
	}
}

Pada saat kita menjalankan program di atas, variabel firstName akan bernilai null, dan kita akan mendapatkan null pointer exception 😦

Sedangkan Swift ‘memaksa’ kita untuk memberikan nilai default untuk setiap instance variable yang kita buat pada saat mendeklarasikannya.

class Account {

	var firstName : String = “boni”;
	var lastName : String = “octavianus”;
	var middleName : String; // error not initialized
}

Oleh karena itu kita harus memberikan nilai default untuk setiap instance variable yang digunakan oleh class yang kita buat. Disini kita bisa secara langsung memberikan nilai pada instance variable pada saat mendeklarasikannya, atau dengan menggunakan initializer yang akan dibahas pada poin berikutnya.

3. Initializer vs Constructor

Java menggunakan constructor untuk memberikan nilai default kepada instance variable pada saat kita membuat objek dari class tsb. Constructor pada Java bisa menerima lebih dari satu parameter atau tidak sama sekali. Yang perlu diingat adalah jika kita tidak membuat constructor secara eksplisit, maka Java akan secara otomatis membuatkan constructor default untuk kita, yang tidak menerima parameter apapun.

class Account {

	// disini kita tidak membuat constructor secara eksplisit
	// Java akan secara otomatis membuatkan constructor untuk kita

	String firstName;
	String lastName;

	/** default constructor yang dibuatkan oleh Java untuk kita
	Account() {
		firstName = null;
		lastName = null;
	}
	**/
}

Swift menggunakan initializer untuk memberikan nilai default kepada instance variable pada saat kita membuat objek dari class tsb. Initializer pada Swift bisa menerima lebih dari satu parameter atau tidak sama sekali. Yang perlu diingat adalah Swift tidak akan secara otomatis membuatkan initializer default untuk kita, seperti yang dilakukan oleh Java dalam hal constructor.

class Account {

	var firstName : String;
	var lastName : String;

	// disini kita harus membuat initializer secara eksplisit
	// Swift akan memberikan pesan error
	// error : class ‘Account’ has no initializers
	// error : stored property ‘firstName’ without initial value
	// error : stored property ‘lastName’ without initial value 
}

oleh karena itu kita harus membuat initializer secara eksplisit :

class Account {

	var firstName : String;
	var lastName : String;

	// disini kita membuat initializer secara eksplisit
	// untuk memberikan nilai default untuk instance variable

	init() {
		firstName = “”;
		lastName = “”;
	}
}

Pada contoh listing program di atas, kita memberikan nilai “” pada kedua instance variable karena Swift tidak akan memberikan nilai default seperti yang dilakukan oleh Java (nilai default untuk String pada Java adalah null). Di bawah ini adalah contoh untuk membuat initializer yang menerima parameter :

class Account {

	var firstName : String;
	var lastName : String;

	// disini kita membuat initializer secara eksplisit
	// yang menerima dua parameter bertipe String
	// untuk memberikan nilai default kedua instance variable
	
	init(firstName : String, lastName : String) {
		self.firstName = firstName;
		self.lastName = lastName;
	}
}

var account = Account(firstName : “boni”, lastName : “octavianus”);
print(“Full Name : “ + account.firstName + “ “ + account.lastName);

4. “self” vs “this”

Java menggunakan keywordthis” untuk menunjuk objek dari class ini, sedangkan Swift menggunakan keyword “self”.

5. Method

Method adalah kelompok kode program yang bisa digunakan berkali-kali yang disimpan di dalam class. Pada Java sebuah method harus mempunyai return type, bisa menerima parameter, dan bisa membuat local variable. Swift pun demikian meskipun berbeda sedikit pada sintaksnya.

Java :

class Account {

	String firstName = “boni”;
	String lastName = “octavianus”;

	// return type adalah void (tidak mengembalikan apapun)
	void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	// return type adalah void (tidak mengembalikan apapun)
	void setLastName(String lastName) {
		this.lastName = lastName;
	}

	// return type adalah String
	String getFirstName() {
		return firstName;
	}

	// return type adalah String
	String getLastName() {
		return lastName;
	}
}

Swift :

class Account {

	var firstName : String = “boni”;
	var lastName : String = “octavianus”;

	// return type tidak mengembalikan apapun
	func setFirstName(firstName : String) {
		self.firstName = firstName;
	}

	// return type tidak mengembalikan apapun
	func setLastName(lastName : String) {
		self.lastName = lastName;
	}

	// return type mengembalikan String
	func getFirstName() -> String {
		return firstName;
	}

	// return type mengembalikan String
	func getLastName() -> String {
		return lastName;
	}
}

6. Constant

Constant / Konstanta adalah variable yang nilainya tidak dapat diganti ketika telah diberikan nilai. Java menggunakan keywordfinal” dan biasanya menambahkan “static” untuk membuat sebuah constant. Biasanya nama dari constant menggunakan huruf kapital dan underscore untuk menggantikan spasi. Swift juga mempunyai constant dengan definisi yang sama dengan Java. Tetapi Swift menggunakan keyword “let”, dan biasanya tidak menggunakan huruf kapital ataupun underscore untuk menggantikan spasi.

Java :

static final String COMPANY_NAME = “company_name”;

Swift :

let companyName : String = “company_name”;

7. Class inheritance

Java menggunakan keywordextends” untuk menggunakan inheritance atau subclassing, sedangkan Swift menggunakan simbol colon (“:”). Selain itu yang perlu diperhatikan adalah Java mengharuskan kita memanggil constructor super class sebelum kita menggunakan constructor pada subclass. Sedangkan Swift adalah kebalikannya, artinya kita harus menggunakan initializer pada subclass sebelum kita memanggil initializer pada super class.

Java :

class Account {

	String firstName;
	String lastName;

	// constructor
	Account(String firstName, String lastName) {
		this.firstName = firstName;
		this.lastName = lastName;
	}
}

class GameAccount extends Account {

	String userName;

	// constructor
	GameAccount(String firstName, String lastName, String userName) {
		super(firstName, lastName); // memanggil constructor super class
		this.userName = userName; // menggunakan constructor sub class
	}
}

Swift :

class Account {

	var firstName : String;
	var lastName : String;

	// initializer
	init(firstName : String, lastName : String) {
		self.firstName = firstName;
		self.lastName = lastName;
	}
}

class GameAccount : Account {

	var userName : String;

	// initializer
	init(firstName : String, lastName : String, userName : String) {
		self.userName = userName; // menggunakan constructor sub class
		super.init(firstName : firstName, lastName : lastName); // memanggil constructor super class
	}
}

And that’s all kira-kira beberapa perbedaan dasar antara Swift dengan Java, and postingan kali ini hanya membahas sebagian kecil saja hehe. Next mudah-mudahan bisa post artikel lain lagi mengenai Swift.

Thanx for reading 🙂

Reference : Apple Developer
Image : SwiftJava

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google

You are commenting using your Google account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s