πŸ““ 읽기 쒋은 μ½”λ“œκ°€ 쒋은 μ½”λ“œλ‹€. || part2. 루프와 논리λ₯Ό λ‹¨μˆœν™”ν•˜κΈ°

πŸ““ 읽기 쒋은 μ½”λ“œκ°€ 쒋은 μ½”λ“œλ‹€. || part2. 루프와 논리λ₯Ό λ‹¨μˆœν™”ν•˜κΈ°

[읽기 쒋은 μ½”λ“œκ°€ 쒋은 μ½”λ“œλ‹€.]λ₯Ό 보고 λ©”λͺ¨ν•  뢀뢄을 μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.

λͺ©μ°¨

  1. 읽기 μ‰½κ²Œ νλ¦„μ œμ–΄ λ§Œλ“€κΈ° β‡’
  2. κ±°λŒ€ν•œ ν‘œν˜„μ„ 잘게 μͺΌκ°œκΈ° β‡’
  3. λ³€μˆ˜μ™€ 가독성 β‡’

μ„œλ‘ 
쒋은 μ½”λ“œλŠ” 무슨 일이 μΌμ–΄λ‚˜κ³  μžˆλŠ”μ§€λ₯Ό λΉ λ₯΄κ²Œ 전달해쀀닀.
μ‚¬μš©ν•˜κΈ°μ—λ„ 즐겁고, μžμ‹ μ—κ²Œλ„ 더 쒋은 μ½”λ“œλ₯Ό λ§Œλ“€μ–΄μ•Ό ν•˜κ² λ‹€λŠ” μš•κ΅¬λ₯Ό λΆˆλŸ¬μΌμœΌν‚€κΈ°λ„ ν•œλ‹€.


PART 2 ) 루프와 논리λ₯Ό λ‹¨μˆœν™”ν•˜κΈ°

νλ¦„μ œμ–΄ control flow 논리식 logical expression λ³€μˆ˜ 등에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž.

μ½”λ“œκ°€ μ½”λ“œλ₯Ό μ½λŠ” μ‚¬λžŒμ—κ²Œ 정신적 뢀담을 더 많이 λΆ€κ³Όν•  수둝,
λ²„κ·ΈλŠ” μ’€μ²˜λŸΌ λˆˆμ— 보이지 μ•Šκ³ ,
μ½”λ“œ μˆ˜μ • μž‘μ—…μ€ 더 μ–΄λ €μ›Œμ§€κ³ ,
κ²°κ΅­ 그런 μ½”λ“œλ‘œ μž‘μ—…ν•˜λŠ” 일이 즐겁지 λͺ»ν•˜κ²Œ λœλ‹€.

7. 읽기 μ‰½κ²Œ νλ¦„μ œμ–΄ λ§Œλ“€κΈ°

λΆ„κΈ°λ¬Έκ³Ό 점프문은 μ–΄λ €μš΄ λŒ€μƒμ΄λ©°, μ½”λ“œλ₯Ό λ³΅μž‘ν•˜κ²Œ λ§Œλ“œλŠ” 원인이닀.

7-1. μ‘°κ±΄λ¬Έμ—μ„œ 인수의 μˆœμ„œ

A > B

  • μ™Όμͺ½ : 값이 더 μœ λ™μ μΈ μ§ˆλ¬Έμ„ λ°›λŠ” ν‘œν˜„
  • 였λ₯Έμͺ½ : 더 고정적인 κ°’, λΉ„κ΅λŒ€μƒμœΌλ‘œ μ‚¬μš©λ˜λŠ” ν‘œν˜„

cf_ μš”λ‹€ν‘œκΈ°λ²• (μ˜›λ‚ μ— μ“°λ˜.. NULL == obj )

7-2. if/else λΈ”λ‘μ˜ μˆœμ„œ

  • 뢀정이 μ•„λ‹Œ 긍정을 닀루어라. 즉 if(!debug)κ°€ μ•„λ‹ˆλΌ if(debug)λ₯Ό μ„ ν˜Έν•˜μž.
  • κ°„λ‹¨ν•œ 것을 λ¨Όμ € μ²˜λ¦¬ν•˜λΌ.
  • 더 ν₯λ―Έλ‘­κ³ , ν™•μ‹€ν•œ 것을 λ¨Όμ € 닀루어라.

7-3. (μ‚Όν•­ μ—°μ‚°μžλ‘œ μ•Œλ €μ§„) ?:λ₯Ό μ΄μš©ν•˜λŠ” 쑰건문 ν‘œν˜„

  • 쀄 수λ₯Ό μ΅œμ†Œν™”ν•˜λŠ” 일보닀 λ‹€λ₯Έ μ‚¬λžŒμ΄ μ½”λ“œλ₯Ό 읽고 μ΄ν•΄ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„μ„ μ΅œμ†Œν™”ν•˜λŠ” 일이 더 μ€‘μš”ν•˜λ‹€.

7-4. do/while 루프λ₯Ό ν”Όν•˜λΌ

7-5. ν•¨μˆ˜ μ€‘κ°„μ—μ„œ λ°˜ν™˜ν•˜κΈ°

7-7. 쀑첩을 μ΅œμ†Œν™”ν•˜κΈ°

루프와 쑰건문을 λΉ„λ‘―ν•œ κ·Έμ™Έ 뢄기문을 읽기 μ‰½κ²Œ λ§Œλ“œλŠ” 방법을 μ‚΄νŽ΄λ³Έ 것이닀.
ν•˜μ§€λ§Œ μžμ‹ μ˜ ν”„λ‘œκ·Έλž¨μ— μ‘΄μž¬ν•˜λŠ” β€˜νλ¦„β€™μ„ μƒμœ„μˆ˜μ€€μ—μ„œ 쑰망해볼 ν•„μš”κ°€ μžˆλ‹€.
ν”„λ‘œκ·Έλž¨μ˜ 전체 μ‹€ν–‰ 경둜λ₯Ό μ‰½κ²Œ λ”°λΌκ°ˆ 수 있게 λ§Œλ“œλŠ” 게 ꢁ극의 λͺ©ν‘œλ‹€.


8. κ±°λŒ€ν•œ ν‘œν˜„μ„ 잘게 μͺΌκ°œκΈ°

μ½”λ“œμ˜ ν‘œν˜„μ΄ 컀지면 컀질수둝 μ΄ν•΄ν•˜κΈ° 더 μ—¬λ ΅λ‹€. β‡’ μ˜ˆμ‹œ: λŒ€μ™•μ˜€μ§•μ–΄ μ‹λ„μ£Όλ³€μ˜ λ„λ„›λ‡Œ

  1. μ„€λͺ… λ³€μˆ˜
    • μ»€λ‹€λž€ ν‘œν˜„μ„ μͺΌκ°œλŠ” κ°€μž₯ μ‰¬μš΄ 방법은 μž‘μ€ ν•˜μœ„ν‘œν˜„μ„ 담을 β€˜μΆ”κ°€λ³€μˆ˜β€˜λ₯Ό λ§Œλ“œλŠ” 것이닀.
      ( μΆ”κ°€λ³€μˆ˜ == μ„€λͺ…λ³€μˆ˜ )
  2. μš”μ•½ λ³€μˆ˜
    • 의미λ₯Ό μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆμ–΄ λ³„λ„μ˜ μ„€λͺ…을 μš”κ΅¬ν•˜μ§€ μ•ŠλŠ” ν‘œν˜„μ΄λΌκ³  해도, μƒˆλ‘œμš΄ λ³€μˆ˜λ‘œ λ‹΄μ•„λ‘λŠ” 방법은 μ—¬μ „νžˆ μœ μš©ν•  수 μžˆλ‹€.
  3. λ“œλͺ¨λ₯΄κ°„μ˜ 법칙 μ‚¬μš©ν•˜κΈ° De Morgan’s Laws
    • if (!(file_exists && !is_protected))
    • if (!file_exists && is_protected)
  4. μ‡ΌνŠΈ μ„œν‚· 논리 였용 말기
    • if ( a || b ) aκ°€ 참이면 bλŠ” ν‰κ°€ν•˜μ§€ μ•ŠλŠ”λ‹€.
  5. 예; λ³΅μž‘ν•œ 논리와 μ”¨λ¦„ν•˜κΈ°
    1
    2
    3
    4
    5
    6
    bool Range:;OverlapsWith(Range other){
    // 'begin'dlsk 'end'κ°€ 'other'에 μ†ν•˜λŠ”μ§€κ²€μ‚¬ν•œλ‹€.
    return (begin >= other.begin && begin < other.end) ||
    (end > other.begin && end <= other.end) ||
    (begin <= other.begin && end >= other.end);
    }
  • 더 μš°μ•„ν•˜κ²Œ μ ‘κ·Όν•˜κΈ°
    1
    2
    3
    4
    5
    6
    bool Range:;OverlapsWith(Range other){
    if (other.end <= begin) return false; // μš°λ¦¬κ°€ μ‹œμž‘ν•˜κΈ° 전에 λλ‚œλ‹€.
    if (other.begin >= begin) return false; // μš°λ¦¬κ°€ λλ‚œ 후에 μ‹œμž‘ν•œλ‹€.

    return true; // λ§ˆμ§€λ§‰ κ°€λŠ₯μ„±λ§Œ λ‚¨μ•˜λ‹€. 즉 κ²ΉμΉœλ‹€.
    }
  1. κ±°λŒ€ν•œ ꡬ문 λ‚˜λˆ„κΈ°
    λ°˜λ³΅λ˜λŠ” 뢀뢄을 β‡’ μš”μ•½λ³€μˆ˜λ‘œ μΆ”μΆœν•  λ•Œ (DRY : Don’t Repeat Yourself)

    • 타이핑 μ‹€μˆ˜λ₯Ό ν”Όν•  수 μžˆλ‹€.
    • μ½”λ“œλ₯Ό ν•œλˆˆμ— ν›“μ–΄λ³΄λŠ”κ²Œ μš©μ΄ν•˜λ„λ‘ μ½”λ“œμ˜ 길이λ₯Ό 쑰이라도 더 쀄여쀀닀.
    • 클래슀λͺ…을 λ³€κ²½ν•΄μ•Ό ν•  λ•Œ ν•œ 곳만 λ°”κΎΈλ©΄ λœλ‹€.
  2. ν‘œν˜„μ„ λ‹¨μˆœν™”ν•˜λŠ” λ‹€λ₯Έ 창의적인 방법듀


9. λ³€μˆ˜μ™€ 가독성

λ³€μˆ˜λ₯Ό μ—‰ν„°λ¦¬λ‘œ μ‚¬μš©ν•˜λ©΄ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ°κ°€ μ–Όλ§ˆλ‚˜ μ–΄λ €μ›Œμ§€λŠ”μ§€ μ‚΄νŽ΄λ³Έλ‹€.

  • λ³€μˆ˜μ˜ μˆ˜κ°€ λ§Žμ„μˆ˜λ‘ κΈ°μ–΅ν•˜κ³  닀루기 더 μ–΄λ €μ›Œμ§„λ‹€.
  • λ³€μˆ˜μ˜ λ²”μœ„κ°€ λ„“μ–΄μ§ˆμˆ˜λ‘ κΈ°μ–΅ν•˜κ³  λ‹€λ£¨λŠ” μ‹œκ°„μ΄ 더 길어진닀.
  • λ³€μˆ˜ 값이 자주 λ°”λ€”μˆ˜λ‘ ν˜„μž¬ 값을 κΈ°μ–΅ν•˜κ³  닀루기가 더 μ–΄λ €μ›Œμ§„λ‹€.

9-1. λ³€μˆ˜ μ œκ±°ν•˜κΈ°

  • λΆˆν•„μš”ν•œ μž„μ‹œ λ³€μˆ˜λ“€
    μ΄λŸ¬ν•œ λ³€μˆ˜κ°€ ꡬ지 ν•„μš”ν•˜μ§€ μ•ŠλŠ” 이유
    • λ³΅μž‘ν•œ ν‘œν˜„μ„ 잘게 λ‚˜λˆ„μ§€ μ•ŠλŠ”λ‹€.
    • λͺ…확성에 도움이 λ˜μ§€ μ•ŠλŠ”λ‹€.
    • ν•œλ²ˆλ§Œ μ‚¬μš©λ˜μ–΄ μ€‘λ³΅λœ μ½”λ“œλ₯Ό μ••μΆ•ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • 쀑간 κ²°κ³Ό μ‚­μ œν•˜κΈ°
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    var remove_one = function (array, value_to_remove) {
    var index_to_remove = null;
    for (var i = 0; i < array.length; i +=1 ){
    if (array[i] === value_to_remove) {
    index_to_remove = i;
    break;
    }
    }
    if (index_to_remove !== null) {
    array.splice(index_to_remove, 1);
    }
    }

    /** μœ„μ˜ λ°©λ²•λ³΄λ‹€λŠ” μ•„λž˜λ°©λ²• **/

    var remove_one = function (array, value_to_remove) {
    var index_to_remove = null;
    for (var i = 0; i < array.length; i +=1 ){
    if (array[i] === value_to_remove) {
    array.splice(i, 1);
    return;
    }
    }
    }

9-2. 흐름 μ œμ–΄ λ³€μˆ˜ μ œκ±°ν•˜κΈ°

  • νλ¦„μ œμ–΄ λ³€μˆ˜? : ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰κ³Ό κ΄€λ ¨λœ λ°©ν–₯을 μ„€μ •ν•˜λŠ” 데 μžˆλ‹€.

9-3. λ³€μˆ˜μ˜ λ²”μœ„λ₯Ό μ’ν˜€λΌ

  • β€˜μ „μ—­λ³€μˆ˜λ₯Ό ν”Όν•˜λΌβ€™λŠ” 쑰언을 ν•œλ²ˆμ―€ λ“€μ—ˆμ„ 것이닀.

    • μ „μ—­ λ³€μˆ˜λŠ” μ–΄λ””μ—μ„œ μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€ 일일이 ν™•μΈν•˜κΈ° μ–΄λ €μš°λ―€λ‘œ μ΄λŠ” ν•©λ‹Ήν•œ 쑰언이닀.
    • λ˜ν•œ, μ „μ—­ λ³€μˆ˜μ˜ 이름과 지역 λ³€μˆ˜μ˜ 이름이 μ€‘λ³΅λ˜μ–΄ 이름곡간이 λ”λŸ¬μ›Œμ§ˆ μˆ˜λ„ 있고, μ–΄λ–€ μ½”λ“œκ°€ 지역 λ³€μˆ˜λ₯Ό λ³€κ²½ν•  λ•Œ μ‹€μˆ˜λ‘œ μ „μ—­ λ³€μˆ˜λ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ ν˜Ήμ€ κ·Έ λ°˜λŒ€μ˜ κ²½μš°κ°€ 일어날 수 μžˆμœΌλ―€λ‘œ νƒ€λ‹Ήν•˜λ‹€.
  • 사싀 μ „μ—­ λ³€μˆ˜ 뿐만 μ•„λ‹ˆλΌ λͺ¨λ“  λ³€μˆ˜μ˜ λ²”μœ„λ₯Ό μ’νžˆλŠ” 일은 μ–Έμ œλ‚˜ μ’‹λ‹€.

  • λ§Žμ€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” λͺ¨λ“ˆ, 클래슀, ν•¨μˆ˜, 블둝 λ²”μœ„ 같은 λ‹€μ–‘ν•œ λ²”μœ„/μ ‘κ·Ό μˆ˜μ€€μ„ μ œκ³΅ν•œλ‹€.

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 프라이빗 λ³€μˆ˜ λ§Œλ“€κΈ°

    1
    2
    3
    4
    5
    6
    7
    8
    submitted = false;
    var submit_form = function(form_name){
    if(submitted){
    return; // 폼을 두 번 μ œμΆœν•˜μ§€ 말라.
    }
    ...
    submitted = true;
    }

    submit_form()만이 μ „μ—­λ³€μˆ˜ submittedλ₯Ό μ‚¬μš©ν•˜λŠ” μœ μΌν•œ ν•¨μˆ˜μ²˜λŸΌ λ³΄μ΄μ§€λ§Œ,
    ν™•μ‹€νžˆ μ•Œ 수 μ—†λ‹€.
    β‡’ λ‹€λ₯Έ μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌμ—μ„œ μ΄μ™€λŠ” λ‹€λ₯Έ λͺ©μ μœΌλ‘œ submittedλΌλŠ” 이름이 뢙은 μ „μ—­ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  지도 λͺ¨λ₯΄λŠ” 일이닀! β‡’ submitted λ³€μˆ˜λ₯Ό ν΄λ‘œμ € 내뢀에 집어 λ„£μ–΄μ„œ 이런 문제λ₯Ό ν•΄κ²°ν•œλ‹€.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var submit_form = (function(){
    var submitted = false;
    return function(form_name){
    if(submitted){
    return; // 폼을 두 번 μ œμΆœν•˜μ§€ 말라.
    }
    ...
    submitted = true;
    }
    }());

    β‡’ ν”„λΌμ΄λΉ—ν•œ λ²”μœ„λ₯Ό λ§Œλ“œλŠ” 효과λ₯Ό κ°–λŠ”λ‹€.