코드 냄새 154 - 너무 많은 변수
17494 단어 beginnerstutorialprogrammingwebdev
TL;DR: Variables should be as local as possible
문제
솔루션
문맥
우리의 코드는 테스트 케이스를 빠르게 프로그래밍하고 작성할 때 지저분해야 합니다.
커버리지가 좋은 후에는 메소드를 리팩토링하고 줄여야 합니다.
샘플 코드
잘못된
<?
function retrieveImagesFrom(array $imageUrls) {
foreach ($imageUrls as $index=>$imageFilename) {
$imageName = $imageNames[$index];
$fullImageName = $this->directory() . "\\" . $imageFilename;
if (!file_exists($fullImageName)) {
if (str_starts_with($imageFilename, 'https://cdn.example.com/')) {
// TODO: Remove Hardcode
$url = $imageFilename;
// This variable duplication is no really necesary
// When we scope variables
$saveto= "c:\\temp"."\\".basename($imageFilename);
// TODO: Remove Hardcode
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$raw = curl_exec($ch);
curl_close ($ch);
if(file_exists($saveto)){
unlink($saveto);
}
$fp = fopen($saveto,'x');
fwrite($fp, $raw);
fclose($fp);
$sha1 = sha1_file($saveto);
$found = false;
$files = array_diff(scandir($this->directory()), array('.', '..'));
foreach ($files as $file){
if ($sha1 == sha1_file($this->directory()."\\".$file)) {
$images[$imageName]['remote'] = $imageFilename;
$images[$imageName]['local'] = $file;
$imageFilename = $file;
$found = true;
// Iteration keeps going on even after we found it
}
}
if (!$found){
throw new \Exception('We couldnt find image');
}
// Debugging at this point our context is polluted with variables
// from previous executions no longer needed
// for example: the curl handler
}
오른쪽
<?php
function retrieveImagesFrom(string imageUrls) {
foreach ($imageUrls as $index => $imageFilename) {
$imageName = $imageNames[$index];
$fullImageName = $this->directory() . "\\" . $imageFilename;
if (!file_exists($fullImageName)) {
if ($this->isRemoteFileName($imageFilename)) {
$temporaryFilename = $this->temporaryLocalPlaceFor($imageFilename);
$this->retrieveFileAndSaveIt($imageFilename, $temporaryFilename);
$localFileSha1 = sha1_file($temporaryFilename);
list($found, $images, $imageFilename) = $this->tryToFindFile($localFileSha1, $imageFilename, $images, $imageName);
if (!$found) {
throw new \Exception('File not found locally ('.$imageFilename.'). Need to retrieve it and store it');
}
} else {
throw new \Exception('Image does not exist on directory ' . $fullImageName);
}
}
발각
[X] 자동
대부분의 Linter는 긴 방법에 대한 사용을 제안할 수 있습니다.
이 경고는 또한 변수를 중단하고 범위를 지정하도록 암시합니다.
태그
잘못된
<?
function retrieveImagesFrom(array $imageUrls) {
foreach ($imageUrls as $index=>$imageFilename) {
$imageName = $imageNames[$index];
$fullImageName = $this->directory() . "\\" . $imageFilename;
if (!file_exists($fullImageName)) {
if (str_starts_with($imageFilename, 'https://cdn.example.com/')) {
// TODO: Remove Hardcode
$url = $imageFilename;
// This variable duplication is no really necesary
// When we scope variables
$saveto= "c:\\temp"."\\".basename($imageFilename);
// TODO: Remove Hardcode
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$raw = curl_exec($ch);
curl_close ($ch);
if(file_exists($saveto)){
unlink($saveto);
}
$fp = fopen($saveto,'x');
fwrite($fp, $raw);
fclose($fp);
$sha1 = sha1_file($saveto);
$found = false;
$files = array_diff(scandir($this->directory()), array('.', '..'));
foreach ($files as $file){
if ($sha1 == sha1_file($this->directory()."\\".$file)) {
$images[$imageName]['remote'] = $imageFilename;
$images[$imageName]['local'] = $file;
$imageFilename = $file;
$found = true;
// Iteration keeps going on even after we found it
}
}
if (!$found){
throw new \Exception('We couldnt find image');
}
// Debugging at this point our context is polluted with variables
// from previous executions no longer needed
// for example: the curl handler
}
오른쪽
<?php
function retrieveImagesFrom(string imageUrls) {
foreach ($imageUrls as $index => $imageFilename) {
$imageName = $imageNames[$index];
$fullImageName = $this->directory() . "\\" . $imageFilename;
if (!file_exists($fullImageName)) {
if ($this->isRemoteFileName($imageFilename)) {
$temporaryFilename = $this->temporaryLocalPlaceFor($imageFilename);
$this->retrieveFileAndSaveIt($imageFilename, $temporaryFilename);
$localFileSha1 = sha1_file($temporaryFilename);
list($found, $images, $imageFilename) = $this->tryToFindFile($localFileSha1, $imageFilename, $images, $imageName);
if (!$found) {
throw new \Exception('File not found locally ('.$imageFilename.'). Need to retrieve it and store it');
}
} else {
throw new \Exception('Image does not exist on directory ' . $fullImageName);
}
}
발각
[X] 자동
대부분의 Linter는 긴 방법에 대한 사용을 제안할 수 있습니다.
이 경고는 또한 변수를 중단하고 범위를 지정하도록 암시합니다.
태그
결론
우리의 가장 친한 친구입니다.
우리는 그것을 많이 사용해야 합니다.
처지
코드 냄새 149 - 선택적 연결
Maxi Contieri ・ 7월 16일 ・ 2분 읽기
#javascript
#webdev
#beginners
#programming
코드 냄새 107 - 변수 재사용
Maxi Contieri ・ 2021년 12월 1일 ・ 2분 읽기
#oop
#programming
#webdev
#tutorial
코드 냄새 62 - 플래그 변수
Maxi Contieri ・ 2021년 2월 8일 ・ 1분 읽기
#programming
#oop
#webdev
#tutorial
리팩토링
리팩토링 002 - 메서드 추출
Maxi Contieri ・ 2021년 11월 25일 ・ 2분 읽기
#refactoring
#oop
#webdev
#codenewbie
학점
사진 제공: Dustan Woodhouse on Unsplash
Temporary variables can be a problem. They are only useful within their own routine, and therefore they encourage long, complex routines.
마틴 파울러
소프트웨어 엔지니어링 좋은 인용구
Maxi Contieri ・ 12월 28일 '20 ・ 13분 읽기
#codenewbie
#programming
#quotes
#software
이 기사는 CodeSmell 시리즈의 일부입니다.
코드에서 냄새 나는 부분을 찾는 방법
Maxi Contieri ・ 2021년 5월 21일 ・ 7분 읽기
#codenewbie
#tutorial
#codequality
#beginners
Reference
이 문제에 관하여(코드 냄새 154 - 너무 많은 변수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/mcsee/code-smell-154-too-many-variables-4h6h
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
코드 냄새 149 - 선택적 연결
Maxi Contieri ・ 7월 16일 ・ 2분 읽기
#javascript
#webdev
#beginners
#programming
코드 냄새 107 - 변수 재사용
Maxi Contieri ・ 2021년 12월 1일 ・ 2분 읽기
#oop
#programming
#webdev
#tutorial
코드 냄새 62 - 플래그 변수
Maxi Contieri ・ 2021년 2월 8일 ・ 1분 읽기
#programming
#oop
#webdev
#tutorial
리팩토링
리팩토링 002 - 메서드 추출
Maxi Contieri ・ 2021년 11월 25일 ・ 2분 읽기
#refactoring
#oop
#webdev
#codenewbie
학점
사진 제공: Dustan Woodhouse on Unsplash
Temporary variables can be a problem. They are only useful within their own routine, and therefore they encourage long, complex routines.
마틴 파울러
소프트웨어 엔지니어링 좋은 인용구
Maxi Contieri ・ 12월 28일 '20 ・ 13분 읽기
#codenewbie
#programming
#quotes
#software
이 기사는 CodeSmell 시리즈의 일부입니다.
코드에서 냄새 나는 부분을 찾는 방법
Maxi Contieri ・ 2021년 5월 21일 ・ 7분 읽기
#codenewbie
#tutorial
#codequality
#beginners
Reference
이 문제에 관하여(코드 냄새 154 - 너무 많은 변수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/mcsee/code-smell-154-too-many-variables-4h6h
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
리팩토링 002 - 메서드 추출
Maxi Contieri ・ 2021년 11월 25일 ・ 2분 읽기
#refactoring
#oop
#webdev
#codenewbie
사진 제공: Dustan Woodhouse on Unsplash
Temporary variables can be a problem. They are only useful within their own routine, and therefore they encourage long, complex routines.
마틴 파울러
소프트웨어 엔지니어링 좋은 인용구
Maxi Contieri ・ 12월 28일 '20 ・ 13분 읽기
#codenewbie
#programming
#quotes
#software
이 기사는 CodeSmell 시리즈의 일부입니다.
코드에서 냄새 나는 부분을 찾는 방법
Maxi Contieri ・ 2021년 5월 21일 ・ 7분 읽기
#codenewbie
#tutorial
#codequality
#beginners
Reference
이 문제에 관하여(코드 냄새 154 - 너무 많은 변수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mcsee/code-smell-154-too-many-variables-4h6h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)