Nên chọn kiểu viết code nào trong Java?

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?

2 Likes

ko có cách nào cả vì $(tên biến) quá xấu đọc không được :confounded:

1 Like

Ủa, tại sao bạn lại thấy xấu. Cách viết Hungarian notation cũng khá phổ biến, nhất là trong giới lập trình PHP.

1 Like

Mình thích cách đầu vì nó gần với cách mình nghĩ nhất, đơn thuần.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?