나를 좌절케한 코드...

ageldama의 이미지

  String printSaleGb = ...;
  if ( printSaleGb == "A" ) return mergeTemplate("**/printSaleA.html");
  else if ( printSaleGb == "B" ) return mergeTemplate("**/printSaleB.html");
  else if ... // 이렇게 J까지 있다-_-;;;

한마디로...
  String printSaleGb = ...;
  return mergeTemplate("**/printSale"+printSaleGb+".html");

저런 코드가 여러군데인데 한군데 바꾸고서 좀 바꾸시라고 해도 죽어도 안바꾼다...-_-;;; 위에 코드는 좀 상태가 양호한거고 어떤거는...
  ...
  if ( printSaleGb2 == "E" ) return mergeTemplate("**/printSale2A.html");
  else if ( printSaleGb2 == "K" ) return mergeTemplate("**/printSale2B.html");
  ...

나도 잘난건 없지만 대체 뭘 믿고 코딩하는걸까......
아-_- 저거말고 웃긴거 많은데-_-;;; 쿨럭;;;

여러분들 회사의 저장소에는 저런 코드 없나요?^^;

Necromancer의 이미지

저같은 경우는 if문 안이 한줄짜리라도 다 {, }로 싸버립니다.
C의 dangling-else 문제 때문에 그렇게 습관을 두고 있죠.

한데 여기저기 공공기관 홈페이지 작업하면서 jsp 코드들을 뜯어보는데, 저런식으로 써진거 굉장히 많더군요.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

익명 사용자의 이미지

주로 OOP 어쩌고 하는사람들이 종종 저렇게 짜던데..
C는 간결하게 해야한다고 입문할때부터 나온터라..
여기코드도 객체지향형으로 짜겠다고 짠프로그램있는데.. 바로 저런식으로 짜놨네요..

함수남발에.. 찾아들어가보면.. 저런식으로 if 처리해놓은곳이 많고 혹은... 함수내부에서 다른함수콜하고 바로 리턴합니다.
함수명으로 하드코딩해놓은거죠머..

hayarobi의 이미지

OOP라고 말하면서 실제로는 Class Oriented Programming을 하시는 분들만 보셨나보군요.

---------- 시그 *****
저도 세벌식을 씁니다.
M$윈도우즈, 리눅스, 맥오에스텐, 맥오에스클래식을 모두 엔드유저 수준으로 쓴답니다.
http://psg9.egloos.com

=================
잠못자는 한솔아빠

ironiris의 이미지

제가 짠 코드가 제가 보기에 웃긴게 많습니다.

if ($p->output[0][child][0][child][$i][child][10][content]!=NULL) {
    echo $p->output[0][child][0][child][$i][child][10][content];
}
else {
    echo $p->output[0][child][0][child][$i][child][35][content];
}

이런거.. XML파서 좋은거 구해야 할텐데.. ㅠㅠ
cppig1995의 이미지

존경스럽습니다!
그런데 나중에 유지보수하려면 눈에서 피나오지 않을까요...
이상 허접한 예비중딩의 생각이었습니다...

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

ironiris의 이미지

XML파서가 결과물을 죄다 배열로 리턴해주는 바람에... ㅠㅠ
다른 곳에서 주는 것 주워서 먹다보니 필요한 부분은 단 두개..

pung96의 이미지

순간 펄인줄 알고 답글을 달려고 했었는데.. echo를 보니 아니네요? 이게 어떤 언어죠?

ironiris의 이미지

php입니다.
XML파서가 죄다 배열로 리턴해주는 바람에.. 필요한 부분에 있는 값만 사용하려다보니..

tsuki1372의 이미지

간단한 XML 파싱만 필요하다면, SimpleXML을 사용해보세요.

<posts>
  <post>
    <name>테스트</name>
  </post>
</posts>

같은 XML을

$xml->post->name 같이 접근할 수 있도록 해줍니다. ^^

룰루. 프로그래밍 공부하는 고등학교 1학년.

lman의 이미지

(C라는 가정하에서 씀)
윗 코드가 이상없이 잘(?) 돌아가는게 참.으.로 신기하네요..
바꾸라고 말로만 하지말고, 실제 버그상황을 보여줘야 바꿀듯하네요.
strcmp도 모르는 프로그래머라 -_-

정말 레벨낮은 프로그래머하고 프로그램할려면 열받죠.
그런사람은 차라리 가만히 있는게 도와주는겁니다.

lifthrasiir의 이미지

아뇨, 코드를 봤을 때 C++라고 하더라도 String이 클래스일 가능성이 높으므로 printSaleGb == "A"라는 코드는 printSaleGb.operator==("A")로 변환될 가능성이 큽니다. 코드 자체는 JSP 같아 보이네요.

youlsa의 이미지

도중에 예외가 있을수 있어서 일부러 그렇게 작업하신게 아닐까요? B 템플릿만 몽땅 다른거로 바꿔야 한다거나 뭐 그런...

