Tampilkan postingan dengan label tingkat umum. Tampilkan semua postingan
Tampilkan postingan dengan label tingkat umum. Tampilkan semua postingan

Rabu, 06 Januari 2016

PHP - Penulisan Gaya If Statement

Dalam bahasa pemrograman PHP, ada banyak cara atau gaya penulisan if statement. Beberapa gaya mungkin menjadi ciri khas seseorang, tapi beberapa gaya penulisan ini juga dapat digunakan sesuai kebutuhannya. Misal, apabila di dalamnya terdapat hanya satu percabangan maka gunakan "ini", atau saya tidak ingin melihat kode yang saya tulis berantakan (terlalu banyak kurung kurawal "{}") maka saya gunakan "itu". Di dalam tulisan ini, akan saya tulis beberapa penulisan gaya if statement yang akan saya jelaskan juga saran dalam penggunaannya. Jika penulisan yang ada masih kurang lengkap, silakan ditambahkan.

Kode merupakan mainan sehari-hari programmer sehingga mereka terbiasa dengan apa yang mereka tulis. Tapi, apakah mereka akan bisa membaca tulisan sendiri jika tidak rapih? Di dalam tulisan ini juga akan membahas sedikit tentang elegant code yang merupakan teknik untuk menulis kode dengan "elegan". Maksud dari "elegan" di sini yaitu, mudah dibaca dan memiliki kompleksitas yang baik atau dapat diartikan memiliki algoritma yang baik serta efektif sehingga tidak menghabiskan banyak waktu untuk menulis.

Normal

Penulisan "normal" ini maksudnya yaitu gaya penulisan yang paling umum dan sering digunakan. Rata-rata orang yang baru belajar PHP akan menggunakan gaya penulisan ini. Adapun penulisannya yaitu:

if (kondisi) {
  // ...
}
else {
  // ...
}
Tapi, ada beberapa yang sedikit memodifikasi gaya tersebut sehingga menjadi:

if (kondisi) {
  // ...
} else {
  // ...
}
if (kondisi)
{
  // ...
}
else {
  // ...
}
Gaya penulisan "normal" ini biasanya menjadi ciri khas seseorang. Dimana beberapa developer hanya memakai satu gaya penulisan saja. Walaupun gaya penulisan tersebut sudah cukup baik dan mudah dibaca, tapi akan kurang efektif apabila menghadapi beberapa kasus.

Pelit

Gaya penulisan ini dikhususkan untuk kasus yang hanya memiliki satu perintah apabila if statement tersebut bernilai benar ataupun salah. Dengan penulisan gaya "pelit" ini, kode menjadi "elegan" dan enak dilihat.

if ($php == true) echo "COOL!";
else echo "BAD!";
Atau bisa ditulis seperti gaya penulisan pada bahasa C seperti ini:

if ($php == true)
  echo "COOL!";
else
 
echo "BAD!";
Apabila ditambahkan satu perintah di dalam kondisi if, maka akan muncul error. Karena itu, penulisan ini hanya untuk satu perintah di dalam percabangan if.

Keren

Penulisan yang satu ini mirip dengan if statement pada bahasa pemrograman Python. Saya rasa gaya penulisan ini cukup keren. Saya sendiri menggunakan gaya penulisan ini apabila if statement yang saya tulis berada di dalam sebuah function.

if ($cond == true):
  // ...
else:
  // ...
endif;

Gila

Yang satu ini biasa disebut ordinary if. Saya sebut "gila" karena jika percabangannya banyak akan membuat kepala pening untuk mengerti maksud dari if statement tersebut.

isset($php) ? true : false;
Penulisan di atas mungkin terlihat keren dan like a pro. Tapi, jika ditulis dengan banyak cabang akan membentuk:

echo ($php <= 9 ? "satuan" : ($php <= 99 ? "puluhan" : "..."))
Bagaimana? Pusing? Karena saya pernah menulis hingga 5 cabang dengan gaya penulisan ordinary if ini, sehingga saya tahu rasanya saat ada yang ingin disunting. Membutuhkan tenaga lebih untuk menelaah kembali apa yang sebenarnya saya tulis. Sehingga, tidak disarankan apabila untuk percabangan yang lebih dari 2 cabang.

