JavaRush /Java Blog /Random-ID /Rehat kopi #109. Keterampilan yang paling dibutuhkan dala...

Rehat kopi #109. Keterampilan yang paling dibutuhkan dalam pengembangan Java saat ini. 7 Tip Opsional Java untuk Menghilangkan Kekacauan Kode

Dipublikasikan di grup Random-ID

Keterampilan yang paling dibutuhkan dalam pengembangan Java saat ini

Sumber: Medium Java tetap menjadi salah satu bahasa pemrograman paling populer dan paling banyak diminati, meskipun usianya sudah hampir seperempat abad. Oleh karena itu, masuk akal untuk berasumsi bahwa popularitas Java akan terus meningkat dan pengembang Java akan melihat permintaan yang lebih besar dari perusahaan di masa depan. Rehat kopi #109.  Keterampilan yang paling dibutuhkan dalam pengembangan Java saat ini.  7 Tip Opsional Java untuk Menghilangkan Kekacauan Kode - 1Untuk menciptakan produk berkualitas, pengembang harus mengikuti perkembangan alat Java terbaru dan meningkatkan keterampilan dan pengetahuan teknis mereka. Di bawah ini kami menyajikan enam keterampilan penting yang diperlukan untuk pengembang Java.

1. Pengetahuan yang sangat baik tentang Java 8

Meskipun versi Java yang lebih baru sudah banyak digunakan, semua calon pengembang Java memerlukan pengetahuan dan pengalaman mendalam dengan Java 8. Beberapa fitur Java 8 yang paling berguna meliputi:
  • Metode standar dan statis untuk membuat antarmuka dengan implementasi metode.
  • Antarmuka fungsional yang hanya memiliki satu metode abstrak dan membantu pengembang menghindari penambahan metode abstrak lainnya.
  • Ekspresi Lambda yang membantu menciptakan antarmuka fungsional.
  • Java Stream API untuk mengaktifkan eksekusi paralel dan berurutan.
  • Metode baru di Collection API.
Semua fitur ini menjadikan Java 8 sangat diperlukan untuk pemrograman fungsional. Pemrograman fungsional memberikan konkurensi dan singkatnya kode, serta membantu membuat aplikasi beban tinggi dengan kode yang dioptimalkan. Java 8 juga menjadi dasar pengoptimalan kode asli, memungkinkan pengoptimalan pengembangan dalam bahasa lain seperti Scala, Kotlin, dan Grails.

2. Pengalaman dalam pengujian

Pengujian unit di Java adalah topik yang agak kontroversial. Beberapa pengembang berpendapat bahwa menulis pengujian unit hanya membuang-buang waktu, namun kami sangat yakin bahwa keterampilan pengujian unit adalah suatu keharusan bagi setiap pengembang Java profesional. Pengujian unit memungkinkan Anda menguji setiap blok kode dan memastikan bahwa produk akhir berfungsi tanpa kesalahan. Oleh karena itu, jika seorang pengembang ingin meningkatkan keterampilan dan pengetahuannya, ia perlu mempelajari cara menggunakan alat pengujian yang paling populer dan efektif. Kerangka pengujian utama yang perlu Anda pahami adalah perpustakaan JUnit 5. Alat lainnya meliputi:
  • Kerangka Robot
  • Mockito
  • KekuatanMock
Selain pengujian unit, pengembang Java tidak boleh melupakan metode pengujian lainnya (pengujian sistem, pengujian penerimaan, dan pengujian integrasi). Hal ini memungkinkan Anda melakukan pengujian komprehensif terhadap perangkat lunak dan memastikan tidak ada kesalahan, bug, atau kegagalan kritis. Hal utama yang perlu diingat tentang pengujian adalah bahwa perubahan kecil akan membawa hasil yang besar. Jika Anda tidak ragu untuk meluangkan waktu dan tenaga dalam pengujian unit, Anda akan kagum dengan peningkatan kualitas pekerjaan Anda.

3. DevOps

Meski tidak diwajibkan, mempelajari DevOps dan prinsip-prinsipnya dapat bermanfaat bagi Anda sebagai pengembang dan perusahaan tempat Anda bekerja. Fleksibilitas dan pengorganisasian proses DevOps memungkinkan perusahaan mengoptimalkan kualitas produk mereka dan menyederhanakan operasi. dan juga meningkatkan transparansi proses. DevOps di Java pada dasarnya adalah penerapan DevOps untuk pengembangan Java. Ini termasuk:
  • Pengiriman dan integrasi berkelanjutan.
  • Bekerja dengan layanan mikro, bukan monolit.
  • Infrastruktur sebagai kode.
  • Pengujian otomatis.
