코드스멜 100 - GoTo
14801 단어 pooprogrammingcodesmellcleancode
TL;DR: Don't ever use GoTo.
문제
솔루션
문맥
Basic에서 프로그래밍을 시작했습니다.
GOTO는 그곳에서 심하게 학대당했습니다.
재활 모드에서 처음부터 구조화된 프로그래밍을 배워야 했습니다.
샘플 코드
잘못된
for x < 0 {
if x > -1e-09 {
goto small
}
z = z / x
x = x + 1
}
for x < 2 {
if x < 1e-09 {
goto small
}
z = z / x
x = x + 1
}
if x == 2 {
return z
}
x = x - 2
p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6]
q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7]
return z * p / q
small:
if x == 0 {
return Inf(1)
}
return z / ((1 + Euler*x) * x)
}
오른쪽
for x < 0 {
if x > -1e-09 {
return small(x, z)
}
z = z / x
x = x + 1
}
for x < 2 {
if x < 1e-09 {
return small(x, z)
}
z = z / x
x = x + 1
}
if x == 2 {
return z
}
x = x - 2
p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6]
q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7]
return z * p / q
small(x, z){
if x == 0 {
return Inf(1)
}
return z / ((1 + Euler*x) * x)
}
}
발각
[X] 자동
GOTO를 지원하는 언어에서 린터는 사용에 대해 경고할 수 있습니다.
태그
잘못된
for x < 0 {
if x > -1e-09 {
goto small
}
z = z / x
x = x + 1
}
for x < 2 {
if x < 1e-09 {
goto small
}
z = z / x
x = x + 1
}
if x == 2 {
return z
}
x = x - 2
p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6]
q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7]
return z * p / q
small:
if x == 0 {
return Inf(1)
}
return z / ((1 + Euler*x) * x)
}
오른쪽
for x < 0 {
if x > -1e-09 {
return small(x, z)
}
z = z / x
x = x + 1
}
for x < 2 {
if x < 1e-09 {
return small(x, z)
}
z = z / x
x = x + 1
}
if x == 2 {
return z
}
x = x - 2
p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6]
q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7]
return z * p / q
small(x, z){
if x == 0 {
return Inf(1)
}
return z / ((1 + Euler*x) * x)
}
}
발각
[X] 자동
GOTO를 지원하는 언어에서 린터는 사용에 대해 경고할 수 있습니다.
태그
결론
우리는 수십 년 전에 GOTO 문제를 인정했습니다.
문제는 현대 언어에도 여전히 존재합니다.
대부분의 프로그래머는 다행스럽게도 GOTO 문장을 피합니다. 다음 목표는 해로운 것으로 간주하는 것입니다.
예의XKCD
처지
코드 냄새 12 - Null
Maxi Contieri ・ 2020년 10월 31일 ・ 2분 읽기
#codenewbie
#tutorial
#oop
더 많은 정보
코드 냄새 12 - Null
Maxi Contieri ・ 2020년 10월 31일 ・ 2분 읽기
#codenewbie
#tutorial
#oop
더 많은 정보
학점
Jens Johnsson에 Unsplash의 사진
이전에 BASIC에 노출된 적이 있는 학생들에게 좋은 프로그래밍을 가르치는 것은 사실상 불가능합니다. 잠재적인 프로그래머로서 그들은 재생의 희망을 넘어 정신적으로 절단됩니다.
Edsger Dijkstra
소프트웨어 엔지니어링 좋은 인용구
Maxi Contieri · 2020년 12월 28일 · 13분 읽기
#codenewbie
#programming
#quotes
#software
이 기사는 CodeSmell 시리즈의 일부입니다.
코드에서 악취나는 부분을 찾는 방법
Maxi Contieri · May 21 '21 · 4분 읽기
#codenewbie
#tutorial
#codequality
#beginners
Reference
이 문제에 관하여(코드스멜 100 - GoTo), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/mcsee/code-smell-100-goto-b3a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
소프트웨어 엔지니어링 좋은 인용구
Maxi Contieri · 2020년 12월 28일 · 13분 읽기
#codenewbie
#programming
#quotes
#software
코드에서 악취나는 부분을 찾는 방법
Maxi Contieri · May 21 '21 · 4분 읽기
#codenewbie
#tutorial
#codequality
#beginners
Reference
이 문제에 관하여(코드스멜 100 - GoTo), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mcsee/code-smell-100-goto-b3a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)