Mình thì theo quan điểm không có đúng sai trong lập trình, nên cân bằng giữa tính hiệu quả và tính dễ đọc. Cách 1 của bạn dễ đọc, dễ maintain, tuy phải đánh đổi việc gọi function chéo nhau (tất nhiên sẽ chậm hơn) so với Cách 2 chạy nhanh hơn, nhưng sau maintain khó khăn. Nếu benchmark thì mình thấy cách 1 cũng không chậm hơn đáng kể, nhất là với các máy tính hiện nay, tốc độ CPU rất lớn, RAM khủng, … thì chắc vài micro micro… second ^^
Vấn đề viết code thế nào cho hiệu quả cũng là 1 chủ đề khá thú vị (người Nhật họ gọi là Coding Dojo, nghĩa là một đấu trường coding, ở đó họ tìm cách đạt 1 mục đích với nhiều cách thức khác nhau để tìm ra đường kiếm đẹp nhất và hiệu quả nhất. Riêng dân Nhật, cái gì cũng đẩy lên thành 1 thứ đạo, ví dụ riêng chuyện uống trà -> trà đạo)
Ví dụ bài toán FlipFlop khi chia hết cho 3, 5 và cả 3 và 5 (chia hết cho 15)
Cách 1
function printFlipFlop(n){
for ($i=0; $i<=n;$i++){
if (($i % 3 == 0) && ($i%5 == 0)){
echo "FlipFlop";
continue;
}
if ($i % 3 == 0) {
echo "Flip";
}
if ($i % 5 == 0) {
echo "Flop";
}
}
}
Cách 2:
function printFlipFop($n){
for ($i=0; $i<=$n;$i++){
if (($i % 3 == 0) && ($i % 5 == 0)){
echo "$i FlipFlop ";
continue;
}
if ($i % 3 == 0) {
echo "$i Flip ";
}
if ($i % 5 == 0) {
echo "$i Flop ";
}
}
}
Cách 3:
$FLIP_NUMBER = 3;
$FLOP_NUMBER = 5;
function printFLIP($n){
for ($i=0; $i<=n; $i++){
if ($i % $FLIP_NUMBER == 0){
echo "$i Flip";
continue;
}
}
}
function printFlop($n){
for ($i=0; $i<=n; $i++){
if ($i % $FLOP_NUMBER == 0){
echo "$i Flop";
continue;
}
}
}
function printFlipFlop($n){
for ($i=0; $i<=n; $i++){
if (($i % $FLOP_NUMBER == 0) && ($i % $FLIP_NUMBER == 0)){
echo "$i FlipFlop";
continue;
}
}
}
printFLIP(30);
printFlop(30);
printFlipFlop(30);
Cách 4:
$FLIP_NUMBER = 3;
$FLOP_NUMBER = 5;
function printFLIP($n){
for ($i=0; $i<=n; $i++){
if (isFlipNumber($i)){
echo "$i Flip";
continue;
}
}
}
function printFlop($n){
for ($i=0; $i<=n; $i++){
if (isFlopNumber($i)){
echo "$i Flop";
continue;
}
}
}
function printFlipFlop($n){
for ($i=0; $i<=n; $i++){
if (isFlipFlopNumber($i)){
echo "$i FlipFlop";
continue;
}
}
}
function isFlipNumber($i){
return ($i % $FLIP_NUMBER == 0);
}
function isFlopNumber($i){
return ($i % $FLOP_NUMBER == 0);
}
function isFlipFlopNumber($i){
return isFlipNumber($i) && isFlopNumber($i);
}
printFLIP(30);
printFlop(30);
printFlipFlop(30);
Cách 5:
function printFlipFlop($n){
for ($i=0; $i<=n; $i++){
$is_flip_number = $i % 3;
$is_flop_number = $i % 5;
$is_flip_flop_number = $is_flip_number && $is_flop_number;
if ($is_flip_flop_number){
echo "$i flipflop";
continue;
}
if ($is_flip_number){
echo "$i flip ";
continue;
}
if ($is_flop_number){
echo "$i flop ";
continue;
}
}
}
Cách 6:
function printFlipFlop($n){
for ($i=0; $i<=n; $i++){
echo getMagicString($i);
}
}
function getMagicString($i){
$is_flip_number = $i % 3;
$is_flop_number = $i % 5;
$is_flip_flop_number = $is_flip_number && $is_flop_number;
if ($is_flip_flop_number){
return "$i flipflop";
}
if ($is_flip_number){
return "$i flip ";
}
if ($is_flop_number){
return "$i flop ";
}
return $i
}
Bạn thấy cách nào hiệu quả và tại sao?