Kesimpulan

Beberapa kode di atas dapat ditulis "bebas saja". Tetapi, akan lebih indah jika kita menggunakan sesuai porsi algoritmanya. Saran saya, gunakan "keren" jika ia berada di dalam function. Gunakan "normal" bebas saja, tetapi gaya penulisan ini mungkin sedikit kuno di PHP dan jika ingin beralih ke "keren" dipersilakan. Dan jika if statement ringan (satu perintah di dalamnya) gunakan saja "pelit". Lalu, untuk ordinary if, gunakan saja untuk variable processing. Adapun kesatuan semuanya saya tulis menjadi satu:

function is_true($bool = false) {
  if (!is_bool( $bool )) $bool = false; // pelit

  // keren
  if ($bool == true):
    $bool = "Cool!";
    $cond = true;

  else:
    $bool = "Bad!";
    $cond = false;
  endif;
  return $cond;
}

$var = is_true( true );
$php = ($var == true ? "True!" : "False!"); // ordinary if
echo $php;
// return "True!"
Cukup terlihat rapi dan elegan, bukan?

Penutup

Kerapihan kode juga merupakan hal penting apabila kita di dalam sebuah tim. Dengan kode yang rapih serta mudah dibaca, rekan kita akan dengan mudah melanjutkan apa yang kita kerjakan atau paling tidak mengerti apa yang kita buat.

Kelengkapan tulisan ini mungkin masih kurang. Jika ingin menambahkan, saya dengan senang hati mempersilakan Anda. Apabila ada kesalahan di dalam tulisan ini silakan dikoreksi dan dimaklumi serta dimaafkan. Karena saya hanya manusia biasa yang mencoba untuk menjadi penulis. Terima kasih.

Minggu, 03 Januari 2016

Matematika - Perbedaan antara Angka, Nomor, dan Bilangan

Banyak orang yang menganggap angka, nomor, serta bilangan adalah hal yang sama. Tapi pada kenyataannya, mereka itu berbeda dan memiliki definisi nya masing-masing. Hal yang sangat dasar ini harus kita ketahui, karena "salah tanda baca, maka berbeda arti". Seperti itu lah, maka dari itu, mari kita lihat apa perbedannya.

Bilangan

Bilangan merupakan kosa kata yang digunakan untuk menginformasikan bentuk angka. Maksudnya, dengan bilangan kita akan tahu "posisi" apa yang dimaksud. Tapi dengan angka, belum tentu kita tahu "posisi" mana yang dimaksud. Anda akan mengerti setelah membaca arti dari angka. Saya sendiri tidak mengerti bagaimana cara untuk mendefinisikan bilangan. Namun, setelah membaca pengertian angka, saya rasa Anda akan mengerti. Intinya, bilangan digunakan sebagai kosa kata, sementara angka sebagai simbol atau lambang atau tanda. Contohnya, bilangan dua.

Angka

Angka berperan sebagai simbol atau tanda atau lambang yang melambangkan bilangan. Jika bilangan yang dinyatakan adalah dua, maka angka akan melambangkan dua itu sebagai 2 (dalam latin) atau II (dalam romawi). Terlihat perbedaannya? Maksud saya dari kata "dengan angka, belum tentu kita tahu 'posisi' mana yang dimaksud" adalah ketika angka yang melambangkan tidak kita ketahui maksudnya. Misal, angka yang digunakan untuk melambangkan berasal dari simbol romawi yang belum pernah kita ketahui. Jika dengan bilangan "dua" kita telah mengetahui bahwa itu dua, lalu bagaimana jika dengan angka II? Apa itu II? Benar, bukan?

Nomor

