블로그 이미지
초딩입맛제주아재
하고 싶은 것만 하며 살고 싶다

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

'Smalltalk'에 해당되는 글 13

  1. 2006.10.08 가계부 만들기 - 01
  2. 2006.05.15 변수와 메세지 그리고 이벤트...
  3. 2006.05.07 재밌다...
2006. 10. 8. 15:07 Programing/Smalltalk

WorkSpace 에서 끄적거리기....



"1.OrderCollection 객체생성"
housekeepingbook := OrderedCollection  new.


"2~3.항목추가"
housekeepingbook add: #('복권' -5000 '2006-09-21');
add: #('복권당첨' 50000 '2006-09-21');
add: #('두부' -500 '2006-09-22');
add: #('피자' -15000 '2006-09-23');
add: #('보너스' 100000 '2006-09-24');
add: #('화장지' -7000 '2006-09-24');
add: #('전기세' -25000 '2006-09-24');
add: #('키보드' -15000 '2006-09-25');
add: #('화장품' -55000 '2006-09-25');
add: #('전구' -500 '2006-09-26').


"4.항목 갯수"
housekeepingbook size.


"5.첫번째 항목"
housekeepingbook at: 1.


"6.첫번째 항목의 금액"
(housekeepingbook at: 1) at: 2.


"7.전체 항목의 금액"
housekeepingbook collect: [:each| each at: 2 ]


"8.전체 금액의 합"
(housekeepingbook collect: [:each| each at: 2 ]) inject: 0 into: [:sum :each| each + sum ]


"9.항목의 평균 금액"
avg := ((housekeepingbook collect: [:each| each at: 2 ]) inject: 0 into: [:sum :each| each + sum ]) / housekeepingbook size


"10.흑자 또는 적자"
(avg > 0) ifTrue: ['흑자'] ifFalse: ['적자'].

'Programing > Smalltalk' 카테고리의 다른 글

가계부 만들기 - 04  (0) 2006.10.08
가계부 만들기 - 03  (0) 2006.10.08
가계부 만들기 - 02  (0) 2006.10.08
변수와 메세지 그리고 이벤트...  (0) 2006.05.15
재밌다...  (0) 2006.05.07
posted by 초딩입맛제주아재
2006. 5. 15. 01:23 Programing/Smalltalk

Smalltalk 카페에 했던 질문과 달룟님께서 달아주신 답변이다.
내머리가 돌인건 인정하지만
너무 어렵고 이해가 안됐었는데
달룟님 답변을 보고 나니 금새 이해가 되는게...


>오늘 안드레아님이 올려주신 변수에 대한 강의를 들으면서
>연습했던 코드입니다.

apple := 400.
pear := 400.
price := 0 asValue.

>mb := MessageBox new.

price when: #valueChanged send: #notify: to: mb with: 'change!!'.
(apple = pear) ifTrue: [price value: (apple + pear)].

price trigger: #valueChanged.

>달룟님께서 올려주신 강좌중 '이벤트' 부분도 적용을 해봤습니다.

>그런데 다음과 같이 코드를 작성해도 될것 같아서 해봤는데 안되더군요...

>(변경전)

price when: #valueChanged send: #notify: to: mb with: 'change!!'.
(apple = pear) ifTrue: [price value: (apple + pear)].
price trigger: #valueChanged.

>(변경후)

price when: #valueChanged send: #notify: to: mb with: 'change!!'.
(apple = pear) ifTrue: [price := (apple + pear). price trigger: #valueChanged].

>메세지 박스는 안뜨지만
>price. 를 보면 800 이라고 나오네요...
>왜 중간에 메세지 박스는 안보이는건가요??
>그 이유가 궁굼합니다...^^

(달룟님 답변)
price := 0 asValue. 하고 Ctrl+D 해보면,  ValueHolder 객체임을 알 수 있습니다.

price value: (apple + pear).  는 price에 value:라는 메세지를 보냈을 뿐
price라는 변수가 ValueHolder를 가리키고 있는 것에는 변화가 없습니다.

하지만,  price := (apple + pear). 라고 하게 되면
price는 가리키던 ValueHolder 객체를 버리고 숫자의 덧셈의 결과인 정수 객체를 새로이 가리키게 됩니다.  청소부 아저씨가 ValueHolder 객체를 싹싹 쓸어가시겠죠, 
물결님이 애써 달아준 트리거 이벤트 장치도 함께 말입니다. 
따라서, (변경후)처럼 실행하면 price가 아무 반응도 안하는 것은 당연합니다. 
트리거 장치를 달아준 ValueHolder객체는 없어졌고, price가 새로 가리키는 정수 객체에는
다시 장치해주지 않았으니까요.  price trigger: #valueChanged라고 해주면,
"응, 뭔소리지 난 그런 얘기 들은적 없는데..."라고 멀뚱멀뚱 눈만 깜빡이겠죠.

물결님이 의도하신 것이 안드레아님의 강의 내용중에서 apple + pear = price가 항상 성립하도록 마치 엑셀의 수식셀값이 자동 갱신되는 것처럼 해주고 싶으셨던 거라면 아래와 같은 코드를 생각해보세요.

apple := ValueHolder new.
apple value: 400.
pear := ValueHolder new.
pear value: 400.
price := ValueHolder new.
updator := [ price value: apple value + pear value ].
apple when: #valueChanged send: #value to: updator.
pear when: #valueChanged send: #value to: updator.

이렇게 하시면 세팅완료입니다.

apple이나 pear의 값을 바꾸면, price는 자동적으로 재계산하게 됩니다.

apple value: 1000.  "오!! 사과값 폭등".
price value "얼마일까요?"

pear value: 100. "오!! 꿈이냐 생시냐!"
price value "얼마일까요?"

하지만, price에 직접 어떤 값을 넣는 것은 반칙입니다.  엑셀이라면 수식셀에 상수입력을 해버리는 것과 같겠죠?  이런 짓은 하면, 안되지만,  수동으로 갱신해주면됩니다.

price value: 1000000.  "오욱, 파산이냐?"
price value.
updator value.
price value "휴~ 놀랬자나."


결론:
변수는 값이 바뀐다...그 형태까지도...
이거 알고 있었잖아~ 안그래?
제발 긴장좀 허자~

'Programing > Smalltalk' 카테고리의 다른 글

가계부 만들기 - 04  (0) 2006.10.08
가계부 만들기 - 03  (0) 2006.10.08
가계부 만들기 - 02  (0) 2006.10.08
가계부 만들기 - 01  (0) 2006.10.08
재밌다...  (0) 2006.05.07
posted by 초딩입맛제주아재
2006. 5. 7. 00:30 Programing/Smalltalk

시작한지 2주가 다 됐다..

아직 잘 모르겠다.

유일하게 정보를 구하는 곳이 카페인지라

카페에 자료가 안올라오면 아무것도 못한다.

이 죽일 놈의 영어...

그나마 대충은 읽고 아~글쿠나..하는 정도는 되니 다행이다.

가끔 내가 대견스럽다.

전교 꼴찌도 해본 내가 영어는 그나마 제법 읽으니까 ㅋㅋ

누구처럼 새벽반 영어학원 다니는건 죽어도 못하겠고...

완벽한 번역기는 언제 나오려나...

'Programing > Smalltalk' 카테고리의 다른 글

가계부 만들기 - 04  (0) 2006.10.08
가계부 만들기 - 03  (0) 2006.10.08
가계부 만들기 - 02  (0) 2006.10.08
가계부 만들기 - 01  (0) 2006.10.08
변수와 메세지 그리고 이벤트...  (0) 2006.05.15
posted by 초딩입맛제주아재
prev 1 2 next