DevOps adalah bidang yang luas dan memerlukan banyak waktu dan sumber daya untuk mempelajarinya. Namun jika Anda seorang pengembang Java, mempelajari DevOps akan bermanfaat karena memungkinkan Anda menjadi insinyur DevOps di masa depan. Jika Anda tidak ingin menjadi insinyur DevOps atau perusahaan Anda tidak tertarik, tidak apa-apa juga. Perlu diingat bahwa DevOps menjadi semakin populer di komunitas Java.

4. Pengetahuan tentang perpustakaan dan API Java.

Karena Java adalah salah satu bahasa pemrograman terkemuka di dunia, tidak mengherankan jika Java memiliki banyak sekali API dan perpustakaan yang tersedia untuk digunakan. Alat-alat ini sangat menyederhanakan proses pengembangan dan memungkinkan pengembang dengan cepat membuat perangkat lunak yang andal. Di bawah ini kami telah mencantumkan seperangkat alat dasar yang diketahui dan dapat digunakan dengan percaya diri oleh pengembang Java mana pun. Alat-alat berikut membantu Anda dengan cepat membangun aplikasi dan mengelola data serta penyimpanannya secara efektif:
  • Gradle (alat untuk membangun aplikasi);
  • Maven (sedikit ketinggalan jaman tapi masih populer, juga digunakan untuk membangun aplikasi);
  • Paket Standar Java 8;
  • Kerangka Musim Semi;
  • JPA ORM (Hibernasi, TopLink);
  • Basis data NoSQL (MongoDB, Cassandra).
Sedangkan untuk API, untuk bekerja dengan inti Java API, pengembang harus memiliki pengetahuan yang baik tentang OpenJDK, Android, Oracle, dan IS2T. Keuntungan besar dari alat ini adalah semuanya dilengkapi dengan dokumentasi yang terperinci dan informatif. Selain itu, pengembang selalu bisa mendapatkan dukungan komunitas, yang juga merupakan keuntungan besar.

5. Pengetahuan yang percaya diri tentang Spring dan Spring Boot

Spring Framework adalah kerangka kerja yang paling umum digunakan untuk mengembangkan aplikasi berbasis Java, jadi penting bagi pengembang untuk mengetahui cara bekerja dengannya. Salah satu manfaat utama Spring adalah injeksi ketergantungan, yang memungkinkan Anda membuat aplikasi yang digabungkan secara longgar dan memberikan lebih banyak fleksibilitas kepada pengembang. Spring juga sangat ringan, mendukung konfigurasi XML, anotasi, dan pemrograman deklaratif. Jadi jika Anda ingin menguasai keterampilan pengembangan Java, Anda juga harus menguasai penerapan Spring. Spring Boot adalah iterasi Spring yang menyediakan alat praktis untuk menyebarkan aplikasi dengan cepat. Dapat dikatakan bahwa Spring Boot menggunakan Spring sebagai basis dan membangun fitur-fiturnya sendiri di atasnya. Meskipun Spring berfokus pada fleksibilitas, Spring Boot membantu mengurangi kode dan menyederhanakan proses pengembangan. Ini menawarkan fitur-fitur unik kepada pengembang, membantu membangun aplikasi mandiri, dan secara keseluruhan lebih mudah diluncurkan dan dikelola. Spring Boot sangat bagus untuk layanan mikro dan aplikasi yang perlu dibangun dengan cepat, karena membuatnya cepat dan mudah untuk menyiapkan dan menjalankan aplikasi untuk berbagai lingkungan (produksi, pengujian, kualitas, CI/CD). Spring dan Spring Boot telah diperluas dengan kemampuan pemrograman React, yang merupakan tren hangat lainnya di komunitas pengembang. Spring 5, misalnya, kini memiliki WebFlux untuk menerapkan pendekatan reaktif terhadap pemrograman dan menyelesaikan sistem terdistribusi yang kompleks.

6. Pengalaman dengan Big Data

Big Data adalah tren berkembang yang harus diikuti dan diadopsi oleh pengembang untuk memenuhi permintaan pasar. Alat utama yang biasa digunakan oleh pengembang Java profesional adalah:
  • Apache Spark
  • Apache Kafka
  • Hadoop (untuk pemrosesan batch)