사실, 오랜 세월에 걸쳐 여러 사람이 손봐온 코드들은 저런 경우 많고요, 특별한 이유가 없고 제대로 동작만 한다면 그대로 두는 것도 그리 나쁜 생각은 아니라는 생각입니다만... ^^

=-=-=-=-=-=-=-=-=
http://youlsa.com

=-=-=-=-=-=-=-=-=
http://youlsa.com

gamdora의 이미지

Quote:

저런 코드가 여러군데인데 한군데 바꾸고서 좀 바꾸시라고 해도 죽어도 안바꾼다...-_-;;;

여러군데······라면 어느 정도인 걸까요?;;

ageldama의 이미지

XCV패턴을 적용하셔서-_-;;; 제가 금방 세어본것만 다섯군데쯤;;;...

예외라고 해봤자 별로 차이가 없는;;; 충분히 재사용 가능하게 만들 수 있는 부분이 많네요...

그리고 언어는 자바인데 '==' 쓴거는 `equals` 쓰기 귀찮아서;;; 쿨럭;;; (실제 코드는 저렇지 않아요. PseudoCode죠. ^^; )

----
The future is here. It's just not widely distributed yet.
- William Gibson

ageldama의 이미지

딱 16군데네요-_-;;;

----
The future is here. It's just not widely distributed yet.
- William Gibson

hongminhee의 이미지

XCV 패턴이 뭐예요? 처음 들어봅니다.

alee의 이미지

저는 제가 짠 코드를 보고 간혹 황당할 때가 있습니다.

697015%(q[0]*2+3)

if절 안에서 아래 구문과 같은 역할을 합니다.

(q[0]!=1 && q[0]!=4 && q[0]!=8 && q[0]!=10 && q[0]!= 13)

1,4,8,10,13 은 한글 초성 중에서 된소리(ㄲ,ㄸ,ㅃ,ㅆ,ㅉ)의 위치 입니다.

cppig1995의 이미지

대단하십니다...
697015%(q[0]*2+3)...

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

익명사용자의 이미지

1,4,8,10,13을 2x+3에 넣으면 소수가 되는군요.
그리고 그 소수를 전부 곱하면 697015가 되는 건가요?
어떻게 그런 발상을 하셨는지...

익명사용자의 이미지

동일한 기능에 대한 사용자가 이해하기 힘든 접근이라고 보이는데요?

과연 성능 향상의 효과가 있는것인가도 장담할 수 없고요. 컴파일러가 최적화 해줄 여지도 제공하지 않는 코드가 아닐까요?
alee 님의 코드가 나쁘다 좋다라고 단정하고자 하는건 아닙니다. 항상 개발자는 자신이 의도하는 바를 시스템 환경과 문제에 최적화하고자 노력해야 하지요.

하지만, 현재 예제 코드만 봐서는 alee님의 코드는 윗 글들에 나오는 코드는 쉽게 짜야한다는 이야기를 역행(?) 하는 한 예를 보여주는 것 같네요. (윗 예제의 if else 반복은 쉽고/어렵고의 차원이 아니라고 생각합니다. 최적화가 안된 코드이죠)

alee의 이미지

그러니까 황당한 코드지요.
성능 향상에 대해서는 전혀 아는 바가 없고, 단지 “||”나 “&&”를 반복해서 사용하는 것 보다
좀 “깔끔해 보이도록” 하기 위해 만든 코드입니다. 게다가··· 재밋잖아요. :)

Darkcircle의 이미지

이런 센스 있는 코드가 나온다는게 쉽진 않다는걸 깨달았습니다. orz

무지랭이는 어딜 가든 괴롭습니다... 중생을 구해주소서~
============================================
니네 군대에서 멀쩡한 몸으로 18시간 자봤어? ㅋㅋㅋ

---------------------------------------------------------------
폐인이 되자 (/ㅂ/)

kirrie의 이미지

위 숫자들을 봤을때 직감적으로 '아 이거 소수겠구나..' 하는 느낌이 오시던가요?
만약 그렇다면 알리님 서번트 신드롬이 아닌지 심각하게 생각해 보심이 좋을듯...

서번트 신드롬 다큐를 본 적이 있는데, 그냥 보기만 해도 이게 소순지 아닌지 '느끼'더군요. ;)
--->
데비안으로 대동단결!

--->
데비안 & 우분투로 대동단결!

익명사용자의 이미지

주로 자바소스보면 저게 쉽다고 저렇게 짜는사람 상당히 많습니다.
거의 오십보백보 수준으로 저코드나 흡사하죠.
왜이렇게 짰냐고하면 이렇게짜야 누구든 알아볼수있고 쉽다고말하더군요.
쉽게짜는게 대세라나...
뭐라할말을 잃었죠...

ageldama의 이미지

대체 왜 주석을 안다느냐, 적어도 뭐하는 메서드인지는 적어달라고 요청을 했었습니다;;;

