Java - Antarafungsian Antaramuka

Halo, pemaju Java masa depan! Hari ini, kita akan melakukan perjalanan yang menarik ke atas dunia Antarafungsian Antaramuka di Java. Jangan khawatir jika kamu baru mengenal pemrograman; Saya akan memandu kamu melalui konsep ini langkah demi langkah, seperti yang saya lakukan untuk pelbagai pelajar selama tahun tahun pengajaran saya. Jadi, rakamkan satu rakus kopi (atau minuman kesukaan kamu), dan mari kita melompat masuk!

Java - Functional Interfaces

Apa itu Antarafungsian Antaramuka?

Bayangkan jika kamu di atas rakaman, dan kamu diugaskan untuk peranan seorang DJ. Tugas kamu adalah mudah: untuk memainkan musik. Kamu tidak perlu bimbang tentang untuk menyajikan makanan atau untuk menghias tempat rakaman. Di Java, Antarafungsian Antaramuka adalah seperti DJ itu - hanya ada satu tugas khusus untuk dilakukan, dan ia melakukan itu dengan baik.

Dalam istilah teknikal, Antarafungsian Antaramuka adalah antaramuka yang mengandungi tepat satu method abstrak. Ia boleh memiliki method lain, tetapi mereka mesti adalah method default atau statik. Method abstrak tunggal adalah apa yang menjadikan Antarafungsian Antaramuka memiliki sifat "fungsional" itu.

Contoh 1: Antarafungsian Antaramuka Sederhana

@FunctionalInterface
interface penyapa {
void menyapa(String nama);
}

Dalam contoh ini, penyapa adalah Antarafungsian Antaramuka. Ia hanya memiliki satu method abstrak menyapa, yang mengambil parameter String dan tidak mengembalikan apa-apa (void).

Anotasi @FunctionalInterface

Mungkin kamu telah mengesan anotasi @FunctionalInterface di atas contoh kita. Ini adalah seperti meletakkan lencana "DJ" di atas antaramuka kita. Ia memberitahu Java, "Hey, antaramuka ini dimaksudkan untuk menjadi fungsional!" Jika kita kembali menambah method abstrak lain, Java akan memberikan kamu kesalahan, membantu kita menjaga sifat fungsional antaramuka kita.

Menggunakan Antarafungsian Antaramuka

Sekarang bahwa kita tahu apa itu Antarafungsian Antaramuka, mari kita lihat bagaimana kita boleh menggunakannya. Salah satu hal yang paling menarik tentang Antarafungsian Antaramuka adalah bahwa kita boleh menggunakannya dengan ungkapan lambda, yang adalah seperti cara singkat untuk menulis method.

Contoh 2: Menggunakan Antarafungsian Antaramuka dengan Ungkapan Lambda

public class UjianPenyapa {
public static void main(String[] args) {
Penyapa penyapaRamah = (nama) -> System.out.println("Halo, " + nama + "! Apa khabar?");
penyapaRamah.menyapa("Alice");

Penyapa penyapaFormal = (nama) -> System.out.println("Selamat pagi, " + nama + ". Saya harap kamu baik baik saja.");
penyapaFormal.menyapa("Mr. Smith");
}
}

Dalam contoh ini, kita membuat dua penyapa berbeza menggunakan antaramuka Penyapa kita. Ungkapan lambda (nama) -> ... adalah untuk mengimplementasikan method menyapa atas rakam. Ia seperti mengupah dua DJ berbeza untuk dua rakaman berbeza!

Apabila kamu menjalankan kod ini, kamu akan lihat:

Halo, Alice! Apa khabar?
Selamat pagi, Mr. Smith. Saya harap kamu baik baik saja.

Jenis Antarafungsian Antaramuka di Java

Java menyediakan beberapa Antarafungsian Antaramuka bawaan untuk menjadikan hidup kita lebih mudah. Mari kita lihat beberapa yang paling umum digunakan:

1. Predicate

Antaramuka Predicate<T> digunakan untuk fungsi boolean bernilai satu argumen. Ia seperti sebuah pertanyaan yang boleh dijawab dengan ya atau tidak.

import java.util.function.Predicate;

public class ContohPredicate {
public static void main(String[] args) {
Predicate<Integer> adalahDewasa = umur -> umur >= 18;

System.out.println("Adakah 20 adalah umur dewasa? " + adalahDewasa.test(20));
System.out.println("Adakah 15 adalah umur dewasa? " + adalahDewasa.test(15));
}
}

Ini akan menghasilkan:

Adakah 20 adalah umur dewasa? true
Adakah 15 adalah umur dewasa? false

2. Function<T,R>

Antaramuka Function<T,R> mewakili fungsi yang menerima satu argumen dan menghasilkan satu hasil. Ia seperti sebuah mesin yang mengambil sesuatu dan memberikan sesuatu yang lain.

import java.util.function.Function;

public class ContohFunction {
public static void main(String[] args) {
Function<String, Integer> panjangString = str -> str.length();

System.out.println("Panjang 'Halo': " + panjangString.apply("Halo"));
System.out.println("Panjang 'Java adalah hebat': " + panjangString.apply("Java adalah hebat"));
}
}

Ini akan menghasilkan:

Panjang 'Halo': 5
Panjang 'Java adalah hebat': 16

3. Consumer

Antaramuka Consumer<T> mewakili operasi yang menerima satu argumen masukan dan tidak menghasilkan apa-apa. Ia seperti sebuah lubang hitam yang mengkonsumsi data tetapi tidak menghasilkan apa-apa.

import java.util.function.Consumer;

public class ContohConsumer {
public static void main(String[] args) {
Consumer<String> pencetak = pesan -> System.out.println("Mencetak: " + pesan);

pencetak.accept("Halo, Antarafungsian Antaramuka!");
pencetak.accept("Java adalah menyenangkan!");
}
}

Ini akan menghasilkan:

Mencetak: Halo, Antarafungsian Antaramuka!
Mencetak: Java adalah menyenangkan!

4. Supplier

Antaramuka Supplier<T> mewakili penyedia hasil. Ia tidak menerima argumen tetapi menghasilkan nilai. Ia seperti mesin vending yang memberikan kamu sesuatu tanpa kamu meletakkannya apa-apa.

import java.util.function.Supplier;
import java.util.Random;

public class ContohSupplier {
public static void main(String[] args) {
Supplier<Integer> penyediaAngkaAcak = () -> new Random().nextInt(100);

System.out.println("Angka acak: " + penyediaAngkaAcak.get());
System.out.println("Angka acak lain: " + penyediaAngkaAcak.get());
}
}

Ini akan menghasilkan dua angka acak antara 0 dan 99, misalnya:

Angka acak: 42
Angka acak lain: 73

Antarafungsian Antaramuka Sebelum Java 8

Sebelum Java 8 memperkenalkan konsep Antarafungsian Antaramuka, Java memiliki beberapa antaramuka yang sesuai dengan definisi itu. Ini kebanyakan digunakan dalam pengendalian peristiwa dan pemrograman konkur. Mari kita lihat beberapa contoh:

1. Runnable

Antaramuka Runnable telah ada sejak awal tahun Java. Ia biasa digunakan untuk membuat thread.

public class ContohRunnable {
public static void main(String[] args) {
Runnable helloRunnable = () -> System.out.println("Halo dari sebuah thread!");
new Thread(helloRunnable).start();
}
}

Ini akan menghasilkan:

Halo dari sebuah thread!

2. Comparator

Antaramuka Comparator digunakan untuk menentukan urutan khusus bagi objek.

import java.util.Arrays;
import java.util.Comparator;

public class ContohComparator {
public static void main(String[] args) {
String[] names = {"Alice", "Bob", "Charlie", "David"};

Comparator<String> comparatorPanjang = (s1, s2) -> s1.length() - s2.length();

Arrays.sort(names, comparatorPanjang);

System.out.println("Diurutkan berdasarkan panjang: " + Arrays.toString(names));
}
}

Ini akan menghasilkan:

Diurutkan berdasarkan panjang: [Bob, Alice, David, Charlie]

Kesimpulan

Selamat! Kamu baru saja melakukan langkah pertama kamu ke atas dunia Antarafungsian Antaramuka di Java. Kita telah membahas apa itu, bagaimana menggunakannya, dan melihat beberapa jenis yang umum. Ingat, Antarafungsian Antaramuka adalah seperti alat khusus di atas rakum kamu di Java. Mereka membantu kamu menulis kode yang lebih bersih dan ekspresif.

Sebagai kamu terus menjalankan perjalanan Java kamu, kamu akan menemukan lebih banyak penggunaan untuk Antarafungsian Antaramuka. Mereka sangat kuat saat bekerja dengan stream dan koleksi, yang kita akanulas dalam pelajaran mendatang.

Teruskan untuk berlatih, tetap kuroi, dan yang paling penting, nikmati pemrograman! Java adalah sebuah bahasa yang luas dan menarik, dan kamu sudah di atas jalan untuk menguasainya. Sampaijumpa lagi, happy coding!

Credits: Image by storyset