키워드
키워드 (Keywords)
아래 식별자들은 키워드라서 변수나 함수 이름으로 쓸 수 없어요. Octave 매뉴얼 부록 F.1절의 키워드 목록과 주요 키워드의 사용법을 정리해 볼게요.
출처: Keywords
본문
카테고리: Utility Functions | Variable Declaration | Function Definition | Control Statements | Iterating Structures | Classdef Structures | Execution Environment
알파벳순 키워드 목록: __FILE__, __LINE__, break, case, catch, classdef, continue, do, else, elseif, end, end_try_catch, end_unwind_protect, endclassdef, endenumeration, endevents, endfor, endfunction, endif, endmethods, endparfor, endproperties, endswitch, endwhile, endenumeration, events, for, function, global, if, methods, otherwise, parfor, persistent, properties, return, switch, try, until, unwind_protect, unwind_protect_cleanup, while
Utility Functions
iskeyword 함수로 식별자가 Octave에서 예약됐는지 빠르게 확인할 수 있어요.
iskeyword ()
iskeyword (name)
name이 Octave 키워드이면 참을 돌려줍니다. name을 생략하면 키워드 목록을 돌려줘요.
See also: isvarname, exist.
Variable Declaration
global var — 변수를 전역(global) 스코프로 선언해요.
global x;
if (isempty (x))
x = 1;
endif
See also: persistent.
persistent var — 변수를 persistent로 선언해요. 함수 안에서 persistent로 선언된 변수는 같은 함수를 여러 번 호출해도 메모리에 그 내용을 유지해요. persistent 변수와 global 변수의 차이는, persistent 변수는 특정 함수에 국한된 지역 스코프를 가지며 다른 곳에서는 보이지 않는다는 점이에요.
See also: global.
Function Definition
function [outputs] = function_name (input, ...) — 이름 function_name, 결과 outputs, 매개변수 inputs를 가진 함수 본문을 시작해요. 함수는 나중에 다음 구문으로 호출할 수 있어요:
[output1, output2, ...] = function_name (input1, input2, ...)
See also: return.
endfunction — 함수의 끝을 표시해요. See also: function.
end — 배열의 마지막 원소 또는 for, parfor, if, do, while, function, switch, try, unwind_protect 블록의 끝. 배열의 인덱스로 쓰이면 magic 인덱스 "end"는 인덱싱 연산에서 마지막 유효 항목을 가리켜요.
x = [ 1 2 3; 4 5 6 ];
x(1,end)
⇒ 3
x(end,1)
⇒ 4
x(end,end)
⇒ 6
Programming notes:
end키워드는 수동 인덱싱 연산을 위한subsref,subsasgn,substruct에서는 쓸 수 없어요.- 사용자 정의 클래스에서 인덱싱 표현식에
end를 쓰려면 다음과 같은 함수 정의로 오버로드해야 해요:
function last_index = end (obj, end_dim, ndim_obj)
if (end_dim == ndim_obj)
last_index = prod (size (obj)(end_dim:ndim_obj));
else
last_index = size (obj, end_dim);
endif
endfunction
자세한 내용은 Object Oriented Programming 참고. See also: for, parfor, if, do, while, function, switch, try, unwind_protect.
return — 함수나 스크립트에서 호출 코드로 실행 제어를 즉시 돌려줍니다. return은 코드 실행을 멈추고 함수나 스크립트의 끝까지 가지 않고 m-file에서 즉시 빠져나가는 데 써요. 함수나 스크립트가 m-file의 호출 코드가 아니라 직접 호출됐다면 Octave는 명령줄로 돌아갑니다. See also: function.
Control Statements
if (cond) ... endif 등 — if 블록을 시작해요. 조건 cond는 비어 있지 않고 모든 값이 0이 아니면 참이에요.
x = 1;
if (x == 1)
disp ("one");
elseif (x == 2)
disp ("two");
else
disp ("not one or two");
endif
See also: switch.
else — if 블록의 대체 동작. See also: if.
elseif (cond) — if 블록의 대체 조건 테스트. See also: if.
endif — if 블록의 끝. See also: if.
switch statement — switch 블록을 시작해요.
yesno = "yes";
switch (yesno)
case {"Yes" "yes" "YES" "y" "Y"}
value = 1;
case {"No" "no" "NO" "n" "N"}
value = 0;
otherwise
error ("invalid value");
endswitch
See also: if, case, otherwise.
case value / case {value, ...} — switch 블록에서의 case 문. Octave case는 배타적이라서 C 언어 case처럼 fall-through 하지 않아요. switch 문은 최소한 하나의 case를 가져야 합니다. See also: switch.
otherwise — 다른 case 문이 입력과 일치하지 않을 때 실행되는 switch 블록의 기본(기본값) 문. See also: switch, case.
endswitch — switch 블록의 끝. See also: switch.
try — try-catch 블록을 시작해요. try 블록 안에서 오류가 발생하면 catch 코드가 실행되고, catch 블록 뒤에서 실행이 이어집니다(정리가 끝난 뒤 오류를 다시 던지려면 lasterr 함수를 쓰는 것이 권장돼요). See also: catch, unwind_protect.
catch / catch value — try-catch 블록의 정리 부분을 시작해요. See also: try.
end_try_catch — try-catch 블록의 끝. See also: try, catch.
unwind_protect — unwind_protect 블록을 시작해요. unwind_protect 블록의 첫 부분에서 오류가 발생하면, 오류가 던져지기 전에 unwind_protect_cleanup 블록의 명령들이 실행돼요. 오류가 던져지지 않아도 unwind_protect_cleanup 블록은 여전히 실행됩니다. 다시 말해 unwind_protect 블록의 성공/실패와 관계없이 unwind_protect_cleanup 코드는 반드시 실행돼요. See also: unwind_protect_cleanup, try.
unwind_protect_cleanup — unwind_protect 블록의 정리 섹션을 시작해요. See also: unwind_protect.
end_unwind_protect — unwind_protect 블록의 끝. See also: unwind_protect.
Iterating Structures
for i = range — for 루프를 시작해요.
for i = 1:10
i
endfor
See also: parfor, do, while.
endfor — for 루프의 끝. while (cond) — while 루프를 시작해요. 조건 cond는 비어 있지 않고 모든 값이 0이 아니면 참이에요.
i = 0;
while (i < 10)
i++
endwhile
endwhile — while 루프의 끝.
do — do-until 루프를 시작해요. 루프 본문이 최소한 한 번은 실행된다는 점에서 while 루프와 달라요.
i = 0;
do
i++
until (i == 10)
until (cond) — do-until 루프를 끝냅니다. 조건 cond는 비어 있지 않고 모든 값이 0이 아니면 참.
parfor i = range / parfor (i = range, maxproc) — 병렬로 실행될 수 있는 for 루프를 시작해요. parfor 루프는 for 루프와 같은 구문을 가집니다. Octave 세션에 병렬 처리 풀(pool)이 활성화돼 있으면 pool의 worker들에서 병렬로 실행되고, 그렇지 않으면 parfor는 정확히 for처럼 동작해요. 병렬 모드에서는 반복이 순차적으로 일어난다고 보장되지 않고, 루프 본문 안에서 할 수 있는 데이터 접근 연산에 추가 제약이 있어요.
Warning: 병렬 처리 풀은 현재 Octave에서 구현되지 않았습니다. parfor는 현재 정확히 일반 for 루프처럼 동작해요.
parfor i = 1:10
i
endparfor
endparfor — parfor 루프의 끝. break — 가장 안쪽의 do, while, for 루프에서 빠져나와요. continue — 가장 안쪽 do, while, for 루프의 끝으로 점프해요.
Classdef Structures
classdef — classdef 블록을 시작해요. See also: properties, methods, events, enumeration.
endclassdef — classdef 정의의 끝.
properties / endproperties — classdef 정의에서 속성 블록의 시작/끝. 참고로 "properties" 함수는 classdef 클래스나 객체의 속성을 나열하는 함수예요.
methods / endmethods — classdef 정의에서 메서드 블록의 시작/끝. "methods" 함수는 클래스나 객체의 메서드를 나열해요.
events / endevents — classdef 정의에서 events 블록의 시작/끝.
enumeration / endenumeration — classdef 정의에서 enumeration 블록의 시작/끝.
Execution Environment
__FILE__ — lexer가 "__FILE__" 키워드를 인식하면 실행 중인 파일의 전체 이름과 경로를 담은 문자 배열을 반환해요. 명령줄에서 호출되면 "stdin"을 돌려줍니다. See also: __LINE__.
__LINE__ — lexer가 "__LINE__" 키워드를 인식하면 실행 중인 함수나 파일의 현재 입력 줄 번호를 담은 숫자 값을 반환해요. 명령줄에서 호출되면 1을 돌려줍니다. See also: __FILE__.
더 알아보기
- octave-statements — 조건·반복문 (별도 문서)
- octave-functions-and-scripts — 함수와 스크립트 (별도 문서)
- octave-variables — 변수 (별도 문서)