The following article will continue to point out some possible cases when writing PHP code in general, Laravel in particular. These may be basic logical errors, improper function usage; Or simply convention errors are not worth it.
In addition, a few examples related to JS in general and Jquery in particular will be mentioned.
Part 1 of the series: A look at some of the code is not very good (Part 1)
10. Use multiple isset()
functions at the same time
Instead of writing the following:
1 2 | <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">isset</span> <span class="token punctuation">(</span> <span class="token variable">$a</span> <span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token function">isset</span> <span class="token punctuation">(</span> <span class="token variable">$b</span> <span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token function">isset</span> <span class="token punctuation">(</span> <span class="token variable">$c</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">.</span> <span class="token punctuation">.</span> <span class="token punctuation">.</span> <span class="token punctuation">}</span> |
Can be combined into a function call:
1 2 | <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">isset</span> <span class="token punctuation">(</span> <span class="token variable">$a</span> <span class="token punctuation">,</span> <span class="token variable">$b</span> <span class="token punctuation">,</span> <span class="token variable">$c</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">.</span> <span class="token punctuation">.</span> <span class="token punctuation">.</span> <span class="token punctuation">}</span> |
11. The assertion order was not right when writing Unit Test
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <span class="token keyword">class</span> <span class="token class-name">A</span> <span class="token punctuation">{</span> <span class="token keyword">function</span> <span class="token function">foo</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">true</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">function</span> <span class="token function">bar</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">A</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token variable">$a</span> <span class="token operator">=</span> <span class="token function">bar</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">assertTrue</span> <span class="token punctuation">(</span> <span class="token variable">$a</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">foo</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">assertInstanceOf</span> <span class="token punctuation">(</span> A <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">class</span> <span class="token punctuation">,</span> <span class="token variable">$a</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Testing whether $a
is an instance of A::class
should be performed before testing functions inside A::class
.
1 2 3 | <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">assertInstanceOf</span> <span class="token punctuation">(</span> A <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">class</span> <span class="token punctuation">,</span> <span class="token variable">$a</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">assertTrue</span> <span class="token punctuation">(</span> <span class="token variable">$a</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">foo</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
12. Use the isset()
function to check for null with the array access syntax on IlluminateHttpRequest
(Laravel)
1 2 3 4 5 6 7 8 9 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">foo</span> <span class="token punctuation">(</span> <span class="token package">Illuminate Http Request</span> <span class="token variable">$request</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">isset</span> <span class="token punctuation">(</span> <span class="token variable">$request</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'a'</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">var_dump</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'a is exist and not null'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token function">var_dump</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'a is not exist or null'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
When sending a request with a = null
, the above function will still display the result inside if
condition, instead of else
.
To be able to access the properties of the Request
object with array syntax, the Request
class must implement the ArrayAccess interface.
Therefore, when using isset()
on $request['a']
, it is essentially calling the offsetExists
function implemented in class IlluminateHttpRequest
.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <span class="token comment">/** * Determine if the given offset exists. * * @param string $offset * @return bool */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">offsetExists</span> <span class="token punctuation">(</span> <span class="token variable">$offset</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> Arr <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">has</span> <span class="token punctuation">(</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">all</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">route</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">parameters</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token variable">$offset</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
This function only checks for the existence of a
in the incoming request, not if the value of a
is null.
1 2 | <span class="token function">isset</span> <span class="token punctuation">(</span> <span class="token variable">$request</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'a'</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token operator">===</span> <span class="token variable">$request</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">offsetExists</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'a'</span> <span class="token punctuation">)</span> <span class="token comment">// true;</span> |
This is a confusing point when the default isset()
function checks whether a variable exists and is not null.
Therefore, be cautious when using array syntax on the IlluminateHttpRequest
: if (isset($request['a']) && !is_null($request['a']))
object if (isset($request['a']) && !is_null($request['a']))
; or convert to array form using isset()
function
1 2 3 4 5 6 7 8 9 10 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">foo</span> <span class="token punctuation">(</span> <span class="token package">Illuminate Http Request</span> <span class="token variable">$request</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token variable">$request</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">only</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'a'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">isset</span> <span class="token punctuation">(</span> <span class="token variable">$data</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'a'</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">var_dump</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'a is exist and not null'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token function">var_dump</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'a is not exist or null'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
13. Using magic method bluff
1 2 3 4 5 6 7 8 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">foo</span> <span class="token punctuation">(</span> <span class="token package">Illuminate Http Request</span> <span class="token variable">$request</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$title</span> <span class="token operator">=</span> <span class="token variable">$request</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">title</span> <span class="token punctuation">;</span> <span class="token variable">$content</span> <span class="token operator">=</span> <span class="token variable">$request</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">content</span> <span class="token punctuation">;</span> <span class="token function">var_dump</span> <span class="token punctuation">(</span> <span class="token variable">$title</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">var_dump</span> <span class="token punctuation">(</span> <span class="token variable">$content</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
The code above is a typical example when you want to access a value in a request sent by key, based on the magic method.
In this example, the data submitted is a request containing information about the title ( title
) and content ( content
) of a certain post
.
Access through the title
key is quite smooth, although this is not recommended and many risks. You can refer to the following article: Laravel requests … DEADLY flexible
However, the problem will be more visible when using the magic method in the code below:
$content = $request->content;
This line of code instead of getting the value of the input content
box submitted, it prioritizes the value of the protected $content
attribute in the previous Request class. Therefore, lead to undesirable results.
Therefore, in addition to not naming the key in the request that matches the properties of the Request class, the magic method should be restricted to being used to access a value in the Laravel request.
14. Name the function does not start with a verb
A function usually represents a certain action / function. Therefore, the function name should begin with a verb.
Instead of
1 2 | <span class="token keyword">function</span> <span class="token function">passwordValidation</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> |
Consider changing to:
1 2 | <span class="token keyword">function</span> <span class="token function">execPasswordValidation</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> |
1 2 | <span class="token keyword">function</span> <span class="token function">validatePassword</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> |
15. Array name is not in plural form
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token variable">$post</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span> <span class="token variable">$post</span> <span class="token keyword">as</span> <span class="token variable">$eachPost</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//</span> <span class="token punctuation">}</span> <span class="token variable">$commentData</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span> <span class="token variable">$commentData</span> <span class="token keyword">as</span> <span class="token variable">$comment</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//</span> <span class="token punctuation">}</span> |
Convention naming arrays in plural form is not required in some cases. However, naming in the plural will make the code a bit easier to read.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <span class="token variable">$post</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span> <span class="token variable">$posts</span> <span class="token keyword">as</span> <span class="token variable">$post</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//</span> <span class="token punctuation">}</span> <span class="token variable">$comments</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span> <span class="token variable">$comments</span> <span class="token keyword">as</span> <span class="token variable">$comment</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//</span> <span class="token punctuation">}</span> |
16. Unreasonably named route
1 2 3 4 5 6 7 8 | Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">name</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'posts.'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">prefix</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'posts'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">group</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">' <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">name</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'list_of_posts'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Or</span> <span class="token comment">//Route::get('/', ' <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> ')->name('post_list');</span> <span class="token comment">//Route::get('/', ' <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> ')->name('list_post');</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/create'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">' <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">name</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'create_post'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Calling and using the route according to the corresponding route name:
1 2 3 | <span class="token function">route</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'posts.list_of_posts'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">route</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'posts.create_post'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Instead, you can shorten:
1 2 3 4 5 6 7 8 | Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">name</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'posts.'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">prefix</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'posts'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">group</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">' <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">name</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'list'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/create'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">' <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">name</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'create'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">route</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'posts.list'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">route</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'posts.create'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
17. Duplicate jQuery selector
1 2 3 | <span class="token function">$</span> <span class="token punctuation">(</span> <span class="token string">'#foo'</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">show</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> $childElements <span class="token operator">=</span> <span class="token function">$</span> <span class="token punctuation">(</span> <span class="token string">'#foo'</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">find</span> <span class="token punctuation">(</span> <span class="token string">'.bar'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
In addition to some special cases, the code above is not optimized when performing the same element search twice. Can consider revising as follows:
1 2 3 4 | <span class="token keyword">var</span> parentElement <span class="token operator">=</span> <span class="token function">$</span> <span class="token punctuation">(</span> <span class="token string">'#foo'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> parentElement <span class="token punctuation">.</span> <span class="token function">show</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> childElements <span class="token operator">=</span> parentElement <span class="token punctuation">.</span> <span class="token function">find</span> <span class="token punctuation">(</span> <span class="token string">'.bar'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
18. Access attribute may not exist in an object
1 2 3 4 5 6 7 | $ <span class="token punctuation">.</span> <span class="token function">ajax</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> error <span class="token punctuation">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> errorResponse <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">let</span> errors <span class="token operator">=</span> errorResponse <span class="token punctuation">.</span> foo <span class="token punctuation">.</span> bar <span class="token punctuation">;</span> <span class="token function">showBarError</span> <span class="token punctuation">(</span> errors <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
In the above example, the error when showBarError()
Ajax request will be displayed through the showBarError()
function. This function takes a parameter as the value of the bar
attribute in the errorResponse.foo
object.
If the error response is returned as an object with the same structure as above, the error display will have no problems.
However, in practice, especially in the case of error handling, the returned data may be unpredictable and unpredictable. Therefore, it is advisable to consider adding test conditions before accessing the properties of an object or using try-catch
syntax.
1 2 3 4 5 6 7 8 9 10 11 | $ <span class="token punctuation">.</span> <span class="token function">ajax</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> error <span class="token punctuation">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> errorResponse <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> <span class="token keyword">let</span> errors <span class="token operator">=</span> errorResponse <span class="token punctuation">.</span> foo <span class="token punctuation">.</span> bar <span class="token punctuation">;</span> <span class="token function">showError</span> <span class="token punctuation">(</span> errors <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span> <span class="token class-name">exception</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">showUndefinedError</span> <span class="token punctuation">(</span> exception <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 3 4 5 6 7 8 9 10 11 12 | $ <span class="token punctuation">.</span> <span class="token function">ajax</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> error <span class="token punctuation">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> errorResponse <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">let</span> errors <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">let</span> foo <span class="token operator">=</span> errorResponse <span class="token punctuation">.</span> foo <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> foo <span class="token punctuation">.</span> bar <span class="token punctuation">)</span> <span class="token punctuation">{</span> errors <span class="token operator">=</span> foo <span class="token punctuation">.</span> bar <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token function">showBarError</span> <span class="token punctuation">(</span> errors <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
19. Initializing unnecessary values
1 2 3 4 5 6 7 8 | <span class="token keyword">let</span> foo <span class="token operator">=</span> <span class="token string">'bar'</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">isTrue</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> foo <span class="token operator">=</span> <span class="token string">'true'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> foo <span class="token operator">=</span> <span class="token string">'false'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Initializing the
bar
initial value in the above example is not necessary because the value of the variable foo
always overwritten in the if-else
below. Depending on the actual problem, it can be corrected in either of the following directions:1 2 3 4 5 6 | <span class="token keyword">let</span> foo <span class="token operator">=</span> <span class="token string">'false'</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">isTrue</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> foo <span class="token operator">=</span> <span class="token string">'true'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
1 2 3 4 5 6 7 8 | <span class="token keyword">let</span> foo <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">isTrue</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> foo <span class="token operator">=</span> <span class="token string">'true'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> foo <span class="token operator">=</span> <span class="token string">'false'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
However, in some special cases, such as the
isTrue()
function throws an exception, initialization of the initial value becomes necessary.1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token keyword">let</span> foo <span class="token operator">=</span> <span class="token string">'bar'</span> <span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">isTrue</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> foo <span class="token operator">=</span> <span class="token string">'true'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> foo <span class="token operator">=</span> <span class="token string">'false'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span> <span class="token class-name">e</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">report</span> <span class="token punctuation">(</span> e <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |