12. Marc Donner
IBM Watson Research
Center
Of all my programming bugs, 80% are syntax errors.
Of the remaining 20%, 80% are trivial logical errors.
Of the remaining 4%, 80% are pointer errors.
And the remaining 0.8% are hard.
12
13. 컴파일 오류 對 런타임 오류
Of all my programming bugs, 80% are syntax errors.
Of the remaining 20%, 80% are trivial logical errors.
Of the remaining 4%, 80% are pointer errors.
And the remaining 0.8% are hard.
13
14. 형식 추론 對 형식 지정
명시적 형변환 對 암시적 형변환
Of all my programming bugs, 80% are syntax errors.
Of the remaining 20%, 80% are trivial logical errors.
Of the remaining 4%, 80% are pointer errors.
And the remaining 0.8% are hard.
14
15. 가비지 수집 對 명시적 자원 관리
Of all my programming bugs, 80% are syntax errors.
Of the remaining 20%, 80% are trivial logical errors.
Of the remaining 4%, 80% are pointer errors.
And the remaining 0.8% are hard.
15
16. 여러분이 잡아야 하는 진짜 버그
Of all my programming bugs, 80% are syntax errors.
Of the remaining 20%, 80% are trivial logical errors.
Of the remaining 4%, 80% are pointer errors.
And the remaining 0.8% are hard.
16
17.
18. 비개발자가 작성하는 코드라면?
Of all my programming bugs, 80% are syntax errors.
Of the remaining 20%, 80% are trivial logical errors.
Of the remaining 4%, 80% are pointer errors.
And the remaining 0.8% are hard.
18
19. 값은 스택에서 바로 날리고
참조는 가비지 수집기에게 맡기자
Of all my programming bugs, 80% are syntax errors.
Of the remaining 20%, 80% are trivial logical errors.
Of the remaining 4%, 80% are pointer errors.
And the remaining 0.8% are hard.
19
20. 추론시켜도 되는 부분은 맡기고
var s = “string”;
의미가 숨어 위험하면 드러낸다
if (p != null)
Of all my programming bugs, 80% are syntax errors.
Of the remaining 20%, 80% are trivial logical errors.
Of the remaining 4%, 80% are pointer errors.
And the remaining 0.8% are hard.
20
21. 타이핑을 줄인다
Of all my programming bugs, 80% are syntax errors.
Of the remaining 20%, 80% are trivial logical errors.
Of the remaining 4%, 80% are pointer errors.
And the remaining 0.8% are hard.
21
29. 반복자
• 스테이트 머신 코드를 컴파일러가 생성
IEnumerable<T> Where<T>(
IEnumerable<T> source,
Func<T, bool> predicate)
{
if (source == null) yield break;
foreach (T value in source)
{
if (!predicate(value)) continue;
yield return value;
}
}
29
30. 초기화 문법
• 지역 변수/배열의 형식은 추론
멤버 필드/속성 초기화도 같이 작성
var list = new List<int>() { 1, 2 };
var values = new[]
{
new SomeKeyValue()
{
Name = “name”,
Value = null,
},
};
30