한다는 말이 딱 그런 말이더군요... "여기서 이게 null이면 someMeth을 호출하고 어쩌고..."-_-;;;

젠장-_- 그러고나서 얼마지나지 않아서 listSaleAccountVw랑 listSaleAccoutVw 라는게 같은 클래스에 있다는걸 확인했습니다.
(서로 완전히 다른 기능을 합니다-_-;;; 그리고 둘 다 뭐하는 메서드인지 설명도 없었습니다-_-;;; 메서드 하나당 2-3페이지 정도 되더라구요;;; )

-_-;;; 저는 자바가 정말 제대로 하려면 힘든 언어인거 같은데 안 그런것처럼 말씀하시는 사람들이 주변에 너무 많네요... (-_-;;; 다른 언어는 javascript, html정도 아시는거 같은데-_-;;; )

어쨌든 프린팅 부분 통합하러 작업해야겠습니다... 후우-_-...

----
The future is here. It's just not widely distributed yet.
- William Gibson

떵꺼리의 이미지

1. 시간이 없어서...(당장 결과를 내야할 때 또는 내라고 쪼일 때)
2. 같이 일하는 상사가 복잡한 걸 싫어해서...(패턴은 채팅할 때나 이성 꼬실때 필요한 것이라고 굳게 믿는 상사분)
3. 허술한 인수인계에 당장 개발을 해야할 때

보통은 저런 유혹에 개발자가 넘어가서 어거지로 짜면 저렇게 되겠죠. ㅋ

저렇게 짜면 얼마 안가서 양심의 가책을 느끼게 됩니다.

이유는 저에게서 인수인계를 받는 사람의 표정을 보고 양심이 찔리게 되죠.(인수인계 받는 사람의 표정은 암호문을 분석하라고 할 때의 표정이랄까?)

그래서 여러가지 소프트웨어 공학책을 읽으면서 개발자로서 바르게 살려고 노력해요.

개발자가 지켜야할 도덕을 지키면서 말이죠. ㅡㅜ

- 변수명, 함수명 잘 만들기
- DRY 지키려 노력하기
- 꼭 필요한 곳에만 주석달기
- 줄 맞춰서 보기좋게 짜기
- 필요없는 주석 지우기(남의 코드에 주석처리된 코드들이 잔뜩 있으면 배선이 가득찬 방의 시한폭탄 시간이 가는 느낌???)
...

암튼 여러가지 지키려 노력합니다. ^^

==============================================
Susia

hey의 이미지

마지막 항목에 정말 공감합니다. 필요없는 주석 지우기 정말 중요합니다. 코드와 일치하지 않는 주석은 없는 것보다 훨씬 나쁩니다.
그리고 주석 처리된 코드도 없어야 한다는 의견에도 적극 공감합니다.

저도 비슷한 생각을 해서 글을 적은 적이 있습니다.

http://wiki.hailydaily.net/wiki.php?%B0%B3%B9%DF%B0%F8%C1%A4#s-2

May the F/OSS be with you..



----------------------------
May the F/OSS be with you..


ㅡ,.ㅡ;;의 이미지

주석 필요하다고 생각되면 달아야겠지만..

쓸데 없이달면 곤란하죠..

주석없는소스는 괜찮은데 수석남발한소스는 보기싫죠..
특히. 함수명을 주석처럼만들고.. 그옆에 또 주석으로 똑같은 설명해놨을때..

----------------------------------------------------------------------------
C Library Development Project


----------------------------------------------------------------------------

socrazy-bill의 이미지

공부 하는 학생인데.. ㅡ.ㅡ 가끔 스스로 저렇게 짜놓고.. 만족할때가
가끔씩 있네요..

정말 프로그램 처음 공부할 때 짜 놓은 소스들 보면 내가 어떤 생각을 하고 이런 소스를 짰을까 하는 의문이 들 정도죠.

────────────────────────────────────
꿈을 현실로 만들자.

──────────────────
You'll only cry those happy tears.
I'll love you with every beat of my heart.
──────────────────

swish95의 이미지

예가 적절한지는 모르겠습니다만..
어떤 일을 할때 대충 하면 하루에 한개씩 할수 있고
29일을 고민하면 하루에 30개를 할수 있다고 할때
그런일이 30 개 주어지면 어떻게 하시겠습니까?
1. 대충 하루에 한개씩 한다.
2. 29일 고민하여 하루에 30개 한다.

상사의 눈에는 1.처럼 일하는 사람이 부지런해 보일지는 모르지만..
다음달이 되어 또 30개 가 떨어진다면 그 효율성은 불을 보듯 뻔한일이지요

아무리 시간이 없고, 상사가 무능해도 스스로와 타협하지는 마십시요..^^

변화는 개인에서 시작되는거 아니겠습니까?

http://www.imaso.co.kr/?doc=bbs/gnuboard.php&bo_table=article&wr_id=10727

