동료를 짜증나게 할 코드

원문 제목 : C# 동료를 짜증나게 할 4가지 코딩 실수

저자 : Sukhpinder Singh

글 : 4 Coding Mistakes That Will Annoy Your C# Colleagues — Part 2

위 글 중에 한 예가 [너무 똑똑한 코드] 입니다.

‘너무 똑똑한 코드를 작성하는 것은 재앙이 일어날 것을 기다리는 것입니다. 코드를 보는 모든 개발자에게 코드를 설명해야 한다면 이미 실패한 것입니다.’

나쁜 코드의 예

var result = new List<int> {1, 2, 3, 4, 5}.Select(x => x * 2).Where(x => x % 3 != 0).ToList();

‘함수형 프로그래밍은 훌륭하지만 LINQ 작업을 너무 많이 체인으로 연결하면 코드를 읽을 수 없게 됩니다.’

‘복잡한 작업을 읽기 쉬운 단계로 나누세요.’

대신 해야 할 일

var numbers = new List<int> {1, 2, 3, 4, 5};
var doubled = numbers.Select(x => x * 2);
var filtered = doubled.Where(x => x % 3 != 0);
var result = filtered.ToList();

‘이 버전은 읽고 유지 관리하기가 훨씬 쉽습니다.’

여러분의 생각은 어떠신지요?

2 Likes

대신 해야 할 일이 이상한데요. doubled나 filtered를 누가 망칠지(재할당) 노심초사 할거 같은데

개인적으로는 다음을 선호 하는데요. 뭐… 이것도 호불호라서

var result_query = from numbers in new List<int> { 1, 2, 3, 4, 5 }
                   let doubled = numbers * 2
                   where doubled % 3 != 0
                   select doubled;

쓰고 구체화(materialize) 는 뒤로 미룸

3 Likes

3. Overusing Static Methods and Classes 은 공감합니다.

2 Likes

좋습니다!

var result = new List<int> {1, 2, 3, 4, 5 }
    .Select(x => x * 2)
    .Where(x => x % 3 != 0)
    .ToList();

@Chris_Shim 님 의견을 절충해서 체인 표현에 줄바꿈만 추가해도 읽기에 수월하죠ㅎ

6 Likes

그렇습니다!

공감합니다. 알아보기 쉬운 코드가 좋은 코드죠!

var numbers = new List<int> {1,2,3,4,5};
var result = numbers
  .Select(num => num * 2)
  .Where(doubled => doubled % 3 != 0)
  .ToList();

2 Likes

혹시 제목이 잘못된 거 아닌가요? ^^

짜증나게 하는 동료.

  • 간단한 Linq 도 설명해달라고 함.
4 Likes

짜증, 읽기 힘든 코드라는 표현을 써서 오해 할만한데요
보기 좋은 코드가 실수 할 가능성을 줄인다 정도로 이해하면 될 것 같아요
근데, 저런 한 줄 짜리 코드 줄줄이 있으면 짜증 날 것 같긴 합니다.

2 Likes

뭐 간단한 예시만으로는 말씀하시는 그 똑똑한 코드의 폐혜가 그다지 눈에띄지 않아서 그렇겠지만, 제가보기엔

절차적으로 처리하는게 가장 좋을 내용이라면 아예 linq같은거 없이 절차적인 반복으로 처리하던가, 함수형으로 할거면 제대로 함수형으로 하던가, 이미 짜둔코드를 절충이랍시고 이도저도 아니게 뒤섞이게 만드는쪽이 가장 나빠보입니다.

코드가 쉬워졌다기보단 함수형 입문을 위해 주석 정도 덧붙인 느낌이라 당장은 괜찮을수도 있으나
유지보수과정에서 저 사이사이에 함수형 패러다임을훼손하는 코드가 덧붙여질 여지를 부여해줍니다.

2 Likes