-
Notifications
You must be signed in to change notification settings - Fork 2
/
penggunaan_variable.php
161 lines (140 loc) · 3.67 KB
/
penggunaan_variable.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<?php
/**
* Konsep penggunaan variable yang efisien
* @author : Herlangga Sefani <https://github.com/gaibz>
*/
/**
* RULES :
* - return secepatnya dan jangan nesting terlalu dalam. terlalu banyak if - else bisa bikin code jadi susah dimengerti
* - gunakan type hinting sebisa mungkin selama masih memungkinkan
* - jangan menggunakan kata yang tidak diperlukan
* - gunakan parameter default
* - manfaatkan phpdoc buat parameter description
*/
// Contoh 1 :
// ini sulit dimengerti dan nested if nya terlalu dalam
function isFruit($fruitname) : bool {
if($fruitname) {
if(is_string($fruitname)) {
$fruitname = strtolower($fruitname);
if($fruitname === 'apple') {
return true;
}
else if($fruitname === 'banana') {
return true;
}
else if($fruitname === 'grape') {
return true;
}
else {
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
// singkat padat dan jelas
function isVegetable(string $name = '') : bool {
if(empty($name)) {
return false; // return secepatnya jika data tidak sesuai
}
$name = strtolower($name);
$vegetables = ['spinach', 'tomato', 'potato'];
return in_array($name, $vegetables);
}
// contoh 2 :
// terlalu panjang. padahal bisa dipersingkat
function isOdd($n) : bool{
if(is_int($n)) {
if($n >= 0 && $n <= 50) {
$cek = $n % 2;
if($cek > 0) {
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
// singkat padat dan jelas
function isEven(int $n) : bool {
if($n < 0 || $n > 50) {
return false;
}
return ($n % 2) === 0;
}
// Contoh 2 :
// penggunaan kata yang sama dengan parent nya
class Laptop {
public $laptop_processor;
public $laptop_ram;
public $laptop_gpu;
public $laptop_model;
public $laptop_price;
}
// seharusnya penggunaan kata variable bisa diminimalisir dengan mengurangi yang tidak perlu
// dan lebih diperjelas dengan menggunakan type hinting
class Pc {
public string $processor;
public float $ram;
public string $gpu;
public string $model;
public float $price;
}
// contoh 3 :
// ini kurang bagus karena $name bisa jadi null, integer, atau tipe data lainnya
function createLaptop($name = '') : void {
// .....
}
// ini cukup bagus, sering dipake banyak framework. tapi masih kurang baik
function createPc($name = null) : void {
$name = isset($name) ? $name : ''; // oldschool style php
$name = is_string($name) ? $name : ''; // contoh oldschool lain
$name = $name ?? ''; // php 7 null coallescing
$name ??= ''; // php 7.4 null coallescing
// ....
}
// ini paling bagus. jelas dan gak bikin ambigu karna pake type hinting
function createMiniPc(string $name = '') : void {
// ....
}
// contoh 4 :
// sebenernya ini udah bagus. tapi masih perlu sedikit polesan dari phpdoc biar lebih jelas $laptop disini isinya apa aja
function setLaptop(object $laptop) : void {
// ....
}
// manfaatkan phpdoc biar jelas @param dan @return nya apa
/**
* function description
* @param object $mini_pc {processor, ram, gpu, model, price}
* @return void
*/
function setMiniPc(object $mini_pc) : void {
// ....
}
// much better pake type hinting dari object yang udah didesain sebelumnya
/**
* function description
* @param Pc $pc
* @return void
*/
function setPc(Pc $pc) : void{
// ...
}