Apache Spark adalah platform pemrosesan Big Data terdistribusi yang menyediakan pengikatan asli untuk Java. Kerangka kerja ini menjadi sangat populer karena fitur dan kinerjanya dan saat ini merupakan alat data besar yang paling disukai di komunitas Java. Apache Spark dapat berjalan dalam mode mandiri cluster dan untuk ini Anda hanya memerlukan lingkungan Apache Spark dan JVM (untuk setiap mesin di cluster). Spark juga sangat cepat dan memiliki Spark API yang sangat ramah pengguna. Hadoop merupakan platform penyimpanan data yang juga terkenal di kalangan pengembang Java. Meskipun Hadoop tidak secepat Spark, Hadoop tetap menjadi salah satu alat paling populer untuk menangani data besar. Hal ini juga disebabkan oleh fakta bahwa Hadoop (dan solusi serupa) memiliki sejumlah besar plugin yang memungkinkan Anda memecahkan masalah pemrosesan Big Data secara efisien dan secara umum mengoptimalkan kinerja Hadoop (termasuk dukungan untuk pemrosesan aliran waktu nyata).

7 Tip Opsional Java untuk Menghilangkan Kekacauan Kode

Sumber: Medium “Saya punya rekan yang belum tahu tentang keberadaan Opsional,” tulis salah satu pengembang Java di Reddit. Bisakah kita menganggap bahwa Opsional meningkatkan “keterbacaan” kode? Apakah layak menggunakannya sepanjang waktu? Di manakah penggunaan Opsional yang sama sekali tidak diperlukan? Karena banyak pengembang yang masih belum mengetahui cara menggunakan Opsional dengan benar, saya akan memberikan 7 contoh penyalahgunaan Opsional dan apa yang harus dilakukan untuk mengatasinya. Rehat kopi #109.  Keterampilan yang paling dibutuhkan dalam pengembangan Java saat ini.  7 Tips Opsional Java untuk Menghilangkan Kekacauan Kode - 2

1. Jangan gunakan Opsional untuk pemeriksaan nol

Menggunakan Opsional alih-alih centang nol hanya menambah kekacauan. Tidak ada manfaat dari ini. Ini juga merupakan kesalahan untuk menggunakan Opsional dan metode isPresent dan get . Pengembang percaya bahwa get harus berfungsi seperti yang diharapkan. Mereka kemudian menambahkan isPresent dan kembali ke pemeriksaan nol. Ingatlah bahwa Opsional tidak memperbaiki pemeriksaan nol Anda. Lain kali Anda melihat isPresent dan dapatkan (atau ElseThrow ) ubah potongan kode ini. Gunakan pemetaan dan orElse untuk menghapus pemeriksaan nol standar, dan gunakan Opsional dengan lebih selektif. Inilah salah satu contoh yang bagus:
var user = userService.getCurrentUser();
if(user == null) {
    return "(unknown)";
}
var username = user.getUsername();
if (username == null) {
    return "(unknown)";
}
return username;
vs

var user = userService.getCurrentUser();
if(user.isEmpty()) {
    return "(unknown)";
}
var username = user.orElseThrow().getUsername();
if (username == null) {
    return "(unknown)";
}
return username;
vs

return userService.getCurrentUser()
                  .map(User::getUsername)
                  .orElse("(unknown)");
Anda bisa memulai dengan target Opsional. Tujuan Opsional adalah untuk mewakili nilai opsional yang hilang. Kemudian kembali ke masalah Anda dan lihat apakah itu berhasil untuk Anda. Cara lain untuk menangani pemeriksaan nol adalah dengan menggunakan anotasi. Nullable atau NotNull seharusnya berfungsi dengan baik. Benar, mereka dapat mencemari kode Anda, dan mereka hanya melindungi pada waktu kompilasi. Untuk memeriksa waktu proses gunakan Objects.requireNonNull .

2. Lakukan penanganan error yang tepat