Nomor biasanya digunakan untuk menunjuk posisi. Nomor digunakan untuk menunjuk posisi pada angka yang dimaksud dari angka-angka yang berurutan. Misal ada urutan angka 1, 2, 3, 4, dan 5. Maka, nomor 2 adalah posisi angka 2 dari urutan tersebut.

Kesimpulan

Dari data di atas, kesimpulan yang saya dapat yaitu:
  1. Bilangan merupakan kosa kata.
  2. Angka merupakan simbol/tanda/lambang untuk bilangan.
  3. Nomor digunakan untuk menunjuk angka yang berurutan.

Penutup

Itu tadi pembahasan singkat mengenai perbedaan angka, nomor, dan bilangan. Singkat saja karena hanya menjelaskan perbedaan berdasarkan definisi yang saya baca. Namun secara logika, sudah cukup masuk akal bukan?

Mungkin ada kesalahan pada tulisan ini, karena itu mohon dikoreksi dan dimaklumi serta dimaafkan. Karena saya hanya manusia biasa yang mencoba untuk menjadi penulis. Terima kasih.

Kamis, 31 Desember 2015

Matematika - Logika Perkalian 5

Matematika sebenarnya merupakan ilmu yang menyenangkan untuk diulik. Dengan melakukan eksperimen-eksperimen kecil, kita akan mendapatkan hasil yang cukup memuaskan walaupun untuk diri kita sendiri. Dari eksperimen tadi, kita akan mengetahui fakta-fakta baru serta secara tidak langsung meningkatkan logika kita. Yang akan saya bahas kali ini merupakan logika perkalian angka 5. Adapun kebenarannya saya dapatkan hasil eksperimen sendiri.

Bagaimana cara menghitung cepat 92.398.293.649 x 5? Atau 92.398.293.649 x 5.555? Kita akan mendapatkan jawabannya dari eksperimen!

Angka 5 merupakan bilangan yang menurut saya spesial. Karena perkalian serta pembagian dengan angka ini terasa ringan. 5 merupakan setengah dari 10, benar? Sehingga di dapat logika, N x 5 = (N x 10) : 2. Dengan mengalikan N ke 10, kita akan mempermudah proses pengerjaan. Contoh kasus dimulai dari yang kecil, 129 x 5?

   129
       5
   ------- x
   645
Coba kita gunakan (N x 10) : 2.

129 x 10 = 1290
1290 : 2 = 645
 ^ ^
 6 45
Lebih cepat ketimbang mengalikan satu-satu dengan 5 bukan? Kita coba dengan angka yang lebih besar yaitu 92398293649 x 5.

92398293649 x 10 = 923982936490
9  2  3  9  8  2   9   3  6  4  9  0 : 2 = 461991468245
^   ^  ^  ^  ^  ^   ^   ^   ^   ^   ^  ^
4  6  1 9   9   1  4   6  8  2 4  5
Lihat, cara ini tidak membutuhkan resource otak yang besar. Yang ini masih kurang jelas? Oke saya jabarkan lebih lanjut:

92398293649 x 10 = 923982936490
923982936490 : 2
-----------------------------
[1] Ambil yang paling depan yaitu 9. Kemudian bagi 2. Hasilnya 4, dengan sisa 1.
[2] Letakan sisa 1 lalu ambil angka berikutnya, yaitu 2. Sehingga menjadi 12 lalu bagi 2, hasilnya 6, sisanya 0.
[3] Letakan sisa 0 lalu ambil angka berikutnya, yaitu 3. Sehingga menjadi 03 lalu bagi 2, hasilnya 1, sisanya 1.
[4] Letakan sisa 1 lalu ambil angka berikutnya, yaitu 9. Sehingga menjadi 19 lalu bagi 2, hasilnya 9, sisanya 1.
[n] Dan seterusnya. Sama halnya dengan pembagian biasanya. Hanya saja yang satu ini melakukan pembagian cepat menggunakan otak.
------------------------------
Hasilnya 461.991.468.245
Lihat angka yang saya beri warna biru, itu merupakan angka yang dihasilkan dari contoh kasus pembagian cepat di atas. Sudah mulai panas? Ayo lanjut ke yang lebih ekstrim! 92398293649 x 5555.
Logikanya? Oke saya buatkan tabel seperti di bawah:

