æä½éã® Squeak Smalltalk å ¥é
Smalltalkãç¹ã« Squeak Smalltalk ã¯ãè¨èªå¦çç³»ã IDE ã¨ãããããããããâã²ã¹ãOSâã®ããã«æ¯ãèãã®ã§ãã¡ãã£ã¨è©¦ãã¦ã¿ããã¨æãç«ã£ã¦ã¤ã³ã¹ãã¼ã«ï¼èµ·åã¾ã§ã¯ã§ãããã®ã®ãããããå
ã«ã¯ãç¬èªã® GUI ãæä½ã¹ã¿ã¤ã«ã«é»ã¾ãã¦é²ããªãã£ãâ¦ã¨ããçµé¨ããæã¡ã®æ¹ãå¤ãã¨æãã¾ãã
ããã§ãSmalltalk ç°å¢ç¬èªã® GUI ãã¼ã«ç¾¤ã®ä½¿ãæ¹ã¯ãã¨ã§è¦ããï¼ãããã¯ããããããã»ã©èå³ããªãâããã¼ã¼ãâ¦(^_^;)ï¼ã¨ãã¦ãä»ã®ã¨ããã¯ã試ãã¦ã¿ããã³ã¼ããåãããããã©ããªåä½ã«ãªãã®ã確èªãã§ããã°ããâ¦ã¨ãã£ãå¿ãã人åãã«ãã£ãããSmalltalk å¼ãè©ä¾¡ããããã®æ¹æ³ã®ãããªãã®ãæ¸ãã¦ã¿ã¾ããã
ã¨ããããããã·ã³ã Mac 以å¤ï¼ã¨ãã£ã¦ããMac ã®å ´åã®éãã¯ãctrl + d ã¨ãã cmd + d ã«ãªãã ãâ¦ï¼ã§ãSqueak Smalltalk ç°å¢ã¯ umejava さんの日本語版 Squeak3.9 ã®ã¤ã³ã¹ãã¼ã«ããã³èµ·åæ¸ã¿ã¨ããåæã§ããªã¼ã½ããã¯ã¹ãªãã«ã¦ã³ã¿ããªãã¸ã§ã¯ããä½ãã¾ãã
ãªãã以ä¸ã«ã¯ãããã¼ããªããã Smalltalk ã§ãã«ã¦ã³ã¿ããè¨è¿°ããã³ã¼ããåºã¦ããã®ã§ãã¾ãã¯èªåã§èãã¦ã¿ããå ´åã¯ãããçµãã¦ããèªã¿é²ããã»ããããã¨æãã¾ãï¼å½åããã¿ãã¬ãã¨æ¸ããã¯ã±ã¯ããã§ãï¼ã
â ãããã¯ï¼ç¡åé¢æ°ï¼çã«ã¦ã³ã¿
ãã¼ã«ã¯ãã£ãã使ããªããããªãã¨ãæ¸ãã¾ããããã³ã¼ããå ¥åããå ´æãããã¯ç¨æããªãã¨ãããªãã®ã§ãã¨ããããããã¹ã¯ãããã¯ãªã㯠â éã⦠â ã¯ã¼ã¯ã¹ãã¼ã¹ãã§ãã¯ã¼ã¯ã¹ãã¼ã¹ããèµ·åãã¾ããã¯ã¼ã¯ã¹ãã¼ã¹ã¨ããã®ã¯ãSmalltalk-80 æ代ããããæ¸ãæ¨ã¦ç¨ã®ã¡ã¢ã½ããã§ããå ãã¦æè¿ã®ã¯ã¼ã¯ã¹ãã¼ã¹ã«ã¯ã宣è¨ç¡ãã«åºç¾ããå¤æ°ãåæ°¸ç¶çãªãã¯ã¼ã¯ã¹ãã¼ã¹å¤æ°ãã¨ãããã種ã®ã°ãã¼ãã«å¤æ°ã¨è¦ãªãã¦ããã便å©ãªï¼ãã¤ãå ´åã«ãã£ã¦ã¯ãã£ãã㪠âãã¨ãã°å¤æ°åã®ã¹ãã«ãã¹ãè¦åï¼ä¿®æ£ããæ©è½ãç¨ããªããªããªãï¼ï¼æ©è½ãä»ãã¦ãã¾ãã
ã¯ã¼ã¯ã¹ãã¼ã¹ãç«ã¡ä¸ããããããã«ã次ã®ã³ã¼ããã¿ã¤ããã¦å ¥åããããããããã³ãããã¦è²¼ãä»ãï¼ctrl + vï¼ã¾ãã
counterMaker := [:n | [n := n + 1] fixTemps]. c1 := counterMaker value: 0. c2 := counterMaker value: 100
ctrl + a ã§ãã¹ã¦ãé¸æããdo it (ctrl + dãå³ã¯ãªãã¯ã®ãå¼ãè©ä¾¡ãã¨åã) ãã¾ããctrl ã®ä»£ããã« alt ã使ãã¾ããããã§ã¯ã¼ã¯ã¹ãã¼ã¹å¤æ°ã§ãã c1ãc2 ã«ã«ã¦ã³ã¿ãä»£å ¥ããã¾ããããã¨ã¯ã
c1 value
ãããã¯ã
c2 value
ãã¿ã¤ããã¦å ¥åããprint it (ctrl + pãå³ã¯ãªãã¯ã®ãå¼ã表示ããåã) ã§åã«ã¦ã³ã¿ã®ã¤ã³ã¯ãªã¡ã³ãããã³å 容ã®ç¢ºèªãã§ãã¾ãã両æ¹åæã«ç¢ºèªãããã¨ãã¯ã
{c1 value. c2 value}
ã print it (ctrl + p) ããã¨ããã§ãããã
â ã¯ã©ã¹ã»ã¤ã³ã¹ã¿ã³ã¹çã«ã¦ã³ã¿
é常ãSmalltalk ç°å¢ã§ã¯ã¯ã©ã¹ãã¡ã½ããã®å®ç¾©ã«ã¯ã¯ã©ã¹ãã©ã¦ã¶ã¨ããç¬èªã® GUI ã¢ããªãç¨ããã®ã§ãããããã§ã¯å¼ãç¶ãã¯ã¼ã¯ã¹ãã¼ã¹ã使ã£ã¦ãå®ç¾©ãªã©ã¯ Smalltalk å¼ãè©ä¾¡ãããã¨ã§è¡ãªããã¨ã«ãã¾ãã以ä¸ã¯ããã¾ã§ã¯ã©ã¹ãã©ã¦ã¶ãªã©ç¬èªãã¼ã«ã®ä½¿ãæ¹ã¯ç¥ããªãï¼ä»ã¯ã¯ã±ãã£ã¦å¦ãã§ããããªã人åãã§ãã®ã§ãã©ãããã®ç¹ãããããã誤解ã®ç¡ããããé¡ããããã¾ãã
次ã®å¼ãå ¥åãã¦é¸æããdo it (ctrl + d) ãã¾ããã«ã¦ã³ã¿ã¯ã©ã¹ãCounterãã®ä½æã§ãã
Object subclass: #Counter instanceVariableNames: 'counterValue' classVariableNames: '' poolDictionaries: '' category: 'Category-Name'
ãªãã£ããããã§ããããããå¼ã§ããã¬ã·ã¼ãã§ãããããä½ã Counter ã®å°æ¥ã®ã¹ã¼ãã¼ã¯ã©ã¹ã§ããã Object ã«å¯¾ãã¦ãsubclass: #Counter instance... 以ä¸ç¥ãã¨ããã¡ãã»ã¼ã¸ãéããã¨ã§ã#subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: ã¨ããé·ããååã®ã¡ã½ãããã³ã¼ã«ãã¦ãã¾ããåããã¨ã Pythonã Ruby ãªã©ä¸è¬ã® OOPL 風ã«æ¸ããªããã¨ã
Object.subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_("Counter", "counterValue", "", "", "Category-Name")
ã¨ãã£ãæãã§ãããããè¦ãç®ã¯ã¨ãããããã¨ãã° Python ã®ã
Objects.subclass("Counter", instanceVariableNames="counterValue", classVariableNames="", poolDictionaries="", category="Category-Name")
ã¨ãã£ãåã£ãä»çµã¿ãæã¤ã¡ã½ããå¼ã³åºãã¨ã¯ç°ãªããããæ®éã®åç´ãªã¡ã½ããå¼ã³åºãã«éããªãï¼ã³ã¼ã«ãããã¡ã½ããåããããé·ããã¨ãã®ããã°â¦ï¼ã¨ããã¨ãããâãã½âï¼ã¤ã¾ããSmalltalk ã®å¼ã¯ããã¤ã®ã¨ããããã®è¦ãç®ãããããå°è±¡ã»ã©è¤éãªæå³ãæã£ã¦ããªãâ¦ã®ã§æããã«è¶³ããï¼ï¼ããã
é話ä¼é¡ã
ç¶ãã¦ãåæåã¡ã½ãããå®ç¾©ãã¾ããã¯ã©ã¹ãã©ã¦ã¶ã¯ããã¦ä½¿ãããã¡ã½ãããå®ç¾©ãã次ã®å¼ã do it (ctrl + d) ã
Counter compile: 'initialize counterValue := 0'
do it ã®ç´å¾ãã¡ã½ããå®ç¾©ã®ã¿ã¤ãã³ã°ã§ã¤ãã·ã£ã«ãå ¥ããã¨å ¥åæ¬ããããã¢ãããããã¨ãããã¾ããé©å½ã«å ¥åããäºè§£ããã¿ã³ãæ¼ãã¦æ¶ãã¦ãã ããããã£ã³ã»ã«ãããä½ãå ¥åããªãã¨ãã¤ããç¾ãããã®ã§å¿ ãä½ãå ¥ãã¦ãã£ã¦ãã ããããã®æ å ±ã¯ãUtilities setAuthorInitials ã® do it (ctrl + d) ã§ãã¨ããå¤æ´ã§ãã¾ãããããããçµäºæã«ã¤ã¡ã¼ã¸ãä¿åããªããã°ä¿æãããªãã®ã§ãã¼ã«ç¾¤ï¼ä¸»ã«ã¡ã½ããã®ãã¼ã¸ã§ã³ç®¡çæ©è½ï¼ã使ããªãä»ã¯å ¥åå 容ã¯é©å½ã§å¤§ä¸å¤«ã§ãã
ç¶ãã¦ãåæ§ã«ã«ã¦ã³ãã¢ããã¡ã½ãããå®ç¾©ãã¾ãã
Counter compile: 'pushButton ^counterValue := counterValue + 1'
ããã§ã¤ã³ã¹ã¿ã³ã¹ãä½ã£ã¦ç¢ºèªã§ãã¾ããå¼ã®è©ä¾¡ã¯ do it (ctrl + d) ã§ãã
c3 := Counter new
ã¤ã³ã¯ãªã¡ã³ãããã³å
容ã®ç¢ºèªã¯ #pushButton ãã³ã¼ã«ãã¾ããå¼ã®è©ä¾¡ã¨çµæã®æ¿å
¥ã¯ print it (ctrl + p) ã§ãã
c3 pushButton "=> 1"
ãã¾ããã¤ã³ã¹ã¿ã³ã¹å¤æ°ãcounterValueãã®ã¢ã¯ã»ããµã¡ã½ãããèªåçæãã¾ãããã
(Browser newOnClass: Counter) createInstVarAccessors
ä¸ã®å¼ã do it (ctrl + d) ãã㨠getter 㨠setter ããããã #counterValue 㨠#counterValue: ã¨ããååã§å®ç¾©ããã¾ãã
c3 counterValue "=> 1 "
c3 counterValue: 100; pushButton; pushButton "=> 102 "
å¯ä½ç¨ã§ã¯ã©ã¹ãã©ã¦ã¶ãéãã®ã§ãç¶ãã¯ããã®ä½¿ãæ¹ãè¦ããã¦ãéã¶ã®ãããããããã¾ããã
ããããªããã£ã±ãã§ããããããã§ããã¾ããéã«ã¢ã¼ã¬ãã«èå³ãããã¦ããããè±èªã§ãããã¡ãã®ãã¥ã¼ããªã¢ã«ã«é²ãã§ã¿ã¦ã¯ãããã§ãããã
æ¥æ¬èªçã®ã¡ãã¥ã¼é
ç®ãè±èªã«åãæ¿ããï¼ãã¥ã¼ããªã¢ã«ã«åãããï¼ã«ã¯ã次ã®äºã¤ã®å¼ãé¸æã㦠do it (ctrl + d) ã
Locale switchToID: (LocaleID isoLanguage: 'en'). Locale currentPlatform: (Locale isoLanguage: 'ja')
ä»é²ï¼ãä¼¼ããããªãã¨ã GNU Smalltalk 3.0 ã§
Squeak Smalltalk ç°å¢ã¯ã1980 年代ã®å¤ãè¯ã Smalltalk-80ãããã«ããã®ã¼ã£ã¦ 1970 年代㮠ALTO ã Notetaker ãªã©ã®ãã·ã³ãâæ«å®ãã¤ãããã¯âã¨ãã¦æ©è½ãããããã® GUI OS ã¨ãã¦ã®åæ®ããè²æ¿ãæ®ãã¦ããã®ã§ãç¬èªã® GUI ãæä½ã¹ã¿ã¤ã«ãé¼»ã«ã¤ããã¨ãããããããã¾ããããããªåãã«ã¯ãCUIï¼ã¿ã¼ããã«ã½ããï¼ã§ã¹ã¯ãªããè¨èªã£ã½ã使ãã¦ãâé©ãæå°âã§å ¥éã§ãã GNU Smalltalk ããè¦ãã§ãã
ãã ãSmalltalk ã®é«ãï¼â¦ã¨ããããï¼çç£æ§ã®åå㯠GUI ãç¬èªã®ãã¼ã«ç¾¤ã¨ã®é£æºã«ããæ¯ãããã¦ããâ¦ã¨ãããã¨ãããã®ã§ããããã Smalltalk ã®âç§å¯âãå£éè¦ã¦ã¿ããã¨ãã好å¥å¿ããæã¡ã§ããããCUI ä¸å¿ã® GNU Smalltalk ã§æºè¶³ãã¦çµããã«ã¯ããã«ãããã㯠GUI ä»ãã® Smalltalk å¦çç³»ã«ãä¸åº¦ã©ã£ã·ã浸ãã£ã¦ã¿ãæ©ä¼ãæã¤ãã¨ãèããã»ããããã¨æãã¾ããèå©å¿ãªããã念ã®ããã
$ gst -v GNU Smalltalk version 3.0.1 <snip> $ gst GNU Smalltalk ready st> counterMaker := [:n | |m| m := n. [m := m + 1]] a BlockClosure st> c1 := counterMaker value: 0 a BlockClosure st> c2 := counterMaker value: 100 a BlockClosure st> {c1 value. c2 value} (1 101 ) st> {c1 value. c2 value} (2 102 ) st> {c1 value. c2 value} (3 103 ) st> Object subclass: Counter [ st> | counterValue | st> initialize [counterValue := 0] st> pushButton [^counterValue := counterValue + 1] st> ] st> c3 := Counter new initialize; yourself a Counter st> c3 pushButton 1 st> c3 pushButton 2 st> c3 pushButton 3
Squeak Smalltalk ã®ãããã¯ã¨éããGNU Smalltalk ã®ãããã¯ã¯ã¯ãã¼ã¸ã£ãªã®ã§ #fixTemps ã®ã³ã¼ã«ï¼ãããã¯ã®å®è¡æç°å¢ã®è¤è£½ï¼ã¯ä¸è¦ã§ãããã ãããã¯å¤æ°ã¯ä»£å
¥ä¸å¯ãªã®ã§ãå¥ã«ãã³ãã©ãªå¤æ°ï¼ããã§ã¯ m ï¼ã宣è¨ãããããç¨ããå¿
è¦ãããã¾ãã
ã¯ã©ã¹å®ç¾©ã®æ§æããã¹ã¼ãã¼ã¯ã©ã¹åã subclass: ãæ°è¦ã¯ã©ã¹åã [ ... ] ããããã®ä¸ã§ä½¿ããã¦ããã¡ã½ããå®ç¾©æããã¡ãã»ã¼ã¸ãã¿ã¼ã³ã [ ... ] ãã¯ã3.0 ããæ¡ç¨ããã GNU Smalltalk ç¬èªã®ãã®ã§ããããã¯ã¡ãã»ã¼ã¸å¼ï¼â Smalltalk ã®å¼ï¼ã§ã¯ããã¾ãããã注æãããããã
ä»é²ãã®ï¼ï¼ãä¼¼ããããªãã¨ã Dolphin Smalltalk ã§
ãã©ãããã§ãããããã¾ã§ Smalltalk ç¬èªã®ãã¼ã«ç¾¤ã®åå¼·ããã¦ããæããªãã¨ãã«ãæä½éã®æä½ã¨ã¯ã¼ã¯ã¹ãã¼ã¹ã®ã¿ã§ã¨ããããâ¦ã¨ããç¹æ®ãªæ³å®ã§ãã®ã§ãããããã勉強会ãªã©ã§ã¯ãäºåã«ã¯ã©ã¹ãã©ã¦ã¶ã®ä½¿ãæ¹ãè¦ãã¦ããããã使ã£ã¦ãã ãã(^_^;)ã
ãããã¯ã«ã¤ãã¦ã¯ GNU Smalltalk ã¨åã注æï¼#fixTemps ãä¸è¦ããããã¯å¼æ°ã¯ä»£å ¥ä¸å¯ã#initialize ãèªåçã«å¼ã°ããªãï¼ã«å ãã¦ã Squeak Smalltalkï¼ã¨ããã®å½±é¿ãåããå¦çç³»ï¼ç¬èªã® { ... } ã¨ããé åãªãã©ã«ã使ããªããã¨ãé¤ãã° Squeak Smalltalk ã¨åãå¼ã使ããã¿ããã§ãã
ãã ãå¼ã®è©ä¾¡ã¯ Squeak Smalltalk ã§ã® do it (ctrl + d) ã print it (ctrl + p) ã§ã¯ãªã Evaluate It (ctrl + e) ããã³ Display It (ctrl + d) ãªç¹ã«æ³¨æãã¯ã¼ã¯ã¹ãã¼ã¹ã¯ãèµ·åæã«ç¾ããã¦ã¤ã³ãã¦ã® Workspace ã¢ã¤ã³ã³ã®ããã«ã¯ãªãã¯ã«ããå¼ã³åºãã¾ãã
counterMaker := [:n | | m | m := n. [m := m + 1]]. c1 := counterMaker value: 0. c2 := counterMaker value: 100.
Array with: c1 value with: c2 value. "=> #(1 101) "
Array with: c1 value with: c2 value. "=> #(2 102) "
Array with: c1 value with: c2 value. "=> #(3 103) "
Object subclass: #Counter instanceVariableNames: 'counterValue' classVariableNames: '' poolDictionaries: '' category: 'Category-Name'.
Counter compile: 'initialize counterValue := 0'.
Counter compile: 'pushButton ^counterValue := counterValue + 1'.
Counter class compile: 'new ^super new initialize; yourself'.
c3 := Counter new. c3 pushButton. "=> 1" c3 pushButton; pushButton; pushButton. "=> 4 "
Dolphin Smalltalk ã¯ã»ã¨ãã©ä½¿ã£ããã¨ããªãã£ãã®ã§ãããSqueak Smalltalk ã®ããã¼ãã«ããã¹ãã¨ãè£å®æ©è½ã®åºæ¥ããã°ãããã§ããï¼ã¡ãªã¿ã« Squeak Smalltalk ã§ã¯ alt + q ã®é£æã§è£å®ãããï¼ãç·ãã¦ãSmalltalk-80 ç´ç³»ã®åå«ã§ãã Squeak Smalltalk ã Cincom Smalltalk ãããéå»ã®ãããã¿ããªãã®ãããã®ããä»é¢¨ã® IDE ã£ã½ããæ¿ã«ä»ãã¦ããæãããã¾ããèæ³¢ãããè¦ããªã®ãããªããã¾ãã
ã¾ã¨ãï¼ãSmalltalk ã®å¼ã試ãããã¨ãã«æä½éãç¥ã£ã¦ããã¹ãäº
- ã¯ã¼ã¯ã¹ãã¼ã¹ãããã«æºããã¢ããªãæ©è½ã®å¼ã³åºããããã§ã®ããã¹ãæä½ã
- do it ããã㯠print it ã«ç¸å½ãããå¼ã®è©ä¾¡ãçµæã®åºåã«å¿ è¦ãªæä½ã
- ã¯ã©ã¹ãã¡ã½ããã®å®ç¾©ã®ããã®å¼ã
ãã ãã¯ã©ã¹ãã¡ã½ãããå®ç¾©ããå¿ è¦ãããã³ã¼ãã試ãããå ´åã¯ãä¸çªç®ã«ä»£ãã¦ãã¯ã©ã¹ãã©ã¦ã¶ã®ä½¿ãæ¹ãå¦ã¶ãå¿ï¼æéã®ä½è£ã¯ãã£ãã»ããããã¨æãã¾ãã