Terkadang null mewakili pengecualian. Dan ini adalah cara yang salah untuk menandakan kesalahan dan pengecualian. “Ada yang tidak beres, dan ini nihil” adalah anti-pola yang harus dihindari. Selain itu, Anda tidak boleh menggunakan Opsional untuk mencakup pengecualian. Berikut ini contohnya.
public Optional<MyObject> getMyObject(final String jql) {
    try {
        return Optional.ofNullable(get(sql));
    } catch (final JqlParseException e) {
        return Optional.empty();
    }
}
Mengapa objek saya kosong? Ini bisa berupa kesalahan atau nilai kosong. Jadi, Anda akan kembali mendapatkan hasil yang ambigu dan menghapus manfaat Opsional sebagai hasilnya. Kode ini ada karena orang mencoba menggunakan Opsional untuk aliran kontrol. Opsional akan menghapus beberapa angka nol dari basis kode Anda. Namun Anda masih perlu menggunakan konstruksi coba-tangkap untuk menangani pengecualian. Gunakan try-catch untuk menangani pengecualian dengan benar. Jangan hapus Opsional saat menangani kesalahan, tunggu saja dan itu akan berfungsi dengan sempurna. Tapi ada satu pengecualian di sini - tangkapan kosong . Jika Anda tidak tahu apa yang harus dikembalikan dalam tangkapan kosong, Opsional kosong akan berfungsi dengan baik.
private int readExpirationAsInt(Milk milk)
{
  String expiration = milk.getExpiration();
  try {
    return Integer.parseInt(expiration);
  }
  catch(NumberFormatException ignored) {}

  return 0;
}


private OptionalInt readExpirationAsInt(Milk milk)
{
  String expiration = milk.getExpiration();

  try {
    return Optional.of(Integer.parseInt(expiration));
  }
  catch(NumberFormatException e) {
    return OptionalInt.empty();
  }
}

3. Jangan kembalikan null dari metode opsional

public static Optional<POSType> getPOSType(String posName) {
    if (StringUtils.isNotBlank(posName)) {
        return Arrays.stream(POSType.values())
                .filter(type -> type.toString().equalsIgnoreCase(posName))
                .findFirst();
    }
    return null;
}
Ini menggagalkan tujuan Opsional. Ini adalah contoh lain dari pengujian yang buruk. Karena inputnya kosong, ini berarti kita memerlukan file IllegalArgumentException . Juga, ini adalah sebuah kesalahan. Tidak ada yang perlu memeriksa Metode panggilan opsional. Kembalikan elemen Opsional yang kosong dan jangan pernah memeriksa elemen Opsional untuk nol.

4. Jangan gunakan Opsional dengan koleksi.

Tidak perlu membungkus koleksi dalam Opsional. Selain itu, jangan masukkan Opsional ke dalam koleksi. Ini hanya memperumit masalah dengan menambahkan tinju yang tidak berguna dan membuka bungkus ekstra. Jangan tambahkan Opsional ke koleksi. Tidak ada manfaat nyata dari hal ini. Tetap sederhana dan gunakan Opsional untuk nilai yang hilang.

5. Jangan merantai demi merantai

Optional.ofNullable(foo).ifPresent(value -> {
  //do something
})
Opsional memiliki metode terperinci yang dapat membantu dalam hal ini. Alih-alih berantai, pemeriksaan nol sederhana sudah cukup. Saya tahu Opsional memiliki metode yang bagus dan dukungan IDE yang bagus. Anda bisa menggunakannya.

6. Gunakan pembungkus nilai primitif

Ini bukan masalah besar, tapi Anda bisa menggunakan OptionalInt atau OptionalLong . Cukup dengan menghapus obat generik yang tidak perlu, Anda akan meningkatkan kinerja dan menulis kode yang lebih ringkas.

7. Anda harus tahu tentang ofNullable

if (a==null){
  return Optional.empty();
} else {
  return Optional.of(a);
}
Kode jenis ini biasanya ditulis oleh developer yang belum mengetahui tentang Optional#ofNullable . Kebanyakan pengembang bahkan tidak memahami perbedaan antara ofNullable dan of . Mereka tidak mengerti bagaimana Opsional#of dapat menjadi bumerang. Sebagian besar akan menggunakan ofNullable karena takut melemparkan NullPointerException di Optional#of . Sekali lagi, hal ini menggagalkan tujuan kedua metode ini. Jika kita hanya menggunakan ofNullable , mengapa kita memerlukan Optional#of sama sekali ? Opsional#of melempar NPE saat Anda meneruskan ke null. Hal ini terjadi karena suatu alasan. Metode ini harus digunakan ketika Anda mengharapkan nilai tersebut ada. Jika tidak ada, maka akan cepat gagal. Opsional#ofNullable mengonversi null menjadi Opsional kosong. Metode ini menggunakan null sebagai argumen, yang cocok dengan Opsional kosong.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION