Perbezaan pengaturcaraan Java dan C#
# Pengenalan
Kat Malaysia ni, ada tiga keturunan bahasa pengaturcaran yang duduk dalam kategori majoriti iaitu Java, PHP dan C#. Mungkin ada yang tak setuju, well kenyataan tadi cumalah pendapat dan pengalaman peribadi.
Saya faham, sekarang semakin banyak hipster pengaturcaraan baru muncul dan ada pengikutnya sendiri seperti ruby, node, python, golang, rust dan lain-lain. Artikel ini bukanlah flame-war untuk mengesahkan siapa bahasa pengaturcaraan yang famous. Sekiranya anda berlainan pendapat, sila abaikan statement intro saya.
PHP adalah bahasa pengaturcaraan yang paling ramai programmer Malaysia guna dan kenal. Pada pengalaman saya, PHP ni top kat Malaysia sejak version 5 sehingga kini (waktu PHP version 4, ramai masih guna bahasa pengaturcaraan perl dan bahasa yang lain-lain).
Java pula ialah stack kedua yang glamour di Malaysia, stack ini bagi saya sangat revolusi. Setiap kali perubahan berlaku pasti ialah sangat besar dan memberikan sakit kepala untuk memahami kongsep-kongsep yang baru di perkenalkan itu, tapi setiap revolusi Java memberikan banyak kemudahan dalam teknik menbangunkan sistem.
Java sangat terkenal dengan kongsep OOP - Object Oriented Programming atau dalam bahasa Melayu kita panggil “Pengaturcaraan Berorientasikan Object”. Ya, dalam Java semua ialah object, saya faham Java ada primitif juga tapi dengan teknik autoboxing, yang primitif pun jadi objek (programmer je faham statement ni).
C++ (sebut “C pulas pulas” .. keh keh) telah wujud sebelum Java dan untuk makluman bahasa pengaturcaraan C++ juga boleh menggunakan kongsep OOP tetapi ia terlalu kompleks dan memori komputer perlu digunakan dengan teliti dan kebiasanya menganggu pengaturcara untuk memikirkan cara terbaik untuk mengelakkan masalah seperti overflow memori, platform pembangunan berbeza dan lain-lain isu. Maka pada awal 1990, James Gosling iaitu ketua researchers di Sun Microsystems Inc telah membina Oak (dan kemudiannya menukar nama Oak kepada Java) sebagai bahasa pengaturcaraan yang mempunyai ciri “write once, run anywhere (WORA)” dan lain-lain lagi.
C# (sebut “C sharp”) ialah salah satu bahasa pengaturcaraan yang di bangunkan oleh Microsoft. Terdapat bahasa pengaturcaraan lain seperti Visual Basic (VB), Visual Basic .Net (VB.net), F# dan lain lain.
Perlu saya tekankan VB adalah interpreter based dan VB.net, F# dan C# adalah compiled based melalui dot net CLR. Agak sukar untuk saya jelaskan, pendek kata dot net adalah pembaharuan modern (terkini) dan VB tidak lagi di kembangkan sejak versi 6. Tapi tolong jangan pandang rendah pada VB6, saya pernah bangunan virus remover dan beberapa aplikasi yang lain.
Dalam banyak-banyak bahasa pengaturcaraan melalui dot net (.net), C# adalah paling cemerlang dan lebih banyak digunakan secara umum nya bagi peminat pembangunan berplatformkan Windows. Ia juga berevolusi dan mengambil inspirasi C++ dan Java kedalam kongsep pengaturcaraan. C# juga berkongsepkan OOP - Object Oriented Programming. Dot net di bangunkan sejak 2000 sehingga kini.
Pada perenggan awal, saya mengatakan terdapat 3 bahasa pengaturcaraan majoriti iaitu PHP, Java dan C#. Saya tidak akan membuat perbandingan PHP tetapi cuma akan membandingkan Java dan C#.
Maaf intro agak panjang sebab nak jelaskan beberapa perkara sebelum buat perbandingan.
# JVM dan .Net
Pengaturcaraan Java di operasikan oleh virtual machine environment (JVM)
untuk terjemah class
kepadabytecode
dan memberikan arahan kepada komputer.
Untuk pengaturcaraan C#, ia juga menggunakan kongsep yang sama tapi dioperasikan oleh .NET framework
dan CLR runtime
.
kata kunci dan konvensi
Java | C# |
---|---|
โProjectsโ | โSolutionsโ |
“Package” | “Namespace” |
Menamakan pemboleh ubah atau fungsi menggunakan notasi lowerCamelCase seperti foo.thingTodo() |
Menamakan pembolehubah atau fungsi menggunakan notasi PascalCase seperti bar.ThingTodo |
Penamaan interface biasanya menggunakan tanpa notasi seperti UserService<T> |
Pengunaan interface biasanya menggunakan notasi yang bermula dengan I contohnya IUserService<T> . Teknik ini hampir sama dengan notasi Hungarian |
pemboleh ubah rentetan (string) adalah String |
pemboleh ubah rentetan (string) adalah string |
class yang berdikari dikenali sebagai “POJO” | “POCO” |
Java package
package com.robbinespu;
import java.util.List;
import com.google.common.base.Function;
// Code goes here
C# namespace
using System;
using System.Collections.Generic;
namespace RobbiNespu
{
// Code goes here
}
# Sintaks
Dalam pengaturcaraan java terdapat pembolehubah final
dan C# pula ialah readonly
. Dua dua ada aplikasi yang sama (iatu menghalang subclassing
, menghalang overriding method
dan pemalar pembolehubah) cuma dalam java anda hanya boleh assign pembolehubah final
sekali sahaja di dalam class, manakala C# pula sekali sahaja di dalam konstructor
Keperluan | Java | C# |
---|---|---|
menghalang subclassing |
final |
sealed |
menghalang overriding method |
final |
sealed |
pemalar pemboleh ubah | final |
readonly |
Nota: Perbandingan ini di buat dengan membandingkan JDK8 dan .net Core 3.1
Mulai JDK15 Sealed Types
telah diperkenalkan sebagai preview feature
daripada JEP 360 iaitu sebahagian daripada projek Amber
Java - Menghalang subclassing menggunakan final
C# - Menghalang subclassing menggunakan sealed
Rujukan (reference) dan nilai (value)
Dalam Java, kita cuma boleh terima parameters berbentuk nilai sahaja. Pening ayat bahasa Melayu ni..hrmm kalau dalam bahasa mat salleh “In Java, we can only pass parameters by value”
Pengaturcara java tak perlu nak ubah references data tu, hal ni berkait rapat dengan pengurusan pointer pada memory (nanti saya cerita kat bawah).
Dalam pengaturcaraan C# pula, anda boleh menggunakan out
dan ref
untuk override reference data tersebut.
Ini boleh dianggap kelebihan pada C# sebab boleh “pass parameter by value” dan juga “pass parameter by references”.
Metadata - Annotations (Java) == attributes (C#)
Ok sejujurnya aku sentiasa panggil metadata ni sebagai Annotations tapi rupaya C# panggil ia sebagai attributes. Ini pun aku baru tahu waktu menulis artikel ini.
Java annotation:
@PersonallyIdentifiable
private String fullName;
C# attribute:
[PersonallyIdentifiable]
private string fullName;
Getters and setters
Pengaturcara java perlu menulis sendiri atau autogenerate dengan IDE untuk membuat getter
dan setter
. Sebab itu ramai pengaturcara Java mengaplikasikan “Project Lombok” untuk menggunakan metadata (annotation) @Getter @Setter
dalam pengaturcaraan.
Tapi C# pula ada ciri-ciri built-in properties
untuk getter
dan setter
tanpa perlukan attribute
public class MakhlukHalus
{
public string Nama { get; set; }
public int Umur { get; set; }
}
Pointer
Fuh berasap kepala nak faham kongsep pointer ni. Bahasa pengaturcaraan C# masih membenarkan anda untuk mengira arithmetic dan manipulasi pointer dalam pengaturcaraan
using System;
namespace Robbi
{
class Hello
{
static void Main(string[] args)
{
unsafe
{
int a = 25;
int* ptr = &a;
Console.WriteLine($"Value of pointer is {*ptr}");
}
}
}
}
Tetapi anda perlu memberikan kebenaran kepada solution build
Untuk Java pula tiada pointer seperti yang kita faham dengan kongsep general iaitu daripada C++ tapi dengan kongsep Java semua Object
boleh di gunakan sebagai pointer tapi anda tidak boleh melakukan operasi arithmetic atau dereference pada spesifik memory. Semua di uruskan oleh JVM. So, bagi saya.. ermm lebih baik kita pegang “Java tiada kebolehan mengubahsuai pointer”.
…bersambung
Rasa macam panjang sangat artikel ni. Saya akan sambung penulisan pada masa akan datang. Terima kasih!
Related Posts
Other posts you may be interested in:
IndieWeb Interactions
Below you can find the interactions that this page has had using Indieweb. Which means, you can mentioned this URL on any website that support WebMention. Have you written a response to this post? Let me know the URL:
((Do you use a website that do not set up with WebMention capabilities? You can use Comment Parade.)