let,const와 나의 관점

8281 단어 letconstjavascript
"응, 논란이 되는 댓글은 아니야."라고 그가 말한 것은 틀렸다.
모르는 사람들에게 이 제목은 12월 21일 인터넷 개발자 트위터와 레드디트에서 진행된 작은 토론을 가리킨다.

이 추문은 a reddit post of his에 관한 것으로, 그가 자신의 훌륭한 블로그https://overreacted.io/에 쓴 문장과 연결되어 있다
게시물의 많은 댓글들이 그의 글의 일부분을 비판했다. 그 중에서 변수 귀속, 지원let, 필요할 때만 사용const을 언급했다.사람들은 통상적으로 상반된 방식으로 행동하기 때문에 변이가 필요할 때constlet만 지지하기 때문에 이 부분에 대한 댓글이 많다.

댄은 트위터에 자신의 관점을 변호하며 TC39의 일부 사람들의 지지를 받았다. 지금이든 답장 중인 링크든.
TC39 멤버가 그의 의견에 응답한 듯한 게시물은 제이미 빌즈의 것이다. https://jamie.build/const
이에 민감한 누구에게나 이 글은 상당히 많은 욕을 썼지만 흥미로운 글이다.
내 생각?저는 const의 옹호자입니다.나는 트위터에 아무런 답장도 남기지 않았다. 왜냐하면 나는 어떤 소셜 미디어도 사용하지 않는 경향이 있기 때문이다. (적어도 소셜 미디어의 목적에서 비롯된 것이다. 나는 단지 트위터에 농담을 했을 뿐이다.)
비록 그렇긴 하지만, 나는 본래 글을 올리지 않으려고 했지만, 요 며칠 동안 줄곧 내 머릿속에 맴돌고 있어서, 나는 어쩔 수 없이 이것으로 뭔가를 써야 한다.관건이 하나 있는데, 나는 많은 사람들이 실종되었다고 생각한다. 나는 이 점을 제공하고 싶다.
제 게시물은 보통 JS에 관한 까다로운 문제를 처리하기 때문에 이것은 제 전공 범위를 약간 초과하지만, 저는 그래도 몇 가지 내용을 포괄하려고 합니다.

상수 vs let


당장, 그들은 무엇을 합니까?ES6에서 제공하는 이유는 무엇입니까?설마 우리는 var 없단 말인가?var 많은 사람들이 버그처럼 보이기 때문에 거의 사용을 멈추었다.var 반조립 허용.나는 에서 이것에 대해 상세하게 논술하였으나, 본질적으로 변수 성명은 현재 함수/파일 범위의 맨 위로 향상되었다.
그 밖에 var 블록 작용역의 제한을 받지 않고 for 회로에서 향상시킬 수 있다.이 두 가지 괴로운 점은 우리에게 두 가지 선택-letconst를 가져다 주었다.letvar으로 볼 수 있지만 이 두 개의 "bug"가 없습니다. constlet으로 볼 수 있지만 일정한 변수가 귀속되어 있습니다.
상수 변수 바인딩과 상수 값을 만들지 않는 차이는 매우 중요하다.const를 사용하여 변수를 생성하여 일부 비원본 데이터 구조에 할당하는 경우 구조를 변경할 수 있지만 재할당할 수는 없습니다.이런 차이는 한 마디로 표현할 수 있다. 만약에 사람들이 교수const를 멈추고 이를 불가변 데이터 구조를 만드는 것이지 불가변 귀속물을 만드는 것이 아니라면 교수는 훨씬 쉬워질 것이다.
간단한 예:
const myObj = {};       // {} is a non-primitive
myObj.name = 'EmNudge'; // You can still mutate the object
myObj = 3               // ERROR - you can't reassign it.
그게 다야.가장 좋은 것은 사용하지 않는 것이다var. 당신이 Kyle Simpson(모든 농담, 그는 확실히 이 화제에 대해 좋은 관찰을 했다), 그리고 필요할 때만 사용한다const. 그렇지?
완전히 그렇지는 않다.var에서 온 첫 번째 반응은 사용let이지만 많은javascript 개발자들이 서로 다른 조언을 해 준다.우선 댄 아브라모프와 다른 사람들이 왜 렛을 선호하는지 토론해 봅시다.

기본 설정 -