관련 링크 걸어봅니다.

------------------------------------------------------------
ProgrammingHolic

gala의 이미지

String printSaleGb = ...;
if ( printSaleGb == "A" ) return mergeTemplate("**/printSaleA.html");
else if ( printSaleGb == "B" ) return mergeTemplate("**/printSaleB.html");
else if ... // 이렇게 J까지 있다-_-;;;

String printSaleGb = ...;
return mergeTemplate("**/printSale"+printSaleGb+".html");

업무가 어떤건지는 잘 모르겟지만

printSale"+printSaleGb+".html" 이 패턴이 바뀌수도 있지 않을까요?

String printSaleGb = ...;
if ( printSaleGb == "A" ) return mergeTemplate("**/printSaleF.html");
else if ( printSaleGb == "B" ) return mergeTemplate("**/printSaleZ.html");
else if ...

경험상 하드 코딩도 가끔 편할때도 있답니다.

Replace all ^^

swish95의 이미지

"경험상 하드 코딩도 가끔 편할때도 있답니다." --- 왠지 위험한 발언 같군요

String printSaleGb = ...;
if ( printSaleGb == "A" ) return mergeTemplate("**/printSaleF.html");
else if ( printSaleGb == "B" ) return mergeTemplate("**/printSaleZ.html");
else if ...

이렇게 된다면 변수를 하나 두어서 정리해야 합니다

String printSaleGb = ...;
String tmpStr = ...;
if ( printSaleGb == "A" ) tmpStr = "F"
else if ( printSaleGb == "B" ) tmpStr = "Z"
else if ...
return mergeTemplate("**/printSale"+ tmpStr + ".html");

Case 문이 가능하다면 그런 방법으로 바꿔야지요
정리하는게 편해서가 아니라 고칠때 점점 일이 많아집니다.
나중에 소스코드의 위치가 바뀌거나 - "**/printSale" 이 아닌 "**/Source/printSale" -
Case가 더 분개되면 그때는 어떻게 하지요?

그때는 Replace 하실건가요?
수백개라면 Replace All 하실건가요?

기형적 코드는 세대를 거듭할수록 기형화 됩니다.

------------------------------------------------------------
ProgrammingHolic

gala의 이미지

위에분 말씀 하시는거 일반적인 맞는 이야기입니다..

저 역시 저런식의 코드를 난발 하지는 않구여..

String printSaleGb = ...;
if ( printSaleGb == "A" ) return A("**/printSaleF.html");
else if ( printSaleGb == "B" ) return B("**/printSaleZ.html");
else if ...

이런식으로 짤수 밖에 없는 상황도 될수 있구여 ..

저 소스를 코딩 하신분이 업무적인 프로세스상 일괄적인 작업이 어렵다고

아니면 각 페이지를 나중에 다른처리를 하게 될수도 잇다고 생각하여

저렇게 심어 놓을 수도 잇습니다..

제말은 그냥 다들 같은 직종에 계시는 분들인데 어쩔수 없이 업무상 시간상

아니면 그때 잠시 생각이 안나서 가독성이 위해 되더라도 그렇게 할수 밖에

없는 상황들이 있을 수 잇다는 겁니다.

너무 몰아 세우지는 마세요 ^^*

좋은 하루 되세요

swish95의 이미지

혹시나 오해의소지가 있을까 하는 말이지요
괜히 과민반응을 보인듯한 느낌이 있기는 하지만..
말하는 저도 100% 다 지키지는 못합니다. 항상 조금씩 모자라지요

------------------------------------------------------------
ProgrammingHolic

익명사용자의 이미지

저 코드의 문제는 코드의 중복성입니다.
유지관리가 편리할수도 있다고 하지만, 그건 단편적으로 보시는것이고
오히려 유지관리가 어렵게 될수 있습니다.

swish95의 이미지

SQL만 정규화가 있는게 아니라는걸 아셔야 될텐데요...

------------------------------------------------------------
ProgrammingHolic

bootmeta의 이미지

아주 예전에 얼핏 DB배울 때의 기억이...
일반적으로는 SQL은 정규화를 하지만 간혹 역으로 비정규화(역정규화?였던가)를 실행해야되는 경우도 있다는 것을 배웠던 기억이 가물가물 머리속에서 떠오릅니다.
역시 상황이 문제겠죠... :)

swish95의 이미지

물론 트집잡는 건 아닙니다만
저역시 이분야에 종사하는 사람으로 말 나온김에 잠깐 언급하겠습니다.
윗분이 말씀하신 비정규화에 관한건 정말이지 이론적인 완성단계에 국한된 얘기라고 할수 있습니다.
비디오대여점 관리 시스템만 10년동안 하신분이 있다 해도
앞으로 닥쳐올 새로운 상황에 대한 대처는 100% 다 할수 없는 것처럼
정규화에 거쳐 완전한 최종단계 - 어쩌면 오지 않을 - 에 이르러서야 효율성을 위한 비정규화가 가능합니다.
있어온 모든 경우와 생겨날 모든경우를 포함하여 자신의 경험이 충분히 어우러져 만들어진 비정규화라면
두말할 나위 없는 최고이겠지만 실제로는 이를 무시하고 정규화를 하지 않는 핑계로
비정규화를 들먹이는 사람이 있다는게 문제지요.

------------------------------------------------------------
ProgrammingHolic

김일영의 이미지

최근에는 DB 다룰 일이 없습니다만
저 역시 DB를 한참 만질적에도 역정규화가 필요한 경우는 없었습니다.
전문 DBA들 역시 튜닝 방법으로 역정규화를 실제 썼었다는 사람은 없더군요.
정규화는 할 때 조금 골치 아프지만 안하면 평생 골치 아픕니다.
말씀이 참 딱 들어맞습니다. 역정규화는 정규화의 종착역을 넘어선 것입니다.
그런데 대개는 정규화를 게을리 한 분들이 변명으로 역정규화를 운운하지요.
안타까운 현실입니다.

익명 사용자(해운대끓는물)의 이미지

여러가지 이유로 인해 테이블의 칼럼이 중복되더라도 눈물을 머금고 역정규화 시켜야 개발자도 DBA도 해피한 경우가 있기 때문이죠. 단순히 본인의 경험에 비추어 봤을때 없었다고 전혀 필요가 없거나 매우 드물기 때문에 정규화에 대한 귀차니즘의 결과로 치부하는건 성급하다고 보입니다.

swish95의 이미지

저는 아직 이분과 같은 경우보다는 설계의 미숙함에서 오는 결함을 감추는 경우가 더 많았는데 이분의 생각이 궁금하네요
익명 사용자라 이 답글을 볼수 없으시겠군요

------------------------------------------------------------
ProgrammingHolic

비행소년의 이미지

높이 날다 떨어지면.
아푸다 ㅡ,.ㅡ

blkstorm의 이미지

임베디드 C프로그래밍을 할 때 비슷한 경험이 있었습니다.

if/else문이 아니라 switch/case문을 사용하는데, case가 대략 20개... (이론적으로는 40개 가까이 되어야하는데, 그나마 필터링이 좀 되서..) 거기다가, 수시로 바뀌는 Spec...

하나의 case문이 적게는 두세줄 많게는 30,40줄...그 코드가 몇년동안 지속되더군요. 이유는,

'멀쩡히 돌아가는거 왜 고치냐'
'함수포인터 쓰면 못알아보는 사람들 많다'

결국, 파생 제품군에 들어가는 코드를 작성할 때 그 부분을 몽땅 함수포인터로 바꿔버렸습니다. 비슷한 경우가 다른 곳에도 있어서 그것까지 다 갈아엎었더니만, 거부감을 갖던 파견사원도 잘 따라하더군요.

벌써 1년 반 전 이야기군요. 아직 그 코드가 살아있을라나? -_-;;

Hyun의 이미지

Quote:
'함수포인터 쓰면 못알아보는 사람들 많다'

전 #if, #endif 가 컴파일 단계에서 동작하는걸 모르는 사람도 봤습니다. 회사에선 C를 키보드가 아닌 마우스로 코딩하시는 분도 많더라구요...
체스맨의 이미지

그런 경우가 있죠... 산업 현장에서 치열한 경쟁에 참여하는 사람들이, 함수 포인터처럼 해당 언어의 기본적인 내용조차 공부하지 않은 사람들까지 배려하는 이유를 알 수가 없군요.

사실 그런 경우 많습니다. C++ 인 경우 더하죠. friend 도 모르고 C++ 프로그램 하는 분들도 있습니다.

그런 사람들이 느끼는 거부감은 자기 중심적인 판단에 불과합니다. 마틴 파울러의 리팩토링에 나오는 다음 유명한 말이 있죠...

"컴퓨터가 이해할 수 있는 코드는 어느 바보나 다 짤 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다."

그런 사람들은 이 말을 오해해서, 자신 또한 사람이기 때문에, 자기가 이해할 수 없는 코드가 나쁜 코드요, 그 작성자는 나쁜 프로그래머로 간주합니다.

의문스러운 것은, 그런 사람들은, 옆사람이 주장하는 방식의 코드와, 인터넷에서 다운로드받은 코드에 대해 동일한 기준을 가지고 평가하지 않는다는 점입니다. 이건 옆사람이 튀어보이는 것에 대한 맹목적 거부감과 질투심에 지나지 않는 것 같습니다.

Orion Project : http://orionids.org

freecatz의 이미지

.

nako의 이미지

시리얼로 들어오는 2바이트를 출력하는 코드를 작성하라고 했었죠.

결과는 다음과 같습니다.

	if(buffer_tmp->str[0] == 'A'){
		if(buffer_tmp->str[1] == 'X'){
			gtk_editable_insert_text (GTK_EDITABLE (AOut_ent), "AX", size, &count);   // A Port
		}
		else if(buffer_tmp->str[1] == 'R'){
			gtk_editable_insert_text (GTK_EDITABLE (AOut_ent), "AR", size, &count);   // A Port
		}
		else if(buffer_tmp->str[1] == 'T'){
			gtk_editable_insert_text (GTK_EDITABLE (AOut_ent), "AT", size, &count);   // A Port
		}

이렇게 열댓개의 else if 가 나오고 이어서 ...
	}
	else if(buffer_tmp->str[0] == 'B'){
		if(buffer_tmp->str[1] == 'T'){	
			gtk_editable_insert_text (GTK_EDITABLE (BOut_ent), "BT", size, &count2);  // B Port
		}
		else if(buffer_tmp->str[1] == '1'){	
			gtk_editable_insert_text (GTK_EDITABLE (BOut_ent), "B1", size, &count2);  // B Port
		}
		else if(buffer_tmp->str[1] == '2'){	
			gtk_editable_insert_text (GTK_EDITABLE (BOut_ent), "B2", size, &count2);  // B Port
		}

이렇게 나갑니다.

저희 회사 신입사원이 쓴 코드입니다. gtk 어쩌고는 원래 있던 코드 고친겁니다.

minsk의 이미지

몇줄의 코드로 사람을 이렇게 까지 웃길수 있다니 코드 작성자가
상당한 유머감각의 소유자 인 것 같습니다.

익명 사용자의 이미지

근데 더웃긴건..프로그램 머같이 짜는사람들 말은 청산유수입니다.

말로 다커버하죠...

여기도 그런사람있는데.. 왜이렇게 짰냐물어보면.. "코드량이 많아도 자체가 쉽지 않느냐... 누가봐도 알수 있게짜야한다.."

머이런식으로.. 어이가 없어 말이 안나오더군요..

kane의 이미지

전 아무리 풀어써놔도
코드량이 많아지면 자동으로 이해하기 힘들어지던데요.
a * 10을 a + a + a + a + a + a + a + a + a + a로 써놓으면 더 이해하기 쉬워질까요?

ydongyol의 이미지

*a *10인줄 알았습니다.zzz

저같은 경우는 머리가 잘 안돌아 갈때 줄줄이 나열합니다..(이럴땐 머리가 코딩을하는게 아니라 손이 하는거죠.ㅋ)

그런다음 정신차리면 그후에 최적화를 하죠..

아직 초보라 한번에 완성되는 코드가 별로 없더라구요..

두세번은 거쳐야..ㄷㄷㄷ

--
Linux강국 KOREA
http://ydongyol.tistory.com/

--
Linux강국 KOREA
http://ydongyol.tistory.com/

익명 사용자의 이미지

출력만 하는게 아니라 입력마다 제어가 다르도록 확장하려 했던게 아닌가요?

nako의 이미지

그냥 들어온 대로 두 바이트 출력하면 되는 문제였습니다.
시리얼로 들어온 프로토콜을 확인하면 끝이었거든요.

위 코드의 문제는 스트링이 뭔지도 이해하지 못하고 있었다는데 있습니다.

수수깡의 이미지


1. 배열을 참조할때 인덱스에 상수값을 가끔 박을 때 약간 찝찝해요..
2. 리펙토링이다 뭐다 좋은 말 많고 복잡하고 뭐가 맞는지는 잘 모르겠지만요..
" 중복코드는 줄여야 되요. "
3. 오픈소스를 많이 봐야되요..@-@ 오픈소스좀 많이 봐야 하는데.....
4. 다른사람이 자기코드의 결함을 발견했을때는 인정해야되요..
5. 이렇게 하면 잘하게 될까~? @-@;;;;;;

THe World is just awesome~!!
http://susukang.tistory.com

익명 사용자의 이미지

if(buffer_tmp->str[0] == 'A'){
if(buffer_tmp->str[1] == 'X'){
gtk_editable_insert_text (GTK_EDITABLE (AOut_ent), "AX", size, &count); // A Port
}
else if(buffer_tmp->str[1] == 'R'){
gtk_editable_insert_text (GTK_EDITABLE (AOut_ent), "AR", size, &count); // A Port
}
else if(buffer_tmp->str[1] == 'T'){
gtk_editable_insert_text (GTK_EDITABLE (AOut_ent), "AT", size, &count); // A Port
}

저 제가 몰라서. 그런데요.
이런부분 이쁘게 짤려면 어떻게 짜면 되나요...
잘 몰라서요.

M.W.Park의 이미지

if로 체크하는 값(입력)과 출력이 같은 것에 힌트가 있지 않나싶네요. ^^;
그냥,

char head[2];
gtk_editable_insert_text (GTK_EDITABLE (AOut_ent), strncpy(head, buffer_tmp->str, 2), size, &count); // A Port

정도로 하면 될듯한데...
잘안되면 head의 길이를 3으로 늘리고, 마지막에 '\0'을 추가해주어야할지도....
아니면, gtk_editable_insert_text 함수의 prototype을 참고해보는 것도 좋겠네요.

-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

JuEUS-U의 이미지

헌데 신기한건,,, 저런분들이
저렇게 if문이 연속적으로 나오는데도,,, 절대로 switch문을 쓰려들지 않는다는 겁니다 -_-;;;

어떤 때는 데이터형 때문에 불가능하다고도 하지만,,

Quote:
switch( 함수( 변수 ) )

이런식의 시도조차 하지 않는....
codebank의 이미지

제가 예전에 어떤일을 맡아었는데 각 코드마다 규칙성도 없고 단순히 분기만 가능한
경우가 있었죠.
어차피 1Byte짜리 코드를 분류하여 상황에 맞게 처리해주면 되는 간단한 부분이었는데
이상하게 이부분에서 계속 실행시 엉뚱한 일이 발생하더군요.
그래서 살펴봤더니 switch()를 사용했는데 16개인가 32개인가의 case문을 지나니까
예측불가능한 jump를 해버리는 바람에 switch ()문을 두번인가 썼던 기억이 나네요.
나중에 나름대로 assembly의 jump가 far jump가 아니여서 그런것이 아닌가하는 추측은
있었지만 나름대로 조금은 황당한 경험이었습니다. :-)

이후에는 그런 상황을 맞이할 경우가 없었지만 만일 또 그런일이 발생한다면 어느정도
자그마한 규칙이라도 찾아서 분류를 해놓는게 더 좋지 않을까하는 생각을 해봤습니다.

switch문보다 if문을 더 선호하는건 if문을 switch문보다 먼저 배우기 때문이 아닐까요?
아니면 if문은 단순하지만 switch문은 case, default, break;등등 그 자체가 복잡해
보여서 그런건 아닐까 생각되네요. :-)
------------------------------
좋은 하루 되세요.

------------------------------
좋은 하루 되세요.

ssehoony의 이미지

이건 코딩 스타일에 따라 조금씩 달라지기도 하니깐 정답이라는게 없겠지만, 그래도 모범 답안이라는 건 있을 법 하군요.

코딩하다가 생기는 이런 부분에 대해 case를 올리고 다양한 사람들의 성능/가독성 측면의 효율적인 코드들을 제시해서 각자의 코딩 스타일을 가다듬는 그런 코너가 있어도 꽤 좋을 것 같다는 생각이 문뜩 드네요.

혹시 이런걸 다룬 글이나 사이트 같은거 있나요? 없으면 제가 하나 해볼까요? ㅎㅎ (사람들이 찾아 올래나?)

kane의 이미지

재밌겠네요.
사용자가 걱정이라면 이 곳의 어느 게시판에서 시작하셔도 괜찮을 것 같은데요.

frenzy의 이미지

가끔 현실적인 문제들이 개입될 수도 있습니다.
시간이라는 요소를 첨가해서 봐야 하지 않을까요?

(물론 제시된 코드자체를 두둔하는 것은 아닙니다.)

^^;;

+
++++++++++++++++++++++++++++++++++++++++++++++
혼자놀기의 도사가 되리라... http://geeklife.co.kr

.
++++++++++++++++++++++++++++++++++++++++++++++
혼자놀기의 도사가 되리라... http://geeklife.co.kr

익명 사용자의 이미지

글들을 주욱봤는데 모두 잘못된 형식이라고 말을 합니다만.. 그다지 권장하지는 않지만 '좌절'이란 단어를 쓸 정도는 아닙니다.
말씀대로 하드코딩은 상당히 경직된 구조를 가져오고 디버깅이 상당히 어려워진다는 단점은 있습니다만 경우에 따라서는
이런 형태가 좋을 수도 있습니다.

단, 따옴표안의 스트링이 다른 곳에서 반복이 된다고 한다면 이건 심각한 문제가 될 수 있습니다만 그렇지 않고 IF 문장안에서 반복이 되고 한 페이지정도에 들어올 분량이면 이건 다른 목적을 염두에 두고 코딩을 했을 가능성도 있습니다.
즉, 가독성을 더욱 중시했을 수도 있습니다.

그리고..

일반적으로 프로그램은 가독성도 상당히 중요합니다. 사람이 이해하기 쉽도록 프로그래밍을 하는것은 상당히 중요하며 객체지향이던 아니던 언어
에는 모두 통용되는 원칙이라고 봅니다.

같은 범주로 '주석'에 대해서는 말이 많으니 언급은 간단히 하겠습니다만 저는 극도로 자제하는 스타일입니다.
이건 argue가 많은 주제니 차치하고라도..

글들이 모두 저 코드조각 그리고 이것을 짠 사람을 지나치게 몰아세우는 분위기라서 한말씀드립니다.

심각한 정도는 아닌것으로 보이며 어디에 사용되는 코드냐에 따라 판단은 달라져야 하지않나 봅니다.

익명 사용자의 이미지

if ( printSaleGb == "A" ) return mergeTemplate("**/printSaleA.html");
if ( printSaleGb == "B" ) return mergeTemplate("**/printSaleB.html");
if ( printSaleGb == "C" ) return mergeTemplate("**/printSaleC.html");
if ( printSaleGb == "D" ) return mergeTemplate("**/printSaleD.html");
if ( printSaleGb == "E" ) return mergeTemplate("**/printSaleE.html");
if ( printSaleGb == "F" ) return mergeTemplate("**/printSaleF.html");

마치 DB 테이블을 풀스캔 하듯이 else문을 안쓰고 항상 if문을 다 태워서 돌아가게끔
짜는 사람도 있더군요. 아무리 말해도 안되더라는..^^

bootmeta의 이미지

if else 구문 대신 if return 구문이 적절할 때도 꽤 많습니다.
실제적으로 예를 드신 구문은 if else와 큰 차이가 없습니다.
문맥상 if else와 치환이 가능한 if return문이라면 취향의 문제입니다.

일단 if else 구문 대신 if return 구문의 장점은 블록 구조에 신경 쓸 필요없이 if return 아래 구문에 더 집중할 수 있게 해줍니다.
그래서 함수 상단 예외 처리 검사용으로 많이 쓰기도 합니다.

결국 상황과 취향의 차이겠죠.

익명 사용자의 이미지

어차피 if 에서 걸리면 아래 구분은 실행되지 않는거 아닌가요?

if else 를 쓰건 if return 을 쓰건 성능상 문제는 없다고 생각됩니다.
오히려 if return 이 구문상 보기 편하다고 생각하는데요.

M.W.Park의 이미지

예전에 모듈화 프로그래밍 쪽에서는 함수의 진입(entry)하는 부분과 빠져나오는 부분(return/exit)이 하나씩만 있어야된다고 강조한 사람(들)이 많이 있었습니다.
즉, return이 한번 등장 하는 것이 좋다는 머 그런 의미죠.
여기 예제처럼 flat한 if의 경우는 익명님 말처럼 가독성이 높아질 수도 있지만, nested if 같은 경우에는 오히려 가독성이 나빠질 수도 있습니다.

그렇지만 요즘의 (주로 OOP 쪽의) 현대적 관점에서 보면 return할 이유가 분명한 시점에서 return을 하는 것은 나쁜 style만은 아니라는 관점도 많이 있는 것같더군요.

예제 코드가 C이므로 모듈화 프로그래밍을 해야한다고 본다면, return은 한군데서 일어나는 것이 조금은 좋은 style이라고 볼 수도 있겠습니다.

-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

kalstein의 이미지

1분안에 돌면되는것을, 50초안에 돌도록 만들겠다고 이상한 최적화를 해서 코드 가독성을 지독히 저하시키는 사람도 싫습니다 -_-

문제는...그런 최적화과정 후에 버그가 산재해 있....;;;;;;

그런사람이...당당히 제 위에 있는데...자신은 언제나 코드 최적화에 심혈을 기울이며, 자신의 코드는 언제나 문제가 없다고 말합니다...네 그런겁니다....힘듭니다 ㅡ.ㅡ;


------------------------------------------
Let`s Smart Move!!
http://kalstein.tistory.com/

dosuser의 이미지

웹 프로그래밍 팀프로젝트 진행중에 저희 팀원이 만들어낸 코드 입니다.
2007년 2월에 졸업해서 아직 취업했다는 말은 듣지 못 했습니다.

class SelBox
{
StringBuffer buf = new StringBuffer();
int size;
SelBox(String sel_name){
buf.append(" ") .append('\n') .append("");
}
void addItem(String item_name){
size = buf.length();
buf.delete(size-9,size);
buf.append(" ") .append(item_name) .append(" ") .append('\n') .append("");
}
void addItem(String item_value, String item_name){
size = buf.length();
buf.delete(size-9,size);
buf.append(" ") .append(item_name) .append(" ") .append('\n').append("");
}
String toString2(){
return(buf.toString());
}
}

프로그래머 다운 프로그래머가 되고 싶습니다. 많은 지도 편달 부탁드립니다^ ^

프로그래머 다운 프로그래머가 되고 싶습니다. 많은 지도 편달 부탁드립니다^^

sephiron의 이미지

StringBuffer buf = new StringBuffer();

이 부분 컴파일 되나요? 포인터를 선언해야 할 텐데

dosuser의 이미지

자바 입니다.

가능합니다.

프로그래머 다운 프로그래머가 되고 싶습니다. 많은 지도 편달 부탁드립니다^ ^

프로그래머 다운 프로그래머가 되고 싶습니다. 많은 지도 편달 부탁드립니다^^