GnuSmalltalkUsersGuide:BaseChapter 119

From 흡혈양파의 번역工房
Revision as of 15:47, 27 January 2014 by Onionmixer (talk | contribs) (GSUG Number 페이지 추가)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Number

Number

네임스페이스 Smalltalk에 정의됨

슈퍼클래스: Magnitude

범주: 언어-데이터 타입


나는 부동 소수점과 정수를 포함해 숫자에 대한 연산을 제공하는 추상 클래스이다. 나는 일반 서술어를 제공하고, 2항 연산에 대한 함축적 타입 강제 변환 코드를 제공한다.


Number 클래스: 변환하기

coerce: aNumber

aNumber 를 응답하라 - 그것이 속한 클래스가 무엇이든 괜찮다.

readFrom: aStream

수신자의 인스턴스로 변환된 aStream의 나머지 부분에서 읽어온 숫자를 응답하라. 수신자가 숫자인 경우 결과의 클래스는 정의되지 않는다 - 하지만 결과는 괜찮다.

readFrom: aStream radix: anInteger

수신자의 인스턴스로 변환된 aStream의 나머지 부분에서 읽어온 숫자를 응답하라. 수신자가 숫자인 경우 결과의 클래스는 정의되지 않는다 - 하지만 결과는 괜찮다.


Number 클래스: 검사하기

isImmediate

x가 수신자의 인스턴스인 경우 x copy == x인지 응답하라.


Number: 산술

* aNumber

수신자의 aNumber를 제하여 결과를 응답하라.

+ aNumber

수신자와 aNumber를 합하여 결과를 응답하라.

- aNumber

수신자로부터 aNumber를 제하여 결과를 응답하라.

/ aNumber

수신자를 aNumber로 나누어 결과를 응답하라 (정밀도 손실되지 않음). aNumber가 0인 경우 유효한 (어쩌면 무한의) 연속값을 리턴하거나 ZeroDivide를 발생시켜라.

// aNumber

음의 무한에서 자름(truncation)을 이용해 수신자를 aNumber로 나눈 정수 몫을 리턴하라. aNumber가 0인 경우 ZeroDivide 예외를 발생시켜라.

\\ aNumber

음의 무한에서 자름(truncation)을 이용해 수신자를 aNumber로 나눈 나머지를 리턴하라. aNumber가 0인 경우 ZeroDivide 예외를 발생시켜라.

quo: aNumber

0에서 자름(truncation)을 이용해 수신자를 aNumber로 나눈 정수 몫을 리턴하라. aNumber가 0인 경우 ZeroDivide 예외를 발생시켜라.

reciprocal

수신자의 reciprocal을 리턴하라.

rem: aNumber

0에서 자름(truncation)을 이용해 수신자를 aNumber로 나눈 나머지를 리턴하라. aNumber가 0인 경우 ZeroDivide 예외를 발생시켜라.


Number: 강제 유형 변환

asCNumber

수신자를 C call-out 메커니즘이 이해하는 유형의 숫자로 변환하라.


Number: 비교하기

max: aNumber

수신자와 aNumber 간 최대값을 응답하라. self 또는 aNumber가 NaN인 경우 항상 그 값을 응답하도록 확보하는 데 필요하다면 서브클래스에서 재정의하라.

min: aNumber

수신자와 aNumber 간 최소값을 응답하라. self 또는 aNumber가 NaN인 경우 항상 그 값을 응답하도록 확보하는 데 필요하다면 서브클래스에서 재정의하라.


Number: 변환하기

asFloat

수신자를 Float의 임의 서브클래스로 변환하라.

asFloatD

해당 메서드의 기능은 Number의 서브클래스에 의해 구현되어야 한다.

asFloatE

해당 메서드의 기능은 Number의 서브클래스에 의해 구현되어야 한다.

asFloatQ

해당 메서드의 기능은 Number의 서브클래스에 의해 구현되어야 한다.

asNumber

수신자가 이미 숫자이므로 그대로 응답하라.

asRectangle

origin이 (self asPoint)인 빈 rectangle을 응답하라.

asScaledDecimal: n

ScaledDecimal 객체로 변환된 수신자를 응답하라.

asScaledDecimal: denDigits radix: base scale: n

base^denDigits로 나누고 ScaledDecimal 객체로 변환된 수신자를 응답하라.

coerce: aNumber

정수 또는 부동 소수점 수로 변환된 aNumber를 응답하라.

degreesToRadians

수신자를 radians로 변환하라.

generality

수신자의 범용성(generality)를 응답하라.

radiansToDegrees

수신자를 radians에서 degrees로 변환하라.

unity

1을 수신자의 클래스로 강제 유형 변환(coerce)하라. 기본 구현도 효과가 있지만 충분하지 않다.

zero

0을 수신자의 클래스로 강제 유형 변환(coerce)하라. 기본 구현도 효과가 있지만 충분하지 않다.


Number: 복사하기

deepCopy

수신자를 리턴하라 - 직접 객체(immediate object)이다(변경 불가).

shallowCopy

수신자를 리턴하라 - 직접 객체(immediate object)이다(변경 불가).


Number: 오류 발생시키기

arithmeticError: msg

msg를 메시지 텍스트로서 갖고 있는 ArithmeticError 예외를 발생시켜라.

zeroDivide

피제수(dividend)가 수신자에 해당하는 dividion-by-zero(ZeroDivide) 예외를 발생시켜라.


Number: 다양한 수학

abs

수신자의 절대값을 응답하라.

arcCos

수신자의 아크코사인을 응답하라.

arcCosh

수신자의 쌍곡선 아크코사인을 응답하라.

arcSin

수신자의 아크사인을 응답하라.

arcSinh

수신자의 쌍곡선 아크사인을 응답하라.

arcTan

수신자의 아크탄젠트를 응답하라.

arcTan: x

(0, 0)부터 시작해 (1, 0)로 이동하면서 - 예: 3시 - (x, self)과 ray의 각도(시계 반대방향으로 측정)를 응답하라.

arcTanh

수신자의 쌍곡선 아크탄젠트를 응답하라.

ceilingLog: radix

(self log: radix) 상한값(ceiling)을 응답하라. 정수를 응답하기에 최적화되었다.

cos

수신자의 코사인을 응답하라.

cosh

수신자의 쌍곡선 코사인을 응답하라.

estimatedLog

(self abs floorLog: 10)의 추정값(estimate)을 응답하라. 해당 메서드는 서브클래스에 의해 오버라이드되어야 하지만 Number의 구현은 오류를 발생시키지 않는다 - 단순히 올바른 결과를 제공하므로 속도가 느리다.

exp

e에 수신자를 거듭제곱한 값을 응답하라.

floorLog: radix

(self log: radix) 하한값(floor)을 응답하라. 정수를 응답하기에 최적화되었다.

ln

수신자의 로그 밑(log base) e를 응답하라.

log

수신자의 로그 밑(log base) 10을 응답하라.

log: aNumber

수시자의 로그 밑(log base) aNumber를 응답하라.

negated

수신자의 negated를 응답하라.

positiveDifference: aNumber

수신자와 aNumber의 양의 차이, 즉 self를 응답하라 - 양수일 경우 aNumber, 그 외의 경우 0.

raisedTo: aNumber

self의 aNumber 거듭제곱값을 리턴하라.

raisedToInteger: anInteger

self의 anInteger 거듭제곱값을 리턴하라.

sin

수신자의 사인을 응답하라.

sinh

수신자의 쌍곡선 사인을 응답하라.

sqrt

수신자의 제곱근을 응답하라.

squared

수신자의 제곱값을 응답하라.

tan

수신자의 탄젠트를 응답하라.

tanh

수신자의 쌍곡선 탄젠트를 응답하라.

withSignOf: aNumber

부호가 aNumber의 부호에 일치하도록 변경되었을지도 모르는 수신자를 응답하라.


Number: 포인트 생성

@ y

x가 수신자이고 y가 y인 새 포인트를 응답하라.

asPoint

새 포인트, self @ self를 응답하라.


Number: 재시도하기

retry: aSymbol coercing: aNumber

가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 aSymbol의 호출을 재시도하라. aSymbol은 #= 또는 #~=(aNumber가 Number가 아닐 경우 실패할 것이기 때문에)가 아니어야 한다.

retryDifferenceCoercing: aNumber

가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 #-의 호출을 재시도하라.

retryDivisionCoercing: aNumber

가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 #/의 호출을 재시도하라.

