.NET ã®ã¯ã©ã¹ã©ã¤ãã©ãªè¨è¨
- ä½è : Krzysztof Cwalina,Bard Abrams,è¤åéä»
- åºç社/ã¡ã¼ã«ã¼: æ¥çµBPã½ãããã¬ã¹
- çºå£²æ¥: 2009/12/24
- ã¡ãã£ã¢: 大åæ¬
- è³¼å ¥: 9人 ã¯ãªãã¯: 543å
- ãã®ååãå«ãããã° (32件) ãè¦ã
ã¨ã£ãã«èªã¿çµãã£ã¦ãããã ãã©ãã¾ã¨ããæéããªãã£ãã®ã§ããªãæéã空ãã¦ãã¾ã£ãã»ã»ã»
ã¨ãããã¨ã§åºæ¬çã«ã¯ãã»ã»ã»ãï¼ãã£ã¦æã£ãã¨ããã¨ãã®ã¾ã¨ãã§ãã
ã¢ã»ã³ããªã¨åå空é
ãã Java ã® package 㨠C# ã® namespace ãåããããªãã®ã¨ãã¦æ±ã£ã¦ãã人ã¯ãããã©ããã®æ¬ã§ã¯ã
- ã¢ã»ã³ããª
- ããã±ã¼ã¸ã³ã°åã³é ç½®ã®å¢ç
- åå空é
- éçºè ã«å¯¾ããè«ççãªã°ã«ã¼ã
ã¨ãã¦ãã*1ã
Java ã® package ã¯ãã® 2 ã¤ãåããããã®*2ã ããJava ã®åå空éã¯ãã¡ã¤ã«ã®é
ç½®ã¨ããç©ççãªã°ã«ã¼ããä½ãåºãã®ã§ãã¾ã£ããåããã®ã¨ããããã§ã¯ãªãã
ãªã®ã§ãJava ã® package 㨠C# ã® namespace ã®ä½¿ãæ¹ã¯éã£ããã®ã§ããã¹ããªã®ã«ãã©ããããèãã¦ããªã人ã¯å¤ãã£ã½ãã»ã»ã»
ãã®è©±ã¯ã¾ãæ©ä¼ãããã°ã¾ã¨ãããããªãæéãããã°ãã ãã©ã
Java ã® package ã«ã¤ãã¦ã¯ã
- ä½è : ããã¼ãã»Cã»ãã¼ãã³,ç¬è°·åä»
- åºç社/ã¡ã¼ã«ã¼: ã½ãããã³ã¯ã¯ãªã¨ã¤ãã£ã
- çºå£²æ¥: 2008/07/01
- ã¡ãã£ã¢: 大åæ¬
- è³¼å ¥: 17人 ã¯ãªãã¯: 561å
- ãã®ååãå«ãããã° (67件) ãè¦ã
ã® 20 ç« ãçèªãããã¨ã
ä¸è¬çãªååãæ¡ç¨ãã¦ããããããï¼
.NET のクラスライブラリ設計 (P.48)ElementãNodeãLogãããã³ Message ã®ãããªä¸è¬çãªååãæ¡ç¨ãã¦ã¯ããã¾ããã
ä¸è¬çãªã·ããªãªã«ããã¦ãé常ã«é«ãå¯è½æ§ã§ååã®ç«¶åãèªçºããã¾ããæ±ç¨çãªååã¯ä¿®é£¾ãã¹ãã§ã (FormElementãXmlNodeãEventLogãSoapMessage)ã
ãã¼ãããããããã¨ãåé¿ããããã«åå空éãããããããªãã®ï¼
ãããããForm.ElementãXml.NodeãEvent.LogãSoap.Message ãªæãã§åå空éã§åºåã£ã¦ã競åããå ´åã¯ç´åã¾ã§ã using ããã°ãã話ã§ããããä¸è¬çãªååã¯ã©ãã©ãä»ããã¹ãã
ã¡ã½ããåã®ä»ãæ¹
.NET のクラスライブラリ設計 (P.56)ã¡ã½ããã«ã¯åè©ã¾ãã¯åè©å¥ã®ååãä»ãã¾ãã
.NET のクラスライブラリ設計 (P.288)ãã¡ã¯ããªã¡ã½ããã®ååã¯ã"Create" ã¨ããåèªã«ä½æãããåã®ååãé£çµãããã®ã«ãããã¨ãæ¤è¨ãã¾ãã
ãããã¯ããããè¦ç´ã ãã©ãããå¤ããªã£ã¦ãã¦ãããã ããã足ããªãã¨æãã
ä¾ãã°ãEffective Java ã®ç¬¬äºçã§ã¯ã
Effective Java 第 2 版 項目 1 コンストラクタの代わりに static ファクトリーメソッドを検討する (P.10)
- valueOf
- 大ãã£ã±ã«è¨ãã°ããã©ã¡ã¼ã¿ã¨åãå¤ãæã¤ã¤ã³ã¹ã¿ã³ã¹ãè¿ãã¾ãããç¥
- of
- EnumSet (é ç® 32) ã§åºã¾ã£ããvalueOf ã«å¯¾ããç°¡æ½ãªä»£æ¿ã§ãã
- getInstance
- ãç¥
- newInstance
- getInstance ã«ä¼¼ã¦ãã¾ãããnewInstance ã¯è¿ãããåã ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ãã¹ã¦å¥ã ã®ã¤ã³ã¹ã¿ã³ã¹ã§ããç¹ãç°ãªãã¾ãã
- getType
- getInstance ã«ä¼¼ã¦ãã¾ããããã¡ã¯ããªã¼ã¡ã½ããã対象ã®ã¯ã©ã¹ã¨ç°ãªãã¯ã©ã¹ã«ããå ´åã«ä½¿ç¨ããã¾ããType ã¯ãã¡ã¯ããªã¼ã¡ã½ããããè¿ããããªãã¸ã§ã¯ãã®åã示ãã¦ãã¾ãã
- newType
- newInstance ã«ä¼¼ã¦ãã¾ããããã¡ã¯ããªã¼ã¡ã½ããã対象ã®ã¯ã©ã¹ã¨ç°ãªãã¯ã©ã¹ã«ããå ´åã«ä½¿ç¨ããã¾ããType ã¯ãã¡ã¯ããªã¼ã¡ã½ããããè¿ããããªãã¸ã§ã¯ãã®åã示ãã¦ãã¾ãã
ä½ããã®å¦çãè¡ãã¡ã½ããã¯ãä¸è¬ã«åè©ããã㯠(ç®çèªãå«ã) åè©å¥ã§å½åããã¾ãããã¨ãã°ãappend ã drawImage ã§ãã
Effective Java 第 2 版 項目 56 一般的に受け入れられている命名規約を守る (P.231 - 232)
ãç¥ã
ç¹å¥ã«è¿°ã¹ã¦ããã¹ãã¡ã½ããåãå¤å°ããã¾ãããªãã¸ã§ã¯ãã®åãå¤æããå¥ã®åã®ç¡é¢ä¿ãªãªãã¸ã§ã¯ããè¿ãã¡ã½ããã¯ãããã¦ã㯠toType ã¨å¼ã°ãã¾ããä¾ãã°ãtoStringãtoArray ã§ããã¬ã·ã¼ãã¼ãªãã¸ã§ã¯ãã®åã¨ç°ãªãåãæã¤ãã¥ã¼ (view) (é ç® 5) ãè¿ãã¡ã½ããã¯ãããã¦ã㯠asType ã¨å¼ã°ãã¾ãããã¨ãã°ãasList ã§ããã¡ã½ãããå¼ã³åºããããªãã¸ã§ã¯ãã¨åãå¤ãæã¤åºæ¬ãã¼ã¿ãè¿ãã¡ã½ããã¯ãããã¦ã㯠typeValue ã¨å¼ã°ãã¾ãããã¨ãã°ãintValue ã§ããstatic ãã¡ã¯ããªã¼ã¡ã½ããã«å¯¾ããå ±éã®ååã¯ãvalueOfãofãgetInstanceãnewInstanceãgetTypeãnewType ã§ã (é ç® 1ã10 é )ã
ãªã©ã¨ããã
ä¾ãã°ãã¿ãã«ãçæããã¡ã½ããã Tuple.CreateTuple ã¨ããTuple.Create ã¨ãã¯ã©ããªãã ãã¿ãããªãTuple.Of ã®æ¹ãçããåãããããã¨æããã ãã©ã»ã»ã»
ãã®ã»ãã«ããæµãããããªã¤ã³ã¿ã¼ãã§ã¤ã¹ãè¨è¨ããå ´åãªã©ãå¤ãè¦ç´ã§ã¯å¯¾å¿ã§ããªãã
CanXxx
CanRead 㯠Readable ãããç解ãããããã®ã§ããããããªãããCreated ã¯å®éã« IsCreated ãããèªã¿ããããã®ã§ãããã¬ãã£ãã¯ã¹ãæã¤ãã¨ã¯å¤ãã®å ´åãç¹ã«ã³ã¼ãã¨ãã£ã¿å 㧠IntelliSense ã«è¡¨ç¤ºãããã¨ãã«ãåé·éãããã¤ä¸è¦ã§ãã
ãç¥ã.NET のクラスライブラリ設計 (P.57 - 58)ååæ ãããè½åæ ãåªå ãã¦é¸æãã¹ãã§ãã
if (stream.CanSeek) // ãã¡ãã®ã»ããè¯ã if (stream.IsSeekable)
å人çã«ã¯ãIntelliSense 㧠bool ãè¿ãããããã£ãã¾ã¨ã¾ã£ã¦ããæ¹ãåãããããã®ã§ãIs ãã¬ãã£ãã¯ã¹æ¨å¥¨æ´¾ãªãã ãã©ã»ã»ã»
ããã¨ãC# ã§ã¯ not ãã!ããªã®ã§è¦èªæ§ãæªããããããããã£ã§å®è£
ããã«ã¡ã½ããã¨ãã¦å®è£
ãã¦æ¡å¼µã¡ã½ããã¨ã㦠Not çãç¨æããã¨ããã®ãããã ã¨æãã
public interface ISomeInterface { bool IsHoge(); } public static class ISomeInterfaceExtension { public static bool IsNotHoge(this ISomeInterface self) { return !self.IsHoge(); } }
ã»ã»ã»æ¡å¼µããããã£ã欲ããã¨ããã
Before/After
.NET のクラスライブラリ設計 (P.58)äºåããã³äºå¾ã®ã¤ãã³ãã示ãããã«ã"Before" ããã³ "After" ã¨ãããã¬ãã£ãã¯ã¹ããã³ãµãã£ãã¯ã¹ã使ç¨ãã¦ã¯ãªãã¾ããã
ãã®ä»£ããã«ç¾å¨é²è¡å½¢ã«ãã£ã¦äºåã®ã¤ãã³ãããéå»å½¢ã«ãã£ã¦äºå¾ã®ã¤ãã³ãã表ããã¨ãã£ã¦ãããã ãã©ã»ã»ã»
Before/After ã®æ¹ãåããããããªãï¼äºåã®ã¤ãã³ãã«ã¤ãã¦ã¯ç¹ã«ã
ã¤ãã³ããã³ãã©ã®ã¢ã³ããã¿ã¼ã³
.NET のクラスライブラリ設計 (P.59)ã¤ãã³ããã³ãã©ã«å¯¾ãã¦ã"sender" ããã³ "e" ã¨ããååã® 2 ã¤ã®ãã©ã¡ã¼ã¿ã使ç¨ãã¾ãã
sender ãã©ã¡ã¼ã¿ã¯ã¤ãã³ããçºçããããªãã¸ã§ã¯ãã表ãã¾ããsender ãã©ã¡ã¼ã¿ã¯ãããç¹å®çãªåãæ¡ç¨å¯è½ã§ãã£ãã¨ãã¦ããä¸è¬çã« object åã«ãªãã¾ãããã®ãã¿ã¼ã³ã¯ .NET Framework å ¨ä½ã§ä¸è²«ãã¦æ¡ç¨ããã¦ãã¾ãã
.NET のクラスライブラリ設計 (P.134)ã¤ãã³ããã³ãã©ã®æåã®ãã©ã¡ã¼ã¿ã«ã¯ãåã¨ã㦠object ã使ç¨ããååã sender ã«ãã¾ãã
ãç¥ã
ãªãï¼ã¿ããªãã¤ãããå°ãã¦ãã¾ããçµå±ãããã¯åãªããã¿ã¼ã³ãªã®ã§ãã
ããã¯ã¢ã³ããã¿ã¼ã³ãªããããªãã®ï¼éå»ã®éºç£ããããã¨ã¯åãããã©ãããããã¿ã¼ã³ã¨è¨ãå¼µãã«ã¯ç¡çãããããããªãã ãããï¼
sender ã object ã ã¨ããã¤ããã¤ã sender ã®åã®ç¢ºèªã¨ãã£ã¹ããå¿
è¦ã«ãªã£ã¦ãDRY ã«éåãã¾ããã
ã ããããã«ã¯å¾ãã¹ããããªãããããªãããªã
class 㨠struct
ã©ã¤ãã©ãªã§é »ç¹ã«ä½¿ç¨ããããã¨ãäºæ¸¬ãããåããããã¡ã¤ã«ããå®éã«çºçããªããããããªããããªæãè¾¼ã¿ã§ã¯ãªãå®éã®ãã¼ã¿ã«åºã¥ãã¦ãåç §åãå¤åã«å¤æ´ãããã¨ãæ¨å¥¨ãã¾ãã
.NET のクラスライブラリ設計 (P.70)
ããã¯ãªãã¡ã¯ã¿ãªã³ã°æé ã確ç«ãããå¿ è¦ãããããã
åç §åã¯åç §ã«ãã£ã¦æ¸¡ãããéã«å¤åã¯å¤ã«ãã£ã¦æ¸¡ããã¾ãã
.NET のクラスライブラリ設計 (P.70)
ã¨ã¦ã誤解ãçã¿ãããªè¡¨ç¾ã®æ°ãã»ã»ã»
ã¹ãã¼ããã¤ã³ã¿ï¼
"ã¹ãã¼ããã¤ã³ã¿" ãªå¤åãä½æãããã¨ã«ãã£ã¦ãããããé常ã®ãªãã¸ã§ã¯ãã§ãããã®ããã«é åå ã®è¦ç´ ãåç §ãããã¨ãå¯è½ã§ãããããã®å㯠2 ã¤ã®ãã£ã¼ã«ããæã¡ã¾ããæåã®ãã£ã¼ã«ãã¯å·¨å¤§ãªé åã«å¯¾ããåç §ã2 çªç®ã®ãã£ã¼ã«ãã¯é åã®ã¤ã³ããã¯ã¹ã§ããã¦ã¼ã¶ã¼ã®è¦ç¹ããã¯ããããã® "ã¹ãã¼ããã¤ã³ã¿" ã®ä½¿ç¨ã¯é常ã®åç §åã®ä½¿ç¨ã®ããã«è¦ãã¾ãããã¡ã¢ãªä½¿ç¨éã¯å¤§ããåæ¸ããã¾ãã
.NET のクラスライブラリ設計 (P.71)
ã¹ãã¼ããã¤ã³ã¿ã»ã»ã»ç¨èªã®åå©ç¨ã¯ããã¦æ¬²ãããã ãã©ã»ã»ã»
ã¹ãã¼ããã¤ã³ã¿ã¨ããã¨æ®é㯠C++ ã®ã¹ãã¼ããã¤ã³ã¿ã ããã
æ§é ä½ã®è¨è¨
.NET のクラスライブラリ設計 (P.83)å¤æ´å¯è½ (mutable) ãªå¤åãå®ç¾©ãã¦ã¯ããã¾ããã
ããã¯æ¯éå¾ãã¹ãï¼
public struct Point { public int X { get; set; } public int Y { get; set; } // 以ä¸ç¥ } class Program { static void Hoge(Point p) { p.X = 10; } static void Main() { var p = new Point() { X = 1, Y = 1 }; Hoge(p); Console.WriteLine(p.X); } }
ã¨ããç½ éããã
ã³ã³ã¹ãã©ã¯ã¿ã常ã«æåã¨ã¯éããªã
System.DateTime ã¯ããã¤ãã®ã³ã³ã¹ãã©ã¯ã¿ãªã¼ãã¼ãã¼ããæã¡ã¾ããæãå¼·åã§ãããªãããåæã«æãè¤éãªãªã¼ãã¼ãã¼ãã¯ã8 ã¤ã®ãã©ã¡ã¼ã¿ãåãã¾ããããããããã¨ã«ãã³ã³ã¹ãã©ã¯ã¿ã®ãªã¼ãã¼ãã¼ãã«ãã£ã¦ããã®å㯠3 ã¤ã®ã·ã³ãã«ãªãã©ã¡ã¼ã¿ãããªãã¡ hourãminute ããã³ second ãåããããçãã³ã³ã¹ãã©ã¯ã¿ããµãã¼ããã¾ãã
public struct DateTime { public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar) { ... } public DateTime(int hour, int minute, int second) { ... } }.NET のクラスライブラリ設計 (P.102)
ä½ãããããããªããï¼ããã確ãã«ä¸ã®ã³ã³ã¹ãã©ã¯ã¿ããªãã¨å°ããã©ããããããªãã ãã
ã³ã³ã¹ãã©ã¯ã¿ã®ãªã¼ãã¼ãã¼ãã§ã¯ãyear, month, day ãå¼æ°ã«åããã¼ã¸ã§ã³ã¯ä½ããªãã
ãªãã§ãããã¯ç´ ç´ã«ãã¡ã¯ããªã«ãã¹ãå ´æã ã¨æããã ãã©ãªãã
.NET のクラスライブラリ設計 (P.285)ç¹å¥ãªæ§ç¯ã¡ã«ããºã ã¨æ¯è¼ããã¨ãä¸è¬çã«ã¯ã³ã³ã¹ãã©ã¯ã¿ã®ã»ããã¦ã¼ã¶ããªãã£ãä¸è²«æ§ãå©ä¾¿æ§ã«åªãã¦ããã®ã§ããã¡ã¯ããªãããã³ã³ã¹ãã©ã¯ã¿ãåªå ãã¦ä½¿ç¨ãã¾ãã
ããã¯ãªããDateTime ã®ã³ã³ã¹ãã©ã¯ã¿ã®ã¦ã¼ã¶ããªãã£ã¨ããããã»ã»ã»
常ã«ãã¡ã¯ããªãç¨æãããã£ã¦è¨ãã¤ããã¯ãªããã©ãã¦ã¼ã¶ããªãã£ã¨ãªã¼ãããªãã£ã¯ä¸è¬çã«ã¯ãã¡ã¯ããªã®ã»ããä¸ãããªãããªï¼
ãã ã¾ãããã¡ã¯ããªã«å¯¾ãã¦ããã¡ãã£ã¨ãµãã¼ãã欲ããã®ã¯ç¢ºãã
æ»ãå¤åãç°ãªããªã¼ãã¼ãã¼ãã«ã¤ãã¦ã®è¨åã¯ãªãã®ãã»ã»ã»
ã§ããã°é¿ãã¦æ¬²ãããã ãã©ã
ãããæ¨æºã©ã¤ãã©ãªã®ä¸ã«ããããã£ã¦ã¯ã¾ã£ããã¨ããããã ãã©ããªãã ã£ããå¿ãã¦ãã¾ã£ãã»ã»ã»
ä¸çªè¿ãã®ã¯ã105 ãã¼ã¸ã®ãç°ãªãã»ãã³ãã£ã¯ã¹ãæã¤ã«ããããããåãä½ç½®ã«ä¼¼ããããªåããããã©ã¡ã¼ã¿ãæã¤ãªã¼ãã¼ãã¼ããå®ç¾©ãã¦ã¯ããã¾ããããããªã
null ã«ã¤ãã¦
.NET のクラスライブラリ設計 (P.106)ãªãã·ã§ã³ã®ãã©ã¡ã¼ã¿ã«å¯¾ãã¦ã¯ null ã渡ããã¨ãèªãã¾ãã
ãç¥ã
ãã®ã¬ã¤ãã©ã¤ã³ããéæ³ã®å®æ°ã¨ã㦠null ã使ç¨ãããã¨ãéçºè ã«æ¨å¥¨ãããã¨ãæå³ãã¦ããã®ã§ã¯ãªãããããå ã»ã©èª¬æããããã«æ示çãªãã§ãã¯ãé¿ãããã¨ãæå³ãã¦ãããã¨ã«æ³¨æãã¦ãã ãããå®éã«ãAPI ãå¼ã³åºãã¨ãã«ãªãã©ã«ã® null ã使ç¨ããå¿ è¦ãããã¨ãã¯ãã¤ã§ããã³ã¼ãã«ã¨ã©ã¼ãããããã¾ãã¯ãã¬ã¼ã ã¯ã¼ã¯ãé©åãªãªã¼ãã¼ãã¼ããæä¾ãã¦ããªããã¨ã示ãã¾ãã
ãã¼ããªãã·ã§ã³ã®ãã©ã¡ã¼ã¿ã« null ã渡ããããªã·ããªãªããããªããããã¯ãã®ãã©ã¡ã¼ã¿ãåã£ããªã¼ãã¼ãã¼ãçãæä¾ãã¹ããã£ã¦èãæ¹ã¯é¢ç½ããªã
null ãçæããã¡ã½ããã»ããããã£ã極åé¿ãããã¨ããé ç®ã欲ããã£ããã©ãã©ããè¦ã¤ãããªãã
ã¡ã½ãããããããã£ã
çµé¨åã¨ãã¦è¨ããã®ã¯ãã¡ã½ããã¯åä½ã表ç¾ãã¹ãã§ãããããã¦ããããã£ã¯ãã¼ã¿ã表ç¾ãã¹ãã§ããã¨ãããã¨ã§ãã
.NET のクラスライブラリ設計 (P.112)
æµãããããªã¤ã³ã¿ã¼ãã§ã¤ã¹ã»ã»ã»
ã¤ãã·ã£ã©ã¤ã¶åæã®ããããã£
.NET のクラスライブラリ設計 (P.116)è¨å®å°ç¨ã®ããããã£ãã¾ãã¯ã²ãã¿ãããå¹ åºãã¢ã¯ã»ã¹å¯è½æ§ãæã¤ã»ãã¿ãæã¤ããããã£ãæä¾ãã¦ã¯ããã¾ããã
ã²ãã¿ãããå¯è¦æ§ã®åºãã»ãã¿ã¯ãã¤ãã·ã£ã©ã¤ã¶ã§ä½¿ããã¨ãåæã¨ãã¦ã¾ããã£ã¦æå¿è¡¨æã«ä½¿ããªãããªã»ã»ã»
public class Hoge { public int X { private get; set; } }
ã¨ãã¦ã
var h = new Hoge() { X = 10 };
ã¿ãããªï¼
æ¡å¼µã¡ã½ãã
.NET のクラスライブラリ設計 (P.138)æ¡å¼µã¡ã½ããã®ä½¿ç¨ã¯ã以ä¸ã®ã·ããªãªã®ããããã§æ¤è¨ãã¾ãã
- ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ãã¹ã¦ã®å®è£ ã«é¢ä¿ãããã«ãæ©è½ãã³ã¢ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®è¦³ç¹ããæ¸ããã¨ãå¯è½ã§ããå ´åã«ããã®ãããªãã«ãæ©è½ãæä¾ããããã
- ããåã«ä¾åããã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãããå°å ¥ããã¨ãããã®ãããªä¾åæ§ãä¾åæ§ã®ç®¡çã«ã¼ã«ãç ´å£ãããã¨ã«ãªãå ´åã
å人çã«ã¯æ¡å¼µã¡ã½ããã«ãã£ã¦ null å®å
¨ãªã¡ã½ãããä½ãããã¨ããã®ã大ããã®ã ããã©ã»ã»ã»
極å null ã¯æé¤ããããã ãã©ãç¾å®ã¯ãããã¾ããªããããã¨ããã
ãã¨æ¬¡ã®ãã¼ã¸ã§ç¥ã£ããã ãã©ãVB ã£ã¦ System.Object ã®æ¡å¼µã¡ã½ããå¼ã³åºããªããã ã»ã»ã»
æ¼ç®åã®ãªã¼ãã¼ãã¼ã
.NET のクラスライブラリ設計 (P.144)æ¼ç®åã®ãªã¼ãã¼ãã¼ããå®ç¾©ããã¨ãã¯ãæ¨æ¸¬ãé£ãããã®ã«ãã¦ã¯ããã¾ããã
ãç¥ã
ã¹ããªã¼ã ã«æ¸ãè¾¼ãããã«ã·ããæ¼ç®åã使ç¨ãããã¨ã¯é©åã§ã¯ããã¾ããã
ããC++ ã Dis ã£ã¦ã¾ããï¼
ã»ã»ã»ã¨ããã®ã¯ããã¨ãã¦ãC# ã«ã Boost.Xpressive çãªãã®ã欲ãããªãããªãã¦æã£ã¦ããã
ãã¨æ¡å¼µã¡ã½ããçã«æ¼ç®åãªã¼ãã¼ãã¼ããå®ç¾©ããããªããã¨ãã
4.0 ã§ã¯ dynamic 使ã£ã¦ã»ã»ã»ã£ã¦ã®ãã§ããªãã¯ãªãã¿ããã ãã©ã»ã»ã»ä½¿ãå´ã§æèãããããªãããã»ã»ã»
æ¼ç®åã«å¯¾å¿ããåå
.NET のクラスライブラリ設計 (P.144 - 145)åãªã¼ãã¼ãã¼ããããæ¼ç®åã«å¯¾å¿ãããã¬ã³ããªãªååã®ã¡ã½ãããæä¾ãããã¨ãæ¤è¨ãã¾ãã
ãç¥ã
C# ã®æ¼ç®åã®ã·ã³ãã« ã¡ã¿ãã¼ã¿ä¸ã®åå ãã¬ã³ããªãªåå ... ... ... + (äºé ) op_Addition Add - (äºé ) op_Subtraction Subtract ... ... ... != op_Inequality Equals ... ... ...
+ ã« Addã- ã« Subtract ã£ã¦ã®ã¯ã©ãã ãããåç´ã« Plus/Minus ã§è¯ããªããï¼
ä¾ãã°
Java Puzzlers ç½ ãè½ã¨ãç©´ãã³ã¼ãã¼ã±ã¼ã¹
- ä½è : ã¸ã§ã·ã¥ã¢ã»ãããã¯,ãã¼ã«ã»ã¬ãã¿ã¼,æ´ç°è³æ¨¹
- åºç社/ã¡ã¼ã«ã¼: ãã¢ã½ã³ã»ã¨ãã¥ã±ã¼ã·ã§ã³
- çºå£²æ¥: 2005/11/14
- ã¡ãã£ã¢: 大åæ¬
- è³¼å ¥: 3人 ã¯ãªãã¯: 83å
- ãã®ååãå«ãããã° (56件) ãè¦ã
ã«ã¯ã
Java ã®ä¸å¤åã®ã¡ã½ããåã«ã¯ã誤解ããããã®ãããã¾ããaddãsubtractãnegate ãªã©ã®ååã¯ããããã®ã¡ã½ãããå¼ã³åºãããã¤ã³ã¹ã¿ã³ã¹ã«å¯¾ãã¦å¤æ´ãè¡ããããªå°è±¡ãä¸ãã¾ãããã£ã¨è¯ãåå㯠plusãminusãnegation ã§ãã
Java Puzzlers 罠、落とし穴、コーナーケース パズル 56: 大問題 (Big Problem) (P.132)
ããããã¨ãAPI è¨è¨è ã«å¯¾ããæè¨ã¯ãä¸å¤åã«å¯¾ããã¡ã½ããã®ååä»ããè¡ãå ´åã«ã¯ãåè©ãããåç½®è©ã¨åè©ãé¸ã¶ã¨ãããã¨ã§ãã
ã¨ãããã
ãã¨ã!= ã Equals ã«ãªã£ã¦ãã®ã¯ã!= çã¯ç¨æããã« == çã ! ãããã£ã¦ãã¨ã ãããã©ã»ã»ã»ãã¼ãã
PowerCollections
PowerCollections ããã¸ã§ã¯ã㯠System.Collections.Generic åå空éãæ¡å¼µããã©ã¤ãã©ãªã§ããããã¯ãã®åå空éã«å«ã¾ããæ½è±¡ã«å¯¾ããç´ æ´ããããã£ã¼ãããã¯ããã³æ¤è¨¼ã®ã½ã¼ã¹ã§ãã
.NET のクラスライブラリ設計 (P.173)
ãããªãã®ãã£ãã®ãï¼ç¥ããªãã£ãï¼ï¼
DequeãSetãBag/MultiDictionary ãªã©ã«å ããAlgoritms ã®å
å®ã£ã·ããç´ æ´ãããã»ã»ã»
ä¾å¤ã®åã¹ãã¼
æ°ããä¾å¤ãã¹ãã¼ããæãå®éã«çºçããã¨ã©ã¼ã¨ã¯ç°ãªãã¨ã©ã¼ãå ±åãã¦ãã¾ãããããåæ§ã«ã¢ããªã±ã¼ã·ã§ã³ããããã°ããè½åãæãã¾ãããããã£ã¦ã常ã«ã¹ãã¼ãããããåã¹ãã¼ãæã¾ããããã¤ãã£ããã¢ã³ãã¹ãã¼ (ããã³åã¹ãã¼) ã¯ã©ã¡ããé¿ããããã«ãã¦ãã ããã
.NET のクラスライブラリ設計 (P.196)
.NET のクラスライブラリ設計 (P.198)ä¾å¤ãã©ããããã¨ãã«ã¯å é¨ä¾å¤ãæå®ãã¾ãã
throw new ConfigurationFileMissingException(..., e);ãã®ãã¨ãã©ã®ç¨åº¦æ³¨ææ·±ãèãæãå¿ è¦ãããã®ãã«ã¤ãã¦ååã«å¼·èª¿ããã¦ããªãå¯è½æ§ãããã¾ããããããããªãã¨ãã¯ãä¾å¤ãä»ã®ä¾å¤ã«ã©ãããã¦ã¯ããã¾ãããCLR ã«ããã¦ãã©ããå¦çããããã種é¡ã®ãã©ãã«ãå¼ãèµ·ãããã¨ãç¥ããã¦ããä¾ã¯ãªãã¬ã¯ã·ã§ã³ã§ãããªãã¬ã¯ã·ã§ã³ã使ç¨ãã¦ã¡ã½ãããå®è¡ããã¨ããã¡ã½ãããä¾å¤ãã¹ãã¼ããã¨ãCLR ã¯ããããã£ããããæ°ãã TargetInvocationException ãã¹ãã¼ãã¾ããå®éã®ã¡ã½ããããã³ã¡ã½ããå ã®åé¡ã®ããå ´æãé ãºãããã®ã§ãããã¯ä¿¡ããããã»ã©ã«è¿·æãªãã®ã§ãã
ä¸ã®ã¯ã¡ãã£ã¨å¾åããããããªãã
ä¸ã®ã¯ãTargetInvocationException ã¨ãã¢ãã« Java ã®å½±é¿ãåãã¦ãããªã»ã»ã»
Java ã¨éã£ã¦ C# ã«ã¯æ¤æ»ä¾å¤ããªããã ãããä¾å¤ãã©ããããæå³ã¯ã»ã¨ãã©ãªãã¯ã*3ãã ãã C# ã§ã¯åºæ¬çã«ã¯ä¾å¤ãã©ãããã¹ãã§ã¯ãªãã
DebuggerDisplay å±æ§
ãããªãã®ãã£ãã®ãã»ã»ã»(233 ãã¼ã¸)
EditorBrowsable å±æ§ãªãã¦ã®ãã¯ããã¦ç¥ã£ã (66 ãã¼ã¸)
ç¨èª
ãã¡ã¯ããªã«ã¯ 2 ã¤ã®ä¸»è¦ãªã°ã«ã¼ããããã¾ããããªãã¡ããã¡ã¯ããªã¡ã½ãã (factory method) ã¨ãã¡ã¯ããªå (factory type) ã§ãããã¡ã¯ããªåã¯ãã¢ãã¹ãã©ã¯ããã¡ã¯ã㪠(abstract factory)ãã¨ãå¼ã°ãã¾ãã
.NET のクラスライブラリ設計 (P.284)
ããã¼ï¼ããã¯ã²ã§ãï¼
ããã ã¨ãFactory Method ãã¿ã¼ã³ã¯ãã¡ã¯ããªåã ããã¢ãã¹ãã©ã¯ããã¡ã¯ããªãã£ã¤ã¼æå³ä¸æãªç¶æ³ã«ã»ã»ã»
çµè«
è²ã
æ¸ãããã©ãã¨ã¦ãããæ¬ã§ããï¼
ååçã«ã¯ã.NETããªãã¦ä»ãã¦ããã©ãä»ã®è¨èªã使ã£ã¦ããå ´åã§ãåèã«ãªãé¨åã¯å¤ã
ããã®ã§ãC# 使ããªãããã£ã¦äººã§ãèªãã§ã¿ãã¨ããããã
ãã ãã¡ãã£ã¨é«ãã®ã¨ã誤æ¤çãªç©ãçµæ§ããã®ã§ã¾ãã¯ä¼ç¤¾ã§è²·ã£ã¦ãããã°ããããããªãããªã
ééãé¨åãã¡ã¼ã«ããããå¢å·ã§ä¿®æ£ãããã¿ããã§ããã
ãã¨æ£èª¤è¡¨ãç¨æãããããã ãããå¤æ®µãããã¯ã«ãªããªããªãæ¯éè²·ãã¾ãããï¼
å¤æ®µåã®ä¾¡å¤ã¯ãããã£ã¦ï¼ããããã絶対ã«ããã
*1:45 ãã¼ã¸ããã
*2:æ´ã«å¯è¦æ§ã®å¢çã§ããã
*3:Java ã§ã¯æ¤æ»ä¾å¤ãããã®ã§ããã¾ãã«ãä½ã¬ãã«ãªæ¤æ»ä¾å¤ã¯å®è£ ã®è©³ç´°ããããã ããã¨ã«ãªãã®ã§ãé«ã¬ãã«ãªæ¤æ»ä¾å¤ããRuntimeException ç³»ã®ä¾å¤ã§ã©ãããã¦é©åãªç²åº¦ã®ä¾å¤ã«å¤æãããã¨ã¯ãããããããã¹ã