AngkaRumus JadiLogika
5(N x 10) : 210 = 2x5. Maka 10N = 2 sehingga 10N:2
50(N x 100) : 2100 = 2x50. Maka 100N = 2 sehingga 100N:2
500(N x 1000) : 21000 = 2x500. Maka 1000N = 2 sehingga 1000N:2
5000(N x 10000) : 210000 = 2x5. Maka 10000N = 2 sehingga 10000N:2
5 x (N digit 0)(N x (1 x (N + 1 digit 0))) : 2(1 x (N + 1 digit 0)) = 2x(5 x (N digit 0)). Maka (1 x (N + 1 digit 0))N = 2 sehingga (1 x (N + 1 digit 0))N:2

Logika dari 5555 yaitu 5000 + 500 + 50 + 5, benar? Maka, kita terapkan (N x 10000):2 + (N x 1000):2 + (N x 100):2 + (N x 10):2.

Pertama, cari yang paling kecil. Yaitu (N x 10):2.
92398293649 x 10 = 923982936490
9  2  3  9  8  2   9   3  6  4  9  0 : 2 = 461991468245
^   ^  ^  ^  ^  ^   ^   ^   ^   ^   ^  ^
4  6  1 9   9   1  4   6  8  2 4  5

Sehingga berikutnya hanya perlu menambahkan N-1 0 digit dibelakang sebanyak rumus.
(N x 10):2 = 461991468245
(N x 100):2 = 4619914682450
(N x 1000):2 = 46199146824500
(N x 10000):2 = 461991468245000

Berikutnya, jumlahkan semua.
   461991468245000
     46199146824500
       4619914682450
         461991468245
--------------------------------- +
   513272521220195
Ya, selesai! Coba hitung dengan kalkulator. Hasilnya pasti sama! Lihat, kita sudah berhasil mengerjakan soal ekstrim tanpa kalkulator dengan cepat. Jadi, 92.398.293.649 x 5.555 = 513.272.521.220.195

Mudahnya, logika dari ini yaitu:

N x (5 x  (10^(M-1))) = 2/2
(N:2) x (5 x (10^(M-1))) x 2
(N:2) x (2(5 x (10^(M-1)))) = (N x (2(5 x (10^(M-1))))):2

Dimana, N = Bilangan yang akan Dikali. Dan, M = Jumlah Digit Pengali. Misal, N = 92398293649. Dan, M = 50 (ada 2 digit).
Sehingga:

N x (5 x (10^(M-1))) = 2/2
92398293649 x  (5 x (10^(2-1)) = 2/2
92398293649 x (5 x 10) = 2/2
(92398293649):2 x (50 x 2)
(92398293649):2 x 100 = (92398293649 x 100):2
=> 4619914682450

Partial Method

Partial method sendiri saya tidak tahu sudah ada atau belum. Namun, saya namakan partial method karena kita akan membagi-bagi bilangan menjadi beberapa bagian. Seperti contoh, 1920 jika dibuat partial akan menjadi 1000 + 900 + 20 + 0. Cara ini sangat berguna untuk menghitung angka-angka menyebalkan seperti desimal. Contoh kasus, berapa 178 x 4.5? Menyebalkan bukan?

Mari kita gunakan partial method untuk mencari solusinya.

4.5 = 5 - 0.5

Maka:
178 x 5 = 1780:2 = 890

Ada 0.5 tuh. Caranya? 0.5 itu kan 5:10. Berarti, sama dengan logika perkalian 5, hanya saja hasilnya dikurangi dari digit dibelakang koma. Dari 0.5 ada 1 digit dibelakang koma. Sehingga, 178 x 5 = 1780:2 = 890:(10 x N digit dibelakang koma) = 890:10 = 89.

Jadi:
4.5 = 5 - 0.5
890 - 89 = 801
Untuk tabel logika perkalian 5 desimal ada di bawah. Peringatan! Angka di depan harus lah bilangan 0. Jika tidak, maka pisahkan dulu dengan partial method. Angka yang didapat seharusnya hanya 0 dan atau 5. Seperti, 5, 50, 500, 0.5, 0.05, dst.

AngkaRumus JadiLogika
0.5N : 20.5 = 1:2. Maka N = 2 sehingga N:2
0.05(N : 2) : 100.05 = (1:2):10. Maka N:10 = 2 sehingga N:20
0.005(N : 2) : 1000.005 = (1:2):100. Maka N:100 = 2 sehingga N:200
0.0005(N : 2) : 10000.0005 = (1:2):1000. Maka N:1000 = 2 sehingga N:2000
5 : (N dgit dibelakang koma)(N : 2) : 10 ^ (N digit dibelakang koma - 1)N : (2 x 10 ^ (N digit dibelakang koma - 1))

Pusing? Sama!

Kesimpulan

Gunakanlah partial method untuk memudahkan penyelesaian masalah. Jika yang dihadapi angka 5. Cukup gunakan logika di atas untuk mempercepat perhitungan. Awalnya memang menghitungnya butuh waktu karena otak kita sedang menyesuaikan logika baru. Jadi, sering lah latihan dan gunakan logika ini. Nanti, kita akan terbiasa.

Perkalian 5:
N x 10 ^ (digit perkalian) : 2
Perkalian 5 Desimal:

N : 2 x (10 ^ (digit perkalian - 1))
 Parital Method:

Pecah bilangan lalu tambahkan.
=> 3234 = 3000 + 230 + 30 + 4

 Penutup

Ilmu merupakan sesuatu yang tidak ada habisanya. Semakin banyak kita memperoleh ilmu, maka kita akan semakin merasa tidak punya apa-apa. Karena itu lah, ilmu sangat luas dan ilmu ingin kita pelajari. Maka gunakan lah waktu yang ada untuk mencari ilmu. Jangan kita sia-sia kan waktu kita untuk hal yang tidak bermanfaat. Eksperimen kecil dapat mengubah pandangan kita serta dapat meningkatkan pemahaman kita. Maka dari itu, mulai lah bereksperimen dan melakukan uji coba!

Tulisan ini bisa saja mengandung kesalahan. Karena itu, mohon dikoreksi dan dimaklumi serta dimaafkan. Karena saya hanya lah manusia biasa yang mencoba untuk menjadi penulis. Terima kasih.

Matematika - Logika Gauss dalam Barisan dan Deret


Johann Carl Friedrich Gauß (juga dieja Gauss) merupakan salah satu ilmuwan yang terkenal karena di dalam bidang Matematika karena penemuannya, yaitu rumus barisan dan deret. Dalam tulisan ini, saya akan bahas penyelesaian kasus barisan dan deret hanya dengan logika. Kita gunakan logika yang digunakan Gauss sewaktu menemukan rumus barisan dan deret.

Dalam barisan deret 1 hingga 100. Terdapat 100 buah bilangan yang nilainya berurut. Karena berurut, kita dapat dengan mudah menyelesaikannya. Mari kita hitung 1+2+3+..100 dengan logika Gauss.

Diberikan N bilangan sebanyak 100 buah, yaitu 1,2,3,...,100.

N = 1,2,3,4,5,6,7,8,9,10,...,48,49,50,51,52,...,91,92,93,94,95,96,97,98,100
Karena bilangan berurut, mari kita jumlahkan N dengan M. Dimana M merupakan N yang dibalik.

M = 100,99,98,97,96,95,94,93,92,91,...,52,51,50,49,48,...,10,9,8,7,6,5,4,3,2,1
Setelah dijumlahkan, ternyata setiap bilangan jumlahnya sama.

N+M = 101,101,101,...,101
Berapa banyak suku yang dimiliki N+M? Tentu saja 100. Masing-masing suku bernilai sama yaitu 101. Karena berjumlah 100 buah, mari kita kalikan. Diberikan H sebagai hasil akhir.

H = 101 x 100
H = 10100
Berikutnya, bagi H dengan 2. Kenapa? Karena pada awal, kita menjumlahkan N+M, dimana N dan M merupakan bilangan yang sama namun pada M kita membalikannya. Jadi, secara logika, N+M:2 = H.

H = 10100:2
H = 5050
Jika kita menggunakan rumus barisan dan deret.

Sn = n/2(2a + (n-1)b)
S100 = 50(2 + 99)
S100 = 50(101)
S100 = 5050

Keterangan:
Sn = Banyaknya jumlah n bilangan dari barisan
n = Banyaknya bilangan (suku)
a = Angka dimulainya barisan
b = Perbedaan jarak antar angka dalam barisan
Lihat, hasilnya sama! Di dalam rumus itu terdapat N:2. Dari perhitungan manual di atas, kita juga membagi 2 hasil akhir. Bedanya, di dalam rumus ini yang dibagi merupakan jumlah suku atau jumlah banyaknya bilangan.

H = (n(2a + (n-1)b))/2
H = (100(2 + 99))/2
H = (100(101))/2
H = 10100/2
H = 5050
Jika kita ubah sedikit rumusnya, maka dengan sangat jelas seperti pengerjaan manual di atas.

Sudah ada rumus yang tersedia, tapi kenapa masih menghitung manual?

Penutup

Memang benar untuk apa menghitung manual jika sudah ada rumus. Tapi, memangnya mau menghafal rumus-rumus? Di matematika ada banyak sekali rumus. Jika dihafalkan tentu saja tidak efisien. Salah satu cara terbaik adalah memahami konsep serta logika dari rumus tersebut. Kenapa bisa terbentuk rumus seperti ini? Itulah yang kita pahami dari tulisan ini. Jika kita paham konsepnya, sudah jelas kita akan ingat bagaimana cara penyelesaiannya tanpa harus menghafal rumus karena secara tidak langsung kita mengerjakannya seperti menggunakan rumus. Bahkan, dalam beberapa kasus kita mengharuskan menggunakan konsep atau logikanya ketimbang menggunakan rumus yang ada.

Demikian tulisan yang membahas sedikit tentang logika Gauss dalam barisan dan deret. Tulisan ini bisa saja mengandung kesalahan. Karena itu mohon dikoreksi dan dimaklumi serta dimaafkan. Akan saya perbaiki ketika ada kesalahan. Saya hanyalah orang yang mencoba untuk menjadi penulis. Saya juga masih belajar. Terima kasih.

PHP - Kompleksitas Kode untuk Keluaran


PHP merupakan salah satu bahasa yang sangat populer di Indonesia. Dan tulisan ini saya buat untuk semua kalangan developer yang memcari efisiensi penulisan kode serta kompleksitasnya sehingga waktu eksekusi dapat dioptimalkan.

Data yang saya dapat berasal dari hasil melakukan eksperimen dengan bantuan alat PHP Profiler. Adapun yang saya gunakan yaitu Blackfire. Setelah melakukan banyak eksperimen dengan function print, printf, dan echo. Dengan pertimbangan banyak aspek tes seperti melakukan keluaran dengan big number (integer) yang terdiri dari 19 digit serta karakter huruf a-z yang terdiri dari 260 karakter.

Apa saja yang akan diuji? Saya akan uji beberapa tipe data seperti integer, string, dan array. Serta manipulasi variable dan mixing data type.

Integer

Untuk tipe data integer, dari hasil tes yang saya lakukan, sebaiknya gunakan print atau printf. Adapun waktu tercepat diperoleh oleh printf dengan beberapa ketentuan. Apakah Anda mengenal data type convertion di dalam bahasa C? Dengan menggunakan itu, kita akan mempercepat eksekusi kode. Caranya sangat mudah, tambahkan saja "(int)" di depan angka yang kita definisikan. Semisal:

$var = (int) 1;

Berbeda jika tanpa (int), kecepatan eksekusi berkurang, kenapa? Saya memiliki hipotesis seperti ini, "Tipe data di dalam PHP asumsikan saja umum, jika kita mendefinisikan tipe data-nya, maka kita mempercepat eksekusi waktunya". Kenapa? Jika tipe data tidak di definisikan, maka PHP akan mendefinisikannya untuk kita sehingga memerlukan waktu lagi. Karena itu, jika tipe data tersebut selalu sama dalam contoh kasus integer, maka tambahkan/gunakan (int) di depannya.
Untuk penggunaan kode-nya, bisa dilihat seperti ini.

print (int) 0123456789;
printf((int) 0123456789);
$var = (int) 0123456789;
print $var;
printf("%d", $var);

String

Berbeda dengan integer, tipe data string memiliki banyak aturan untuk efisiensi eksekusi waktunya. Tapi, secara umum tipe data string sudah cukup cepat jika menggunakan print atau echo. Sama halnya dengan integer yang menggunakan data type convertion (int), string juga akan lebih cepat jika menggunakan (string). Namun, jika menggunakan (string) sebaiknya saat penggunaan kutip satu (') saja. Penjelasan penggunaannya supaya efisien sebagai berikut.

print 'keluaran';
echo 'keluaran'; # sebaiknya gunakan echo
print (string) 'keluaran'; # sebaiknya gunakan print
echo (string) 'keluaran';
print "keluaran";
echo "keluaran"; # sebaiknya gunakan echo

Untuk variabel string, penggunaannya supaya efisien sebagai berikut.

$var = 'keluaran';
print $var;
echo $var; # sebaiknya gunakan echo
$var = "keluaran";
print $var;
echo $var; # sebaiknya gunakan echo
$var = (string) 'keluaran';
print $var;
echo $var; # sebaiknya gunakan echo
$var = (string) "keluaran";
print $var;
echo $var; # sebaiknya gunakan echo

Untuk fungsi printf, gunakan apabila kasusnya seperti ini saja.

$var = "keluaran";
printf("%s", $var);

Kesimpulan untuk tipe data string, sebaiknya gunakan echo saja.

echo 'keluaran'; # jika hanya string tanpa variabel, gunakan kutip satu saja
echo "keluaran $var"; # jika dengan variabel, gunakan kutip dua seperti ini saja

Array

 Tes ini dilakukan dengan array yang total isinya 1.000 index. Ada 2 cara penulisan array, yaitu.

array(...); # dengan function array
[...]; # dengan simbol []

Dari dua cara di atas, sebaiknya gunakan simbol [] untuk mendefinisikan array. Karena penggunaan [] lebih ringan dibandingkan dengan array().
Di dalam bermain array, untuk looping sebaiknya gunakan foreach. Dari hasil tes yang saya lakukan dengan array yang memiliki 1.000 index, function foreach yang memiliki kecepatan tertinggi dalam proses eksekusinya.

Peringatan! foreach yang terbaik apabila hanya digunakan untuk menampilkan data dari array. Namun, jika untuk melakukan modifikasi isi array, tentu saja berbeda.

$array = [0,1,2,3,..,1000]; # array berjumlah 1.000 index
foreach($array as $value) ...; # jika hanya ingin mengambil isi array
foreach($array as $key=>$value) ...; # jika ingin mengambil index serta isi array
# untuk mengambil index/keys pada array lalu melakukan manipulasi, sebaiknya gunakan
$keys = array_keys($array);
foreach($array as $value) lebih cepat dibandingkan dengan foreach([...] as $value)

Kesimpulan untuk tipe data array, dalam kebutuhan untuk keluaran, foreach merupakan yang terbaik. Untuk kecepatan, foreach($var as $new_var) lebih cepat dibandingkan dengan foreach([1,2,3,..,n] as $new_var).

Kesimpulan

Berbeda tipe data juga berbeda penanganannya untuk keluaran. Untuk int, print merupakan pilihan terbaik. Namun untuk str, echo-lah yang terbaik. Sementara untuk array, foreach lebih baik daripada penggunaan for dan while dalam kasus looping.

Penutup

Tulisan yang membahas kompleksitas serta efisiensi penulisan kode untuk PHP ini telah selesai. Tulisan yang dibuat bisa saja terdapat kesalahan, maka dari itu apabila menemukan kesalahan pada tulisan ini, saya berharap dapat dikoreksi bersama. Bukan bermaksud menggurui, saya hanya berbagi pengalaman yang saya dapatkan. Terima kasih.

Free Pascal - Tips untuk Kode yang Lebih Baik


Di dalam bahasa pemrograman apapun, dikenal dengan faster code dan smaller code. Adapun tujuannya yaitu untuk mendapatkan kompleksitas kode yang baik sehingga ukuran kode ringan serta cepat. Berikut ini tips yang diberikan langsung oleh Michaël Van Canneyt yang merupakan pembuat buku referensi untuk Free Pascal Programmers.

Better Algorithm

Di dalam penyelesaiannya kasus-kasus dengan Free Pascal, tentu dapat dilakukan dengan banyak cara. Semisal yang satu dengan yang lainnya berbeda dalam penyelesaian kasus 1. Dimana si A melakukannya dengan if statement sementara si B menggunakan switch-case atau case-of. Dan tentu saja kompleksitas-nya berbeda-beda tergantung dari kasus serta penulisan kode.
Semisal, ada kasus, identifikasi bilangan lalu cetak apakah itu satuan, puluhan, ratusan, atau ribuan. Dalam hal ini, mulai lah si A dan si B menulis sebuah program.

Si A:

program Identifikasi;
var i: Integer;
begin
  i := 1030;
  if i < 9 then writeln('satuan')
    else if i < 99 then writeln('puluhan')
      else if i < 999 then writeln('ratusan')
        else writeln('ribuan');
end.
Si B:

program Identifikasi;
var i: Integer;
begin
  i := 1030;
  case i of
    0..9: writeln('satuan');
    10..99: writeln('puluhan');
    100..999: writeln('ratusan');
    else
      writeln('ribuan');
  end;
end.
Kedua program tersebut hasilnya akan sama. Namun mana yang lebih baik dan lebih cepat? Dari segi kompleksitas kode, tentu saja lebih baik si B. Jadi, mulai lah mempelajari tentang kompleksitas kode dan terapkan ke dalam kode yang kita tulis. Cari penyelesaian kasus dengan algoritma yang terbaik.

Tilik Processor Dependency

Setiap processor, misal i386 atau amd64, memiliki keunggulan dan kekurangan masing-masing. Itu semua berpengaruh kepada variabel (tipe data) yang akan kita pilih. Semisal, kita menggunakan Free Pascal dengan processor amd64 (64-bit). Maka, longword dan longint direkomendasikan sebagai pilihan terbaik.

Larangan

Penulis yang memberi tips ini mengatakan bahwa ansistrings, widestrings, dan exception support membutuhkan lebih banyak resource yang membuat code over-head. Selain itu, penggunaan cdecl modifier juga tidak disarankan.

Bermain dengan FPC

FPC (Free Pascal Compiler) memiliki banyak optional parameter yang dapat dimanfaatkan untuk kebutuhan seperti ini. Untuk menganalisis kode kita, fpc mendukung paramter -pg untuk mencari mana yang menghabiskan banyak resource. Kemudian, kita dapat mengubahnya ke bahasa assembly supaya mendapatkan hasil yang optimal. Selain itu, kita disarankan untuk menggunakan parameter -Og pada fpc.

Penutup

Masih banyak cara yang dapat digunakan untuk menghemat resource serta mempercepat kode. Namun, karena keterbatasan ilmu saya sehingga saat ini hanya tulisan ini yang dapat mewakili. Saya hanyalah manusia biasa yang mencoba untuk menjadi penulis. Jika ada kesalahan mohon dikoreksi dan kemudian akan saya perbaiki. Terima kasih.