ã¡ã½ããåã® getXXX
㨠findXXX
ã©ã£ã¡ãããã®ï¼ã¿ãããªè©±ã«ãªããã¨ãããã
ãã®æã®è©±ãã§ããã ãã§ãããæãã ã¨æãã¾ããååãè¨å·åãã¦ããªãã£ã¦ãã¨ãªã®ã§ã ä¸ã®ä¸ã«ã¯ååã«åãå²ãã®ãç¡é§ãªæèããã£ã¦ãããè¨ãã®ã«æããã¦ç¶ããã¨å½ç¶ããã«åããããªããªãã¾ãã ãã®æèã§ã¯æé©è§£ã ãã©ãç§ã¯ååãéè¦ã ã¨æã£ã¦ãããããã®ä¾¡å¤è¦³ãåå°ã«ä»ã®ãã®ãç©ã¿ä¸ãã¦ããããã ã¨ãããã¨ã§è©±ãæ»ãã
ãå¾ããã¨ãæ¢ããã®ãããªãã®ãæå³ãã¦ä½¿ãåããã¨ã³ã¼ããèªã¿ããããªãã¾ãã 使ãåãæ¹ã«ãã£ã¦èªã¿ãããã¯å¤ããã¯ããã®ã§ããããæå³ãã¦ä½¿ãåãã¦ãããã ãã§ãååå¤ããã¾ãã ãã®æå³ã«å ±æã§ãããæ±²ã¿åãããããã°ããã«èªã¿ããããªãã¾ããããã®å段éã¨ãã¦æå³ã®æç¡ãéè¦ã ã¨æã£ã¦ã¾ãã
ç§ã®åºæ¬çãªä½¿ãåã
getHoge(æ¡ä»¶): Hoge
findHoge(æ¡ä»¶): Optional<Hoge>
æ»ãå¤åã«ç¾ãã¾ããget
ã§Optional
ã¯ãªãæãã
getXXX
ã¯æããã¨ãåæãç¡ãå ´åã¯ä¾å¤çäºè±¡ã¨ãã¦ä¾å¤ã§æ±ãã¾ãã
ãã®ã¡ã½ããã®å¼ã³åºãå´ã«è¦ã¤ãããªãå ´åãèæ
®ãããã¹ãã§ã¯ãªãã®ã§ãéæ¤æ»ä¾å¤ã¨ãã¾ãã
findXXX
ã¯ç¡ãå ´åãä¾å¤çäºè±¡ã§ã¯ãªãã®ã§ãæ»ãå¤ã§æ±ãã¾ãã
æ»ãå¤ Optional
ã¨ãã¦ãå¼ã³åºãå´ã«ãã³ããªã³ã°ãè¦æ±ãã¾ãã
ãã¾ null
ã«ããã®ã¯ï¼
ç§ã null
æ ¹çµ¶ç©å¥æ´¾ï¼éæ¿æ´¾ãããªããï¼ãªã®ã§ã使ããªãã«ã¯ãªããã§ããã
ä¸è¨ã®ãããªæèã®ä½¿ãåããããã¨ãã¦ãè¦ã¤ãããªãå ´åã« null
ãè¿ãã®ã¯é¿ãããã¨ãæ¨å¥¨ãã¾ãã
getHoge(): Hoge
㨠findHoge(): Hoge
ã並ã¶ã¨ã使ãåããåããã¾ããã
ãã®å ´åã¯ããã¥ã¡ã³ãã§ã®ãã©ãã¼ã«ãªãã¾ãããã³ã³ãã¤ã«æã®æ¤æ»ãå¹ããªããªããJavaã使ã£ã¦ããå©ç¹ãæ¸è¡°ãã¦ãã¾ãã¾ãã
äºå® null
ãè¿ãAPIã¯ããã¥ã¡ã³ãã§ãã©ãã¼ããã¦ãã¾ãã
ãã¨ãã° java.util.Map#get(Object)
ãæãããããã®ã¡ã½ããã使ç¨ããå´ã¯ null
ãèæ
®ããå®è£
ãã³ã³ãã¤ã©ã§ã¯ãªã人éã®æ³¨ææ·±ãã§ãã©ãã¼ããå¿
è¦ãããã¾ãã NonNull
ã®ãããªã¢ããã¼ã·ã§ã³ã¨ãéç解æãIDEã®ãã§ãã¯ãªã©ã§æ©æ¢°çãªãã§ãã¯ããã©ãã¼ãããç¯å²ã¯åºãã£ã¦ã¯ãã¾ãããã¾ã ã¾ã ã
Optional
ããªãæ代ã getXXX
ã¯åã㧠findXXX
㯠null
ãè¿ããæ¤æ»ä¾å¤ã®ããããã§ãæ
£ç¿çã«ã¯ null
ãè¿ããã¦ãããã®ãå¤ãã£ãããã«æãã¾ãã
ãã¾ã¯ Optional
ãããã®ã§ãã¡ãã§æ±ãã¾ããããå®ç§ãªè§£ã§ã¯ãªãã§ããã null
ããã¯è¯ãã§ãã
ããè¦: Optionalèªèº«ã®getã®ä½¿ãæ¹
Optional
ã«ã¯ find
ã¨ããªãã§ããã get
㯠empty
ã®å ´åã«éæ¤æ»ä¾å¤ãæãã¾ãã
ãã get
ã ãã®ååã ã¨å±éºãä¼ããã¥ãããã orElseThrow(SupplierSupplier
ã®è¨è¿°ãã ããã®ã¯ç解ã§ãã¾ããããããã£ã¦ããå¼æ°ãªãã® orElseThrow()
ã¡ã½ãããJava10ï¼2018å¹´3æï¼ã§è¿½å ããã Optional
ã®Javadocã§ããã¡ãã使ãããã«æ¡å
ããã¦ãã¾ãã
ãªãã¨ãªã get
ã¡ã½ãããããã¯ã©ã¹ã§ Optional
ãé£æ³ããã®ã§ããã¦ã¿ããã©ã Optional
ã« find
ã¯åããªãããããã使ããã¦ãã¨ãããã find
ã¯ã¡ã½ããå¼ã³åºãæã«è§£æ±ºãã«ãããããªã¤ã¡ã¼ã¸ãæã¡ããã
ããè¦: Jacksonã®getã¨findã®ä½¿ãåã
Jacksonã® JsonNode
ãè¦ã¦ã¿ã¾ããããJavadocã¯ãã¡ãã以ä¸ã®ãããªã¡ã½ãããããã¾ãã
get(String fieldName): JsonNode
findValue(String fieldName): JsonNode
ãããã JsonNode
ãè¿ãã¾ããããããã null
ãè¿ãã¾ããéã㯠get
ãç´ä¸ã®ã¿ãæ¢ãã®ã«å¯¾ãã findValue
ã¯åè¦ç´ ãæ¢ããã¨ãã¹ãã¼ããä¸å®ã§ãªããªãåºæ¬çã« get
ã®ã¿ã使ç¨ããã§è¯ãã¨æãã¾ãã
Jacksonã®ãã®ä½¿ãåãã«ã¯ãæ¢ãå ´æã¨ãã¦æå®ããããã¹ã«åè¦ç´ ãå«ãã§ãããã®ãããªJSONããã¹ã§è¡¨ç¾ã§ãããã¨ãåæã«ããAPIã£ã¦æãã§ããã ãã®ã©ã¤ãã©ãªãã©ãããä¸ç観ã§è¨èé¸ã³ããã¦ãããã®éç¨ãæã£ã¦ããã¨äºæ¸¬å¯è½æ§ãä¸ããã¾ãã
ããè¦: XXX
ãããããããã¦ããããèªåãã¡ããããããã¨è¨ãã®ã¯ãããããããã権å¨çãªãã®ã§ãããã¨å¾®å¦ã§ãã ããã¯ããã
ã§ããããã¯ï¼ããè¨ãæèã ããï¼ãã使ã£ã¦ããã ãªããã¨æ³åããã説æã試ã¿ã¦ã¿ãã®ã¯å½¹ç«ã¤ã¨æãã¾ãã éçºã§ä½¿ãèªå½ã¯ä¸å¦è±åèªãããå°ãªãã¨æãããç®ã«å ¥ã£ããçºãã¦ã¿ãã¨ããã¨æãã
ä»ã®ååã®åè£
get
ã§ã find
ã§ããªãä½ãããæãã®ååãè¦ã¤ãããªãããã試ãã¦ã¿ãã®ãããã§ãã search
ã¯ãã¾ã«ã¿ãã
èªã¿ãããã³ã¼ãã®ã¬ã¤ãã©ã¤ã³ 第2ç« å½å ã§ã¯ get
find
search
pop
calculate
fetch
query
load
ãªã©ãæãããã¦ãã¾ãããããã®åèªã§ç½®ãæãã§ãããã試ãã¦ã¿ãã¨ååãå¼ãç· ã¾ã£ããããã
æ¸ç±ã§ã¯ãè¾æ¸ãé¡èªè¾å ¸ããæãããã¦ãã¦ãç§ã¯ããããã®ã¯è±è±è¾å ¸ããã使ãã¾ãã
search
ã使ãã®ã¯ find
ããæ¢ãåãæã¨ãæ¤ç´¢æ¡ä»¶ãåºãããªã¤ã¡ã¼ã¸ãããã¨ã¯è¨ããã¤ãã£ãã§ãªãæã
ããã¥ã¢ã³ã¹ã§ä½¿ãåããã®ã¯é£ããã®ã§ããã¼ã ããã®ã³ã¼ãã«é¢ããã¹ã³ã¼ãã§ä¼è©±ããªãã調æ´ãããã¨ããã
åè
å ã«æãããèªã¿ãããã³ã¼ãã®ã¬ã¤ãã©ã¤ã³ãããè¯ãã³ã¼ãï¼æªãã³ã¼ãã§å¦ã¶è¨è¨å ¥éããªã©ãæè¿ï¼ã¨ãã£ã¦ãã¨ãã«2022å¹´ã§ããï¼ã®æ¸ç±ã§ãå½åã¯ãããªãã«å²ããã¦ãã¾ãã
åããããªãã¨ãéã®ãã¨ãæ¸ãã¦ããããã«è¦ããããã¦é¢ç½ãããã¾ããç§ãå ±æãããã®ãããã°ã趣å³ã«åããªããªãã¨æãã¨ããããã°ãã°ããã®2åã¯God/Badã®ãããªæ¸ãå£ã
ååã®è©±ã¯é·å¹´ãã£ã¨èªããããã¨ã§ã10å¹´é¡ã£ã¦ã¿ã¦ããCleanCodeãï¼é¦è¨³2009å¹´ï¼ã§ã¯ç¬¬1ç« ãã¯ãªã¼ã³ã³ã¼ããã®æ¬¡ã«ãã第2ç« ããæå³ã®ããååãã§ãã
ãã¨ããã®ãæ¬ãã¨ãã¦ç¥ããã¦ãããããã°ã©ããããã¹ã97ã®ãã¨ãï¼2010å¹´ï¼ã®ãååéè¦ãã¨ãã
20å¹´ã30å¹´é¡ã£ã¦ããããã§ãããã¨æããã§ãèå³ãã人ã¯æ¢ãã¦ã¿ããã
åè¿°ã®ããã«è±åèªã®é¸æã«è¿·ãå ´åã¯è±è±è¾å ¸ã§ãããç¨éçã«ãã±ãããµã¤ãºã®ã使ã£ã¦ãã¾ããWebã§ãããã®ã§ãããå¨ãã®åèªããã³ãã«ãªããã¨ãå¤ãã®ã§ç´ã好ãã
ãã¨ãã¥ã¢ã³ã¹ã¯ãã¡ãã®ãã¥ã¢ã³ã¹å³éãããæãã§ãã make
build
create
produce
ã¨ãã
ãã¥ã¢ã³ã¹ã ã¨ã³ã¢ã¤ã¡ã¼ã¸ããã¾ã«ã¿ã¦ãã
å¥ã«è±èªçãªæ£ããã¨ãã¯éè¦ãã¦ããããã§ã¯ãªãã¦ãæå³ãã¦ä½¿ãåããããã®æ ¹æ ãç§ã¯ãã®è¾ºã«æ±ãã¦ããæãã§ãã æ¥æ¬èªå称ã®æã¯å½èªè¾å ¸ã®ã»ããèªæºã¨ãæ¼¢åã®ç±æ¥ã¨ããåç §ããããããããããã£ã¡ã¯æ¸ç±ã¨ãæã£ã¦ãªããªâ¦â¦ã
ç§ã¯いい名前が思いつかないときは変な名前をつける - 日々常々 ã¨ããã°ã§æ¸ãã¦ããããã«ãååã¯ãããªãã¯æãã¤ããªããã©ãã©ãå¤ãã¦è²ã¦ã¦ãããã®ã ã¨æãã®ã§ããã»ã¹ãç´¹ä»ãã¦ããã
ãã®ããã»ã¹ã®éç¨ã§ä¸è¬çã«ã¯ãé¿ããã¹ããã¨ãããååãåºããã¨ãããã ãããããã¹ã¦ã®ååããã®ããã»ã¹ã§ãããã®ã§ããªãã¨æã£ã¦ããã
ã¨è¨ããã¨ã§ãååã®ä½¿ãåã
ææã«åºã¥ãã¦ååã使ããã¦ãããã¨ãæã¿ã¾ãã
ããã¯ãåããã®ã¯åãåèªã使ããã¨è¨ãå½¢ã§ç¾ãããããããªãããä»ã®å½¢ãããããªãã ã¨ãããææã«åºã¥ãã¦ãããã¨ãéè¦ã§ããå¯èªæ§ãããããããäºæ¸¬å¯è½æ§ããéè¦ãããã¨æã£ã¦ãã¾ãã èªã¿ãããã³ã¼ãã¨ã¯é©ãã®ãªãã³ã¼ããé©ãã®ãªãã³ã¼ãã¨ã¯äºæ¸¬ãå½ãããã®ããããªæãã
get
/find
ã®æ¬ç¨¿ã®ä½¿ãåãã¯ãããªãã«åãå
¥ãããã¦ããã¨æãã®ã§æ±ãã¾ããã
ãããã¦ããã¨ã³ã¼ããèªãã¨ãã«æåã®äºæ¸¬ãã§ãã¦ç´ããæ¸ãã¾ãã
å¯èªæ§ã«å¯ä¸ããã¨è¨ãããä¸è¬çãªã«ã¼ã«ã«åãã¦ãã¦ããäºæ¸¬å¯è½æ§ãããã°èªã¿ãããã³ã¼ãã¨è¨ããã¨æãã
使ãåãã«è¿·ã£ããèªèº«ã®çµé¨ãè¨èªåãã¦ã¿ãããä»ã®ã©ã¤ãã©ãªã®ä½¿ãæ¹ãåèã«ãã¦ã¿ãã®ãããã¨æãã ã§ããã®ä½¿ãåãæ¹ãè²´æ¹ã®ã³ã³ããã¹ãã«åããã¯å¥ã®è©±ãããã¾ã§åèã«ã Jacksonã®ä¾ã§ãããããã«æèãéãã°ä½¿ãåãã§ç¤ºããããã®ãå¤ãã£ã¦ããã®ã§ãã©ã¤ãã©ãªããã¬ã¼ã ã¯ã¼ã¯ã使ãæã«ã¯ãã®æèã®è¨èãã©ãã¾ã§æã¡è¾¼ãããè¨è¨ããå¿ è¦ãã§ã¦ãã¾ãããã®ã«ãã£ã¦ã¯ã³ã³ããã¹ããããã³ã°ãå¿ è¦ã«ãªããããããªãã
ãããªæãï¼ï¼ã¾ã¨ã¾ããªãï¼
追è¨
ãåºæ¬çãªã使ãåãã¨æ¸ãã¦ããéããä»ã®ä½¿ãåãããããã¨ãããã¾ãã éè¦ãªã®ã¯ä½¿ãåãæ¹ãåãæèã§æ··ãããªããã¨ããªã¼ã£ã¦ã å¤åè¨èãå°½ããã°æ ¹æºã«ããå ±éçãªæ¦å¿µãè¨èªåã§ãããã ãã©ãããªãã¦ãä¼ããã§ãããããã
è¨ç®é
æ¹ãã¦èããã¨ãèªåã¯ä»¥ä¸ã¿ãããªã¤ã¡ã¼ã¸ã§ä½¿ãåãã¦ããæ°ãããã
— å¤§éª å½ (@mikoto2000) 2024å¹´5æ30æ¥
get ... O(1)
find ... O(x) : x > 1
ããã¡ãã£ã¨èããã ãã§ä¾å¤ããæ°ããããªã... https://t.co/eh7AKyhH34
ç§ãåãæè¦ããã
件æ°
è¯ãã£ãã
— shiryu (@shiryu_go) 2024å¹´5æ30æ¥
èªåã®å ´åã¯ä»ã¾ã§ã
findã ã¨List
getã ã¨åä¸
ã帰ã£ã¦ããããªã¤ã¡ã¼ã¸ã ã£ã https://t.co/HvuMV23w0O
ç§ãåãæè¦ããã get
ã 1
ã«å¯¾ã㦠find
㯠List
㧠0..n
ã¨è¨ãæè¦ã
件æ°ã§ã®ä½¿ãåããèãã㨠0..1
, 1
0..n
1..n
ãåããããªã£ã¦ã get
/ find
ã ããã足ãããã¨ãªããæ»ãå¤åã¨ã findOne
ã¨ãä»ã®è¡¨ç¾æ¹æ³çµã¿åããã¦ãªãã¨ããããã£ã¦ããå§ãããæ¯åä½ã ããã ãããªãã«è½ã¡çããã ãã©ã決ã¾ã£ãçãã¯æã£ã¦ãªãããã