사실 단 아브라모프wrote an article는 이 패배가 발생한 지 얼마 되지 않아 자신을 변호하기 시작했다.그는 쌍방을 비교했지만 내가 대부분의 댓글에서 본 결함을 또 한 번 놓쳤다.
우리들에게 그의 관점을 좀 봅시다.그의 관점은 대부분의 그의 관점과 같은 사람들과 일치하는 것 같아서 나는 다른 출처의 어떤 내용도 포함하지 않을 것이다.

의도의 상실


댄은 선호-const는 어떤 사물이 고정을 유지하는 데 어떤 중요성을 가지고 있는지 알 수 없다는 것을 의미한다고 주장했다.아마도 우리는 하루의 초수에 대해 약간의 가치가 있습니까?이것은 우리가 개발자에게 통지하고 싶은 상량치이다.

혼란스럽다


댄은 또 많은 초보자들이 const 와 불변성을 혼동하는 것을 보았다고 주장했다.앞에서 말한 바와 같이 const 데이터 구조가 아니라 상량 귀속을 생성하는 데만 사용되지만 초보자에게는 뚜렷하지 않다.

다시 밝히는 압력을 피하다


이것은 사실상 흥미로운 문제이자 왜 내가 do-expressions의 옹호자이거나 적어도 가끔 생활 방식을 사용하는 이유이다.이것도 일부 물건을 하나의 함수로 분해하여 해결할 수 있다.
본질적으로 말하자면, 댄은 사람들이 가변 값이 아니라 삼원 연산자를 자주 사용하고, if 문장을 사용하여 그것을 재정의한다고 말한다.

콘스트는 사람들이 말하는 그런 것이 아니다


다음 두 가지 원인은 기본적으로 const 어떤 진정한 이익도 제공하지 않았다는 것이다.그것은 버그를 방지할 수 없고, 어떠한 성능 우위도 없다.설령 사용let한다 하더라도 엔진은 이미 어떤 이익도 가져왔다.
그럼 제 변호는 뭐예요?

기본 설정 - 상수


나는 이런 약간 무질서한 문제들을 처리할 것이니 나를 용인해 주십시오.

성능 이점


네, 엔진의 장점을 직접 깨닫지 못했어요.이것은 우리가 const 를 제창한 원인이 아니지만, 나는 지금 그것을 let 사람의 승리로 삼을 것이다.브라우저 엔진을 만드는 사람들은 마침 그들의 일을 매우 잘한다.그것은 JS 코드를 작성하는 구체적인 방법을 많이 인용했다. 예를 들어 "no js-specific micro optimizations".

혼란스럽다


나는 이것이 좀 짜증스럽다고 생각한다.JS는 이상한 부분이 많아요. 만약 그것들이 존재하지 않는다면 저는 매우 기쁠 것입니다. 그러나 우리는 그것들을 소홀히 해서는 안 됩니다.대부분의 경우 사용let은 사람들이 지금 보는 것만 막을 뿐const, 이 방면은 무의미하다. 많은 코드 라이브러리는 이미 사용-const을 선호하는 경향이 있다.const 상량 값이 아닌 상량 귀속으로 설정해야 한다.불행하게도 그것은 변하지 않는 값이 아니라 "tant pis" 이다.varlet에 익숙해진 사람이 있다면 곤혹스러울 수도 있다.가방을 닫는 것은 사람을 곤혹스럽게 한다.은근한 협박은 사람을 곤혹스럽게 한다.
그렇습니다. 도입된 혼란이 적을수록 좋습니다. 그러나 이것은 우리가 가능한 한 피해야 할 한 가지가 아닙니다. 왜냐하면 뒤에 더 많은 원인을 설명할 수 있기 때문입니다.

이롭지 않다


나는 이 점에 완전히 찬성하지 않는 흥미로운 입장을 취할 것이다.const 기본값으로 사용할 때 유용합니다.만약 네가 가끔 사용한다면const, 너는 필요할 때만 그것을 진정으로 사용해야 한다.네가 항상 그것을 사용할 때만 진정한 장점이 나타날 수 있다.
이것은 다음과 마지막 점에서 큰 역할을 발휘할 것이며, 이것은 그 자신의 부분을 필요로 할 것이다.

의도가 이동되었습니다.


의도는 잃는 것이 아니라 감동일 뿐이다.내가 직면한 큰 문제는 사람들이 개발자가 const 를 사용하여 의도를 성명한다고 가정하는 것이다.실제로 사람들은 의도를 설명하기 위해 let 를 사용한다.
거슬러 올라가자.

가독성


특정한 프로그래밍 사례에서 가장 인기 있는 부분 중 하나는 다른 사람의 코드를 읽는 것이 얼마나 쉬운가이다. 왜냐하면 이것은 당신이 개발자로서 많은 업무에서 가장 많이 하는 일이기 때문이다.
만약 코드가 비교적 짧다면, 통상적으로 더욱 쉽게 읽을 수 있다.만약 코드가 좋은 변수 이름을 사용했다면, 통상적으로 더욱 쉽게 읽을 수 있을 것이다.만약 그것이 특정한 명령식이 아니라 성명적이라면, 통상적으로 더욱 쉽게 읽을 수 있다.
코드를 조회하는 가장 큰 시간 절약 방법 중 하나는 읽기 의도이다.만약 내가 누군가의 코드가 성명성 함수 이름을 사용하는 것을 본다면, 나는 적어도 그들의 코드가 무엇을 하려고 하는지 안다.만약 그것이 말한 것을 하지 못했다면, 나는 그것이 버그라는 것을 안다.

코드를 통한 의도


이것도 함수 이름뿐만 아니라 다른 부분으로 확장되었다.평론은 의도를 나타낸다.사용 가능한 유형 HOF 은 의도를 표시할 수 있습니다.문자열에 대해 역기호와 따옴표를 사용하여 의도를 나타냅니다.많은 일들이 나의 의도를 나타낸다. 나는 너의 코드를 훑어보고 지금 발생하고 있는 일을 더욱 잘 이해할 수 있다.
변수 성명에 관하여 rust 기본적으로 불변성이다.나는 코드를 제거하는 변수보다 변이가 훨씬 어렵기 때문에 이런 방식을 더욱 좋아한다.
rust에서 변수는 let 로 표시됩니다.만약 그것들이 후기에 돌연변이가 발생한다면 let mut 로 성명한다.내가 mut을 보았을 때, 나는 이 변수가 변화하는 것을 보고 싶었다.나 이거 좋아해.mut 내가 변이가 있다는 것을 나타낸다.const 단독적인 의미가 있지만 변수의 불변성은 우리가 배후 의도를 드러내는 데 신경 써야 할 것이 아니다.이것은 사물의 자연 방식이다.
내가 더 좋아하는 - const로 바뀌었을 때, 나는 처음에는 상당히 싫었다.나는 나의 변수 중 얼마나 많은 것이 진정으로 변한 적이 없는지 모른다.현재, 내 코드에 포함된 let 은 너무 적다. 당신이 정말로 그것들을 검색하지 않으면, for 순환 이외의 어떤 것도 눈치채지 못할 것이다.
사실상 let 의도를 밝힌 것이지 반대가 아니다.만약 내가 let, 상당히 심상치 않은 키워드를 보았다면, 나는 곧 변화가 있을 것이라는 것을 안다.

너는 여전히 let을 사용할 수 있다


만약 누군가가 새로운 변수에 대해 삼원조를 사용하고 싶지 않다면, 그들은 let를 잘 사용할 수 있을 것이다. 나는 곧 변이가 나타날 것이라고 안다.prefer-let를 사용하면, if 문장이 변경될지 모르겠습니다.이 기회를 빌려 중간 함수를 사용할 수도 있고, 삼원 함수와 관련되지 않고 const 을 사용할 수도 있습니다.
첫 번째 선택 - const 떠나지 않음 let.당신은 여전히 사용할 수 있습니다 let. 그러나 장면에 유리하다는 것을 발견했을 때만 사용할 수 있습니다.
어떤 물건을 상량으로 지정하시겠습니까?비명 사례를 사용하다.THIS_VARIABLE_NAME 이미 나에게 특정한 상수를 보여 주었다.나는 다른 키워드로 이 점을 표시할 필요가 없다.prefer-const를 사용하면 const 의도를 삭제하지 않고 새로운 let 의도를 제공하여 더욱 유용하다는 것을 증명합니다.

결론


단 아브라모프의 말처럼, 통상적으로 자신의 프로젝트를 개척하는 것이 아니라 특정 프로젝트의 관례를 견지하는 것이 가장 좋다.일치하는 코드는 더 깨끗한 코드다.
명절 잘 보내세요!

좋은 웹페이지 즐겨찾기