Scratch에서 "hello, world"를 출력하려면 이와 같이 블럭을 조립한다. 같은 결과 도출을 위해
C
를 활용하면, 코드는 다음과 같다.
#include <stdio.h>
int main(void)
{
printf("hello, world");
}
- 같은 결과 도출을 위해 코드를 작성한다면, 아래 내용들을 고려해야 한다.
- 정확성 Correctness: 코드가 의도한대로 작동하는가
- 디자인 Design: 코드가 얼마나 잘 쓰였는가에 대한 주관적 척도. 기준은 불필요한 반복 없이 효율성과 우아함 또는 논리적으로 읽을 수 있는가이다.
- 스타일 Style: 코드가 얼마나 미학적으로 형식화되어있는가. 일관된 들여쓰기(indentation)나 다른 입력방식들을 의미한다. 스타일의 차이는 코드의 정확성이나 의미를 해치지는 않지만, 가독성에 영향을 미친다.
- 이 코스를 위한 도구이다. integrated development environment(통합개발환경)
- 로그인 후 뜨는 창에서 위쪽 패널이코드를 입력할 수 있는 텍스트파일을 포함하는 부분이다. 아래쪽 패널은 terminal window라고 하는데, 위쪽 패널에서 입력한 코드를 포함하여, 명령을 입력하고 실행시킨다.
#include <stdio.h>
int main(void)
{
printf("hello, world");
}
- 위 코드를 실행시키기 위해, CLI을 써야 한다. 이는 command-line interface를 의미한다.
- Scratch의 GUI(graphical user interface)와 반대되는 것이라고 이해하면 된다. GUI에는 텍스트 뿐 아니라, 아이콘, 이미지, 버튼들이 존재한다.
- 코드는 사람이 읽을 수 있는 문자로 쓰여지는데, 이를 컴퓨터(기계)가 이해할 수 있게
0,1로 구성된 이진법
으로 바꿔주는 컴파일링 작업이 필요하다.- 컴파일링 작업을 하는 프로그램을 컴파일러 compiler라고 한다.
- terminal(아래쪽 부분)에 있는
$
표시는 프롬프트가 어디에 있는지 또는 어디에 명령을 더 입력할 수 있는지를 보여주는 지표다.- 뭔 말인지 이해가 안감ㅋㅋㅋㅋ
- Scratch에서처럼,
함수
는 프로그램이 작동하도록 만드는 작은 액션 또는 동사이며, 함수 안에 들어가는 input을argument
(인수)라고 한다.- C에서 화면에 뭔가 출력하라는 함수는
printf
이다. (이때,f
는 formatted를 의미한다.) - 인수는 괄호(parentheses)안에 입력하며,
" "
는 그 따옴표 안에 입력한 텍스트를 그대로 출력하도록 한다. 또한, 괄호 뒤에 붙는;
는 그 줄의 코드 입력이 끝났다는 것을 의미한다.
- C에서 화면에 뭔가 출력하라는 함수는
- 함수는 두 가지 결과를 갖는다.
side effects
(부작용). 결과값 외에 호출된 함수 밖에서 관찰할 수 있는 어플리케이션의 상태 변경. 예를 들어, 화면에 뭔가 출력하는 것. 부작용은 프로그램의 동작을 이해하기 어렵게 한다. 명령형 프로그래밍은 부작용을 사용하여 프로그램을 동작케 하고, 함수형 프로그래밍은 부작용을 최소화한다return values
(결과값). 사용하거나 저장해두기 위해 프로그램에 돌려보내는 값. Scratch를 예로 들면,ask
블럭이answer
블럭을 만들어내는 것.ask 블럭
과 같은 기능을 얻기 위해,library
를 사용한다. 이는 이미 만들어져 있는 코드를 의미한다.- 예시1: ask블럭과 같은 결과얻기
string answer = get_string("What's your name? ");
- CS50 library에서
get_string
은 이용자에게string
(문자 배열)을 묻고, 프로그램에 리턴하는 역할을 한다. - C에서
=
는 할당(assignment)을 의미한다. 좌변의 변수에 우변의 값을 대입한다는 것이다. 위 예제에서 좌변에 값을 대입하기 위해, C는 먼저get_string
의 결과값을 얻으려 할 것이다. - 또한, 위 예제에서 변수
answer
는 string 타입이라고 주어졌으므로, 프로그램이 0과1의 이진법 정보를 문자로 변환해야 하는 것을 알고 실행에 옮긴다.
- CS50 library에서
- 예시2: 입력값을 함수의 input으로 넣기
printf("hello, %s", answer);
%s
는format code
~~아마도 서식~~이다.
format code설명부분부터 재개
- 2021.05.31 마크다운에서 목차 쓰기
[](#)
형태로 쓴다.- 이 때,
[ ]
사이에 들어가는 텍스트가 노출되며,(#)
에서#
뒤에 이동하고 싶은 부분의 제목을 입력한다. - 링크로서 제목을 쓸 때 주의사항이 있는데, 띄어쓰기를
-
로 연결해야 하며, 영어는 모두 소문자로 작성해야 한다.
- 이 때,
- 2021.05.31 명령형 vs 선언형 프로그래밍
- 함수의 역할_1.side effects관련해서, 명령형 프로그래밍과 선언형 프로그래밍에 대해 궁금해져 찾아보았다.
명령형vs선언형 프로그래밍, 참고블로그
- 명령형은 How, 어떻게 할 것인가에 관심을 둔다. 선언형은 What, 무엇을 할 것인가에 더 집중한다.
- 예를 들어, html은 선언형으로, 원하는 것을 어떻게 수행하는지가 아니라 무엇을 해야 하는지를 보여준다.
- 반면, Javascript는 명령형으로, 어떻게 결과를 도출할 것인지를 써야 한다. 사람이 한 눈에 코드를 읽기가 비교적 더 어려운 편이다. 컴파일러처럼 코드를 단계별로 살펴봐야 한다.
- 명령형 프로그래밍에서 발생하는 어려움, 문제를 극복하기 위해 선언형 방식을 차용해 활용하기도 하고, React 등의 도구로 선언적 코드를 작성하기도 한다. 이 점은 현재 내 이해를 넘어서는 부분이라, 차후 다시 살펴보기로!
- 함수의 역할_1.side effects관련해서, 명령형 프로그래밍과 선언형 프로그래밍에 대해 궁금해져 찾아보았다.
명령형vs선언형 프로그래밍, 참고블로그