☕️ Class pada Java

☕️ Class pada Java

Photo by The Climate Reality Project on Unsplash

Setelah kesana kemari dan tertawa, emang lumayan bingung juga sih bahas materi satu ini, dan lumayan menantang juga. Soalnya sih bisa di bilang ini udah masuk materi lanjutan untuk pembelajaran bahasa Java, bisa juga dibilang sebagai dasar dari materi selanjutnya yaitu Object Oriented Programming atau yang biasa disingkat OOP.

Class pada Java

Di Java, khususnya di konsep OOP ini, kita harus terbiasa bertemu dengan yang namanya class dan object. Keduanya bisa di katakan hampir sama sob, tapi berbeda. Labil banget si :(

Class ini berisi dari kumpulan perkara yang dibuat untuk tujuan tertentu. Misalnya kalo kita ingin buat dalgona coffee nih, atau buat kopi susu deh, kita harus membuat/menyiapkan terlebih dahulu bahan-bahannya. Misalnya kita perlu class Coffee, terus class Milk, terus kalo mau terasa manis tambahin class Aren, dan sentuhan terakhir agar lebih creamy, kita tambahkan class Creamer. Voila, jadilah program KopiSusu. Paansi :(

Sedangkan object sendiri adalah apa sih gunanya bahan-bahan/class-class diatas. Misalnya, class Coffee ini merupakan class utama dari kopi susu. Mau disebut kopi gimana kalo gak ada kopinya? So, kita gak bisa bikin program KopiSusu tanpa class Coffee, sama halnya juga kalo program ini tanpa class Milk. Aku tanpamu, butiran debu. Terus ada juga class Aren, yang gunanya itu membuat si kopi menjadi manis, dan class Creamer yang akan membuat si KopiSusu ini lebih creamy dan menambah kegurihan si program. So jadilah ia program KopiSusu.

Baca Juga : this pada Pemrograman Java

Sederhana kan? Kita recap sedikit ya. Class merupakan kumpulan perkara yang dibuat untuk tujuan tertentu. Sedangkan object, merupakan kegunaan dari class-class yang dibuat tersebut. Susah ya? Semoga di permudah aja deh yaa. Yo, yang mau diskusi bisa drop di bawah ya!
✨ Constructor Kotlin

✨ Constructor Kotlin


Photo by Filip Kominik on Unsplash

Hallo sob. Masih seputar Kotlin ya, kali ini ane pengen bahas tentang Class di Kotlin. Layaknya Java, Kotlin juga punya class. Lalu perbedaannya apa sih?

Class di Kotlin di deklarasikan menggunakan keyword “class”. Sama aja sih ya kaya Java. Deklarasi class ini terdiri dari nama class-nya, header-nya (ada parameter-parameternya, constructor utama dan yang lainnya) dan body-nya yang biasanya tuh di bungkus sama kurung kurawal ({}).

class Example

Cosntructor

Sebuah class di Kotlin bisa memiliki satu constructor utama dan satu atau lebih constructor lainnya. Constructor utama merupakan bagian dari header class, setelah nama class sob. Kita bisa nambahin parameter-parameter juga di constructor utama ini.

Nah untuk inisialisasi variable dari constructor utama, Kotlin sendiri punya syntax yang ringkas, yaitu val dan var. val ini kita gunakan untuk property yang hanya bisa kita baca value-nya atau read-only. Sedangkan var, value-nya itu bisa kita ubah-ubah sob.

Kita juga bisa ngilangin si tulisan constructor kalo misal parameter-parameternya itu gak ada yang pake access modifier dan atau anotasi.

class Example(val type: String) {
  // Hello Example
}

Constructor utama tidak boleh berisi kode apapun. Untuk inisialisasi, kita bisa pake initializer block ya, yang pake keyword init itu loh sob.

class InitOrderDemo(name: String) {
  val firstProperty = "First property: $name".also(::println)
    
  init {
    println("First initializer block that prints ${name}")
  }
  
  val secondProperty = "Second property: ${name.length}".also(::println)
    
  init {
    println("Second initializer block that prints ${name.length}")
  }
}

fun main() {
  InitOrderDemo("hello")
}

Selain constructor utama, kita juga bisa membuat secondary constructor yang diawali dengan constructor.

import java.util.Arrays

class KotlinSecondaryConstructor {
  constructor(name: String) {
    println("This is Secondary Constructor, passed parameter is $name")
  }
}

fun main(args: Array) {
  KotlinSecondaryConstructor("Kursi Goyang")
}

Kalo di dalam class udah ada primary constructor-nya dan kita pengen nih buat secondary constructor, kita perlu mendelegasikan primary constructor-nya terlebih dahulu di secondary constructor. Delegasi ke constructor lain itu sangat sederhana sekali, cukup menggunakan keyword this.

import java.util.Arrays

class KotlinSecondaryConstructor(name: String) {
    
    init {
        println("This is Primary Constructor, passed parameter is $name")
    }
    
    constructor(name: String, age: Int): this(name) {
        println("This is Secondary Constructor, passed parameter is $name and $age")
    }
}

fun main(args: Array) {
    KotlinSecondaryConstructor("Kursi Goyang Doang")
    KotlinSecondaryConstructor("Kursi Goyang", 2)
}

Perlu di catet nih sob, kalo initializer itu bisa dibilang merupakan bagian dari constructor utama. Delegasi dari constructor utama itu terjadi barengan sama eksekusi secondary constructor sob. Jadi semua kode yang ada di initializer itu bakal di eksekusi sebelum delegasi/secondary constructor yg kita buat. Bahkan kalo kondisinya itu si class ga punya constructor utama, si initializer ini bakal dieksekusi sebelum secondary constructor.

Lalu, kalo class non-abstract gak punya constructor samsek, baik itu primary maupun secondary, ia bakal meng-generate primary constructor kosong, yang tanpa argument, dan visibility-nya itu bakal public sob. So, kalo sobat pengen buat visibility-nya gak public, ya tinggal kita tambahin constructor kosong sebagai constructor utamanya.

import java.util.Arrays

class PublicVisibility constructor() {
  init {
    println("Empty constructor")
  }
}

class PrivateVisibility private constructor() {
  init {
    println("Empty constructor private")
  }
}

fun main(args: Array) {
  PublicVisibility()
    
  // [Error] Cannot access '': it is private in 'PrivateVisibility'
  PrivateVisibility()
}

Note:
Sebuah hal yang menurut ane keren di Kotlin itu adalah default value. Kita bisa passing default value di parameter sob. Kita ambil case-nya itu parameter constructor. Kerennya kalo misal kita gak nge-passing value ke instance class-nya, si JVM bakal ngambil default value yang kita set sebelumnya.

import java.util.Arrays

class DefaultValue(val name: String = "Kursi Goyang") {
  init {
    println(name)
  }
}

fun main(args: Array) {
  DefaultValue()
}

Instansiasi Class

Kalo di java kita banyak nulis new, new dan new, di kotlin kita tinggal panggil constructornya aja sob, tanpa new, new dan new.

import java.util.Arrays

class DefaultValue() {
  fun print(text: String) {
    println(text)
  }
}

fun main(args: Array) {
  // Instansiasi class DefaultValue
  val dv = DefaultValue()
  dv.print("Coba dong")
}

Perlu di catat nih ya, Kotlin gak punya keyword yang namanya new, so buat instansiasi, ya tinggal panggil aja constructornya tanpa new.

Yo, segitu dulu aja ya kalo ada yg belum di pahami boleh kok simpen di komentar, kita diskusi bareng ya. Salam sigoy!
✨ Inheritance Kotlin

✨ Inheritance Kotlin


Photo by Philipp Berndt on Unsplash

Kali ini ane ingin share tentang Inheritance atau Pewarisan di Kotlin. Sama halnya dengan pewarisan yang ada pada Bahasa Java, Inheritance berarti mengakuisisi/memperoleh property-properti yang ada pada parent class ke child class.

Pada Bahasa Kotlin, base class-nya dinamai “Any”, yang merupakan super class dari class apapun yang di deklarasikan di Kotlin. Secara default, Kotlin memiliki superclass “Any”, yang merupakan superclass default untuk class yang tidak di deklarasikan dengan supertypes. Contohnya

class Example

Sebenarnya, class-class Kotlin itu final, alias gak bisa di inherit-in. Untuk bisa kita inherit-in itu, kita cukup tandain aja pake keyword open. Untuk mendeklarasikan supertype nya apa, kita cukup menggunakan titik dua di header class.

import java.util.Arrays

open class Parent() {
  fun printParent() {
    print("This is from Parent")
  }
}

class Child() : Parent() {
    
}

fun main(args: Array) {
  val a = Child()
  a.printParent()
}

Nah, sekarang bagaimana sih cara untuk meng-override method printParent di child? Sederhana sih sob, berikut contohnya:

import java.util.Arrays

open class Parent() {
  open fun printParent() {
    print("This is from Parent")
  }
}

class Child() : Parent() {
  override fun printParent() {
    print("This is from Child")
  }
}

fun main(args: Array) {
  val a = Child()
  a.printParent()
}
☕️ public static void main(String args[])

☕️ public static void main(String args[])

public static void main

JVM bakalan selalu liat method signature tertentu untuk mulai menjalankan sebuah aplikasi dan method tersebut harusnya public static void main(String args[]). args disini merupakan sebuah argument dari tipe String array. Argument String array bisa kita tulis String[] args juga. Meskipun tipe argument String array ini bersifat tetap, kita masih bisa ganti nama args ini dengan kata/nama apapun.

class KursiGoyang {
  public static void main(String args[]) {
    System.out.println("Halo, Dunia!");
  }
}

Pada contoh diatas, kita pake public static void main. Tiap katanya itu punya beberapa arti dan tujuan sob.

Public

Si public ini merupakan access modifier, yang nentuin siapa/apa aja sih yang bisa ngakses method yang pake access modifier ini. Public berarti method bakalan bisa diakses sama class apapun dengan catatan, class-class lain bisa akses class-nya.

Static

Static ini merupakan sebuah keyword yang mengidentifikasi hal-hal yang berhubungan dengan class. Sederhananya sih, kita bisa manggil sesuatu yang static tanpa harus menginstansiasi class-nya.

Void

Void ini kita pake untuk menetapkan tipe return dari sebuah method. Nah, kalo kita pake si void ini, method gak akan me-return (mengembalikan) nilai apapun.

main

main ini nama method sob. Sesuai dengan penulisan method dalam bahasa Java. Gak boleh diganti nih si main ini, soalnya method main ini di cari sama JVM sebagai starting point untuk sebuah aplikasi.

String args[] / String... args

Terakhir ada si args. Sebuah parameter yang bertipe String array. Kita bisa ganti kata args dengan kata apapun, selama tipenya gak diganti ya sob.

Baca Juga : this pada Pemrograman Java

Nah itulah dia main method yang sering kita temui. Udah tahu kan kenapa sih si main ini sering muncul. Semoga bermanfaat ya!
☕️ this pada Pemrograman Java

☕️ this pada Pemrograman Java

this adalah sebuah keyword dalam bahasa Java. Keyword ini digunakan di dalam method atau constructor pada sebuah class. this ini bekerja sebagai acuan dari object saat ini, yang object tersebut bisa berupa method atau constructor yang dipanggil. this ini juga bisa digunakan untuk memanggil objek di dalam suatu instance method atau constructor.

Keyword this bisa sangat berguna dalam menangani Variable Hiding. Kita itu gak bisa buat dua variabel lokal atau dua variabel instance dengan nama yang sama. Namun, sah-sah saja jika kita buat satu variabel instance dan satu local variable atau parameter method dengan nama yang sama. Variabel lokal akan menyembunyikan variabel instance, inilah yang kita sebut Variable Hiding.
class KursiGoyang {
 int iniVariabel = 5;

 public static void main(String args[]) {
  KursiGoyang obj = new KursiGoyang();
  obj.iniMethod(20);
  obj.iniMethod();
 }

 void iniMethod(int iniVariabel) {
  iniVariabel = 10;
  System.out.println("Nilai iniVariabel adalah : " + iniVariabel);
 }

 void iniMethod() {
  int iniVariabel = 40;
  System.out.println("Nilai iniVariabel adalah : " + iniVariabel);
 }
}
Outputnya adalah sebagai berikut :
Nilai iniVariabel adalah 10
Nilai iniVariabel adalah 40
Seperti yang bisa kita liat, variabel instance tersembunyi, dan nilai dari local variabel (atau parameter dari method) lah yang ditampilin, bukan variabel instance. Untuk menyelesaikan masalah tersebut, digunakanlah keyword this diikuti dengan field/variabel untuk menampilkan hasil dari variabel instance.
class KursiGoyang {
 int iniVariabel = 5;

 public static void main(String args[]) {
  KursiGoyang obj = new KursiGoyang();
  obj.iniMethod(20);
  obj.iniMethod();
 }

 void iniMethod(int iniVariabel) {
  iniVariabel = 10;
  System.out.println("Nilai iniVariabel adalah : " + this.iniVariabel);
  System.out.println("Nilai iniVariabel adalah : " + iniVariabel);
 }

 void iniMethod() {
  int iniVariabel = 40;
  System.out.println("Nilai iniVariabel adalah : " + this.iniVariabel);
  System.out.println("Nilai iniVariabel adalah : " + iniVariabel);
 }
}
Outputnya adalah sebagai berikut :
Nilai iniVariabel adalah 5
Nilai iniVariabel adalah 10
Nilai iniVariabel adalah 5
Nilai iniVariabel adalah 40
This Keyword

Keyword this pada ConstructorKeyword this juga bisa kita gunakan di dalam sebuah contructor untuk memanggil constructor lain di class yang sama. Pemanggilan ini disebut Explicit Constructor Invocation. Hal ini terjadi jika sebuah class memiliki dua constructor, satu yang tanpa argument, dan satu lagi punya argument. Lalu, si this keyword bisa kita pake untuk manggil constructor yang punya argument dari constructor yang gak punya argument, soalnya constructor yang punya argument gak bisa kita panggil secara eksplisit.

Note:
  • this ini cuman bisa jadi statement pertama di constructor
  • Constructor bisa punya keyword this atau super, tapi gak bisa punya keduanya
class KursiGoyang {

 KursiGoyang() {
  this("KursiGoyang");
  System.out.println("Di dalam Constructor tanpa Parameter");
 }

 KursiGoyang(String str) {
  System.out.println("Di dalam Constructor pake Parameter : " + str);
 }

 public static void main(String args[]) {
  KursiGoyang obj = new KursiGoyang();
 }
}
Outputnya adalah sebagai berikut :
Di dalam Constructor pake Parameter KursiGoyang
Di dalam Constructor tanpa Parameter

Keyword this pada Method

Keyword this juga bisa kita pake didalam method untuk memanggil method lain dari class yang sama.
class KursiGoyang {

 public static void main(String args[]) {
  KursiGoyang obj = new KursiGoyang();
  obj.methodKedua();
 }

 void methodPertama() {
  System.out.println("Di dalam Method Pertama");
 }

 void methodKedua() {
  System.out.println("Di dalam Method Kedua");
  this.methodPertama();
 }
}
Outputnya adalah sebagai berikut :
Di dalam Method Kedua
Di dalam Method Pertama
Nah, itulah pembahasan tentang keyword this. Semoga bermanfaat ya dan jangan lupa bahagia sob!

Artikel ini hasil terjemahan dari https://javabeginnerstutorial.com/core-java-tutorial/this-keyword-java/
PreferenceManager Android Deprecated?

PreferenceManager Android Deprecated?

Belakangan ini, selama proses build aplikasi Android, ane sering nemuin warning warna merah bertuliskan PreferenceManager.getDefaultSharedPreferences has deprecated. Setelah mencari kesana kemari ternyata nemu penyebab dan solusinya.

Key - Android SharedPreference

Menurut sumber yang ane dapet sih, di Android Q, method untuk inisialisasi SharedPreference tersebut udah deprecated alias usang. Solusinya adalah dengan migrasi ke AndroidX. Kenapa harus ke AndroidX? Karena, ada method baru yang bisa kita gunakan untuk inisialisasi SharedPreference di AndroidX. Sebenernya sih bukan bawaan AndroidX nya, tapi kita harus implement salah satu library dari Android nya sendiri :

Untuk yang pake Java
implementation "androidx.preference:preference:1.1.0"
Untuk yang pake Kotlin
implementation "androidx.preference:preference-ktx:1.1.0"
Nah itu dia sob, solusi yang mungkin bisa membantu ketika nemu warning terkait SharedPreference ini. Sebenernya agak ribet juga sih kalo emang harus migrate ke AndroidX, apalagi jika kita masih pake library yang belum support AndroidX atau yang udah gak di support sama si pemilik library-nya. Kalo kasusnya begitu ya mau gak mau ganti library atau bedah librarynya sendiri hehe . . Jangan lupa bahagia ya sob!

Referensi :