2017. 12. 4. 23:59

자바스크립트를 본격적으로 공부하기 전에 용어 정리


* 표현식


- 값을 만들어내는 간단한 코드


예를 들면


* 273

* 10 + 20 + 30 * 2

* 'RintIanTta'



* 문장


하나 이상의 표현식이 모여 문장이 됨


마침표를 찍듯이 문장의 끝에는 세미콜론을 찍어 문장의 종결을 알림


사실 자바스크립트는 문장 끝에 세미콜론을 입력하지 않아도 줄바꿈만 하면 프로그램 실행에 문제가 없음


하지만, 대부분의 프로그래밍 언어가 문장 끝에 세미 콜론을 입력하므로 자바스크립트도 관례상 입력하는 것 뿐임



* 10 + 20 + 30 * 2;


* var rintiantta = 'Rint' + 'Ian' + 'Tta';


* alert('Hello JavaScript..!');


* 273;


하나의 표현식도 세미콜론만 찍히면 문장이라고 부름


이러한 문장이 모여서 프로그램을 이룸






2017. 11. 9. 19:32

이름을 잘 짓는 간단한 규칙


1. 의도를 분명히 밝혀라


- 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 많다


- 변수나 함수 그리고 클래스 이름은 다음과 같은 질문에 모두 대답 가능


1. 존재 이유

2. 수행 기능

3. 사용 방법


- 따로 주석이 필요하다면 의도를 분명히 드러내지 못함


int d; // 경과 시간(단위 : 날짜)


이름 d는 아무 의미도 드러나지 않는다


- 측정하려는 값과 단위를 표현하는 이름이 필요하다


int elapsedTimeInDays;


int daysSinceCreation;


int daysSinceModification;


int fileAgeInDays;


의도가 드러나는 이름을 사용하면 코드 이해와 변경이 쉬워진다



다음 코드는 무엇을 할까?


public vector<int*> getThem() {

    vector<int*> list1;

    for(auto x : theList)

        if(x[0] == 4)

            list1.push_back(x);

    return list1;

}


코드가 하는 일을 짐작하기 어렵다


왜일까? 복잡한 문장은 없다


공백과 들여쓰기도 적당하다


변수는 세 개, 상수는 두 개 뿐이다


화려한 클래스나 다형성 메서드도 없다


단지 배열 목록만 사용한다


문제는 코드의 단순성이 아니라 코드의 함축성이다


다시 말해 코드 맥랙이 코드 자체에 명시적으로 드러나지 않는다


위 코드는 암암리에 독자가 다음과 같은 정보를 안다고 가정한다


1. theList에 무엇이 들어있는가?


2. theList에서 0번째 값이 어째서 중요한가?


3. 값 4는 무슨 의미인가?


4. 함수가 반환하는 리스트 list1을 어떻게 사용하는가?



위 코드 샘플엔 이와 같은 정보가 드러나지 않는다


하지만 정보 제공은 충분히 가능했었다


지뢰찾기 게임을 만든다고 가정하자


그러면 theList가 게임판이라는 사실을 안다


theList를 gameBoard로 바꿔보자


게임판에서 각 칸은 단순 배열로 표현한다


배열에서 0 번째 값은 칸 상태를 뜻한다


값 4는 깃발이 꽂힌 상태를 가리킨다


각 개념에 이름만 붙여도 코드가 상당히 나아진다



public vector<int*> getFlaggedCells( ) {

    vector<int*> flaggedCells;

     for(auto cell : gameBoard)

        if(cell[STATUS_VALUE] == FLAGGED)

            flaggedCells.push_back(cell);

    return flaggedCells;

}



연산자 수와 상수 수는 똑같다


그런데도 코드는 더욱 명확해졌다


한 걸음 나아가 int 배열을 사용하는 대신, 칸을 간단한 클래스로 만든다


isFlagged라는 좀 더 명시적인 함수를 사용해 FLAGGED라는 상수를 감춰도 된다



public vector<Cell> getFlaggedCells( ) {

    vector<Cell> flaggedCells;

     for(auto cell : gameBoard)

        if(cell.isFlagged( ))

            flaggedCells.push_back(cell);

    return flaggedCells;

}


단순히 이름만 고쳤는데도 함수가 하는 일을 이해하기 쉬워졌다


이것이 좋은 이름이 주는 위력이다




2017. 10. 24. 13:05

https://www.codecademy.com/courses/python-advanced-ko/0/1?curriculum_id=53b5e0d8fed2a81590000003

2017. 9. 9. 06:47
2017. 9. 6. 00:13

USB를 꽂고 뺄 때 발생하는 이벤트를 처리하는 함수를 구현한다


WM_DEVICECHANGE 메시지를 재정의한다


메시지 맵에는 다음과 같은 함수가 추가된다


ON_WM_DEVICECHANGE()



다음과 같은 메시지 핸들러 내부를 처리한다


afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD_PTR dwData)

{

if(7 == nEventType) // USB 넣고 뺄 때 nEventType이 7로 날라옴

CreateDriveButtons();


return TRUE;


}