retryEqualityCoercing: aNumber

가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 #=의 호출을 재시도하라.

retryError

오류를 발생시켜라-같은 범용성을 가진 두 개의 인자로 호출된 재시도 메서드.

retryInequalityCoercing: aNumber

가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 #~=의 호출을 재시도하라.

retryMultiplicationCoercing: aNumber

가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 #*의 호출을 재시도하라.

retryRelationalOp: aSymbol coercing: aNumber

가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 aSymbol (<, <=, >, >=)의 호출을 재시도하라.

retrySumCoercing: aNumber

가장 낮은 수를 가진 aNumber와 수신자 사이에서 한 숫자를 다른 숫자의 클래스로 강제 유형 변환(coerce)하고 #+의 호출을 재시도하라.


Number: 단축키와 반복자

to: stop

수신자에서 stop까지 1씩 가는 간격을 리턴하라.

to: stop by: step

수신자에서 stop까지 주어진 단계씩 가는 간격을 리턴하라.

to: stop by: step collect: aBlock

수신자에서 stop까지 주어진 단계씩 가는 간격에서 각 값에 대한 aBlock을 평가하라. 결과는 Array에서 수집되어 리턴된다.

to: stop by: step do: aBlock

수신자에서 stop까지 주어진 단계씩 가는 간격에서 각 값에 대한 aBlock을 평가하라. 정수 리터럴 단계에 대해, 그리고 임시변수(temporaries) 없이 1-인자 aBlocks에 대해 인자인으로 컴파일되므로 오버라이드가 불가능하다.

to: stop collect: aBlock

수신자에서 stop까지 1씩 가는 간격에서 각 값에 대한 aBlock을 평가하라. 결과는 Array에서 수집되어 리턴된다.

to: stop do: aBlock

수신자에서 stop까지 1씩 가는 간격에서 각 값에 대한 aBlock을 평가하라. 결과는 Array에서 수집되어 리턴된다. 임시변수(temporaries) 없이 1인자 aBlocks에 대해 in-line으로 컴파일되므로 오버라이드가 불가능하다.


Number: 검사하기

closeTo: num

수신자가 num와 충분히 가까운 것으로 간주할 수 있는지 응답하라 (number이 숫자가 아닌 경우 동등성 검사를 통해, num이 숫자인 경우 0.01% tolerance로 검사함으로써 가능).

even

self를 2로 나눌 수 있는 경우 true를 응답한다.

isFinite

수신자가 유한의 양을 나타내는지 응답하라. 대부분의 수치형 클래스는 유한의 양을 나타내므로 기본적으로는 #subclassRespondibility를 호출하는 대신 true를 응답한다.

isInfinite

수신자가 무한의 양을 나타내는지 응답하라. 대부분의 수치형 클래스는 유한의 양을 나타내므로 기본적으로는 #subclassRespondibility를 호출하는 대신 false를 응답한다.

isNaN

수신자가 Not-A-Number인지 응답하라. 대부분 수치형 클래스는 nans를 처리하지 않으므로 기본적으로는 #subclassResponsibility를 호출하는 대신 false를 응답한다.

isNumber

항상 'true'를 응답하라.

isRational

수신자가 유리수(rational)인지 응답하라 - 기본적으로는 false.

negative

수신자가 <0인지 응답하라.

odd

self를 2로 나눌 수 없는 경우 true를 리턴한다.

positive

수신자가 >=0인지 응답하라.

sign

수신자의 부호를 리턴한다.

strictlyPositive

수신자가 >0인지 응답하라.


Number: 절단과 반내림(round off)

asInteger

가장 가까운 정수로 반내림한 수신자를 응답하라.

floor

음의 무한대를 향해 수신자와 가장 가까운 정수를 리턴하라.

fractionPart

수신자 자체를 주는 수신자의 #integerPart로 합해진 숫자를 응답하라.

integerPart

0을 향해 절단된 수신자를 응답하라.

roundTo: aNumber

aNumber의 가장 가까운 배수로 절단된 수신자를 응답하라.

rounded

수신자에 가장 가까운 정수를 리턴한다.

truncateTo: aNumber

0을 향해 절단된 수신자를 aNumber의 배수로 응답하라.

truncated

0을 향해 절단된 수신자를 응답하라.


Notes