ããã°ã©ãã³ã°ãããŒã¿ããŒã¹ã«ãããŠãNullïŒãã«ïŒãã¯ãå€ãååšããªãç¶æ ã瀺ãéèŠãªæŠå¿µã§ããæ¬èšäºã§ã¯ãNullã®å®çŸ©ãæŽå²ãäž»èŠãªããã°ã©ãã³ã°èšèªïŒC/C++ãJavaãPythonãªã©ïŒã«ãããå ·äœçãªåãæ±ããããã«ããŒã¿ããŒã¹ã§ã®å©ç𿹿³ã«ã€ããŠãåå¿è ã«ãåããããã解説ããŸããããããNullã®å šäœåãææ¡ããå®åãåŠç¿ã«åœ¹ç«ãŠãããã®ç¥èã身ã«ã€ããŸãããã
1. åºæ¬æŠå¿µã®è§£èª¬
ãNullïŒãã«ããã«ïŒãã¯ãããã°ã©ãã³ã°ãã³ã³ãã¥ãŒã¿ã®åéã§ãäœããªããç¶æ ã瀺ãéèŠãªæŠå¿µã§ãã
Nullã®å®çŸ©
- ãNullãã¯ãäœããªããç¶æ ãæå³ããŸãã
- ããã°ã©ãã³ã°ã§ã¯ãå€ãååšããªãããŸãã¯æå¹ãªå€ãã»ãããããŠããªãããšã衚ãããã«çšããããŸãã
- 䌌ãæå³ã®çšèªãšããŠãPascalã®
NilãPythonã®NoneãVB.NETã®Nothingãªã©ããããŸãã
çºé³ãšè¡šèš
- ãã€ãèªã§ã¯æ°åã®ã0ããæå³ã
/nÊl/ãšçºé³ãããŸãããèšäºã§æ±ããäœããªããã瀺ãå Žåã¯ãè±èªé¢šã«/nÊl/ãšçºé³ãããããšããããŸãã - æ¥æ¬ã§ã¯ããã«ããšåŒã°ããã®ãäžè¬çã§ãããããã«ããšèªãå ŽåããããJISèŠæ Œãªã©ã§ããã«å€ããããã«æåããšèšè¿°ãããããšããããŸãã
2. æŽå²ãšèªæº
èªæº
- ãNullãã¯ã©ãã³èªã®ãnullusãïŒïŒç¡ïŒã«ç±æ¥ããŸãã
- ãŸããé¡äŒŒèªã® nil ã¯ã©ãã³èªã®ãnihilãã®ç瞮圢ãšããŠäœ¿ãããŠããŸãã
æŽå²çèæ¯
- ã³ã³ãã¥ãŒã¿ãããã°ã©ãã³ã°ã®é»ææããããäœããªãããšããç¶æ ã衚ãå¿ èŠæ§ãããããŸããŸãªèšèªã§Nullã«çžåœããããŒã¯ãŒããå°å ¥ãããŠããŸããã
- æ°åŠãè«çåŠã«ãããŠãã空éåïŒempty setïŒãé¶è¡åïŒzero matrixïŒãªã©ãäŒŒãæŠå¿µãèŠãããŸãã
3. ããã°ã©ãã³ã°èšèªã«ãããNULLã®æ±ã
ããã°ã©ãã³ã°èšèªã§ã¯ãNullã®æ±ãã¯èšèªããšããŸãã¯ãã®ããŒãžã§ã³ãå®è£ ã«ãã£ãŠç°ãªããŸãã以äžã«äž»èŠãªèšèªã§ã®äŸã瀺ããŸãã
3.1 C/C++ã®å Žå
- ãã«ãã€ã³ã¿
Cèšèªã§ã¯ããã€ã³ã¿å€æ°ãæå¹ãªãªããžã§ã¯ããæããŠããªãå Žåã«ãç¹å¥ãªå®æ°å€ïŒNULLãã¯ãïŒã§è¡šçŸãããŸãã
äŸïŒ#define NULL ((void*)0)ïŒCèšèªïŒ
C++ã§ã¯ãåŸæ¥ã¯#define NULL 0ãšããŠããŸããããC++11以éã¯å°çšã®nullptrããŒã¯ãŒãïŒstd::nullptr_tåïŒãå°å ¥ãããŠããŸãã
â»æ³šæïŒCãC++ã§ã¯ãå éšçã«NULLã®æ±ããåŠçç³»ã«ãã£ãŠç°ãªãå Žåããããããèšèªä»æ§ã確èªããããšãéèŠã§ãã
3.2 Javaããã³C#ã®å Žå
- ãã«åç
§
JavaãC#ã§ã¯ããã€ã³ã¿ãšããæŠå¿µã¯ãªããåç §åã®å€æ°ãæå¹ãªãªããžã§ã¯ããæããŠããªããšãã«nullããŒã¯ãŒãã䜿ãããŸãã
C#ã§ã¯ããŸããå€åãã©ããããNullableåïŒSystem.Nullable<T>ïŒã®ç¡å¹å€ãnullãšããŠæ±ãããŸãã
3.3 ãã®ä»ã®èšèª
- Python
çµã¿èŸŒã¿ãªããžã§ã¯ãNoneãNullã®åœ¹å²ãæãããŸãã
ããŒãžã§ã³2.4以éãNoneã«ã¯ä»£å ¥ã§ããªããªã£ãŠããŸãã - Ruby
äºçŽèªnilããNilClassã®å¯äžã®ã€ã³ã¹ã¿ã³ã¹ãšããŠååšãããäœããªããç¶æ ã瀺ããŸãã - VB.NET
NothingããŒã¯ãŒãã«ãããä»»æã®ããŒã¿åã®æ¢å®å€ïŒïŒåæåãããŠããªãç¶æ ïŒã衚çŸããŸãã - LISP
NILã¯ã空ãªã¹ããåœãå Œããå€ãšããŠäœ¿ãããåå®è£ ã§æåã«éããèŠãããããšããããŸãã
4. ããŒã¿ããŒã¹ã«ãããNULL
- åºæ¬æŠå¿µ
NULLã¯ãããŒã¿ããŒã¹ã®æ¬ïŒã«ã©ã ïŒã空æ¬ã§ããç¶æ ã衚ããå€ãååšããªãããšãæå³ããŸãã
人éãèªã衚ã§ã®ãNAïŒè©²åœãªãïŒãã«è¿ãèãæ¹ã§ãã - æªç¥ vs. é©çšäžèœ
- æªç¥ïŒUnknownïŒïŒäŸãã°ãååããããåãããªãå Žåã
- é©çšäžèœïŒNot ApplicableïŒïŒäŸãã°ãç¬èº«è ã®é å¶è ã®ååãªã©ããããã該åœããªãå Žåã
ãããã®åºå¥ã¯ãããŒã¿ããŒã¹èšèšã®éã«éèŠãªãã€ã³ããšãªããŸãã
- NULLãå«ãæŒç®ãšæ¯èŒ
NULLãå«ãå€ãã®ç®è¡æŒç®ïŒäŸïŒNULL + 1ãNULL / 0ïŒã¯ãçµæãšããŠNULLãšãªããŸãã
ãŸããæ¯èŒæŒç®åãINè¿°èªã§NULLã絡ãå Žåãçµæã¯è«çå€ã® UNKNOWN ãšããŠæ±ãããç¹å¥ãªæ³šæãå¿ èŠã§ãã - NULLã®åŠçäžã®å·¥å€«
WHEREå¥ã§ã®NULLã®åãæ±ããããœãŒãé ã調æŽããããã«ãIS NULLãIS NOT NULLããŸãã¯COALESCEãCASEåŒãçšããŠNULLã«ä»»æã®å€ãå²ãåœãŠãæ¹æ³ãäžè¬çã§ãã
äŸïŒORDER BY COALESCE(col, 0)â»Oracleã®å Žåã空æååãšNULLãåºå¥ããªããšããç¹æã®æåãããã®ã§æ³šæãå¿ èŠã§ãã
5. ãããã誀解ãšãã©ãã«ã·ã¥ãŒãã£ã³ã°
- 誀解äŸ
Nullãšç©ºæååããŒãå€ã¯ãæå³çã«å šãç°ãªããŸããããã°ã©ã å ã§ã¯ãNullããå€ãªãããšããŠæ±ãããäžæ¹ã空æååã¯ãå€ã¯ãããå 容ã空ãã§ãããããæ··åããªãããã«èšèšããå¿ èŠããããŸãã - ãã©ãã«ã·ã¥ãŒãã£ã³ã°
Nullãã€ã³ã¿åç §ããã«åç §ã¯ãããã°ã©ã ãã¯ã©ãã·ã¥ããåå ãšãªããããå¿ ãé©åãªãã§ãã¯ïŒäŸïŒifæã«ããNullãã§ãã¯ïŒãå®è£ ããããšãæ±ããããŸãã
ãŸããããŒã¿ããŒã¹ã§ã®NULLã«é¢ããåŠçãã¹ã¯ãæ€çŽ¢ãæŽæ°ã§äºæãã¬çµæãæãããšããããããèšè𿮵éããæ éãªæ€èšãå¿ èŠã§ãã
6. ãŸãšããšä»åŸã®å±æ
- ãŸãšã
Nullã¯ãã³ã³ãã¥ãŒã¿ã®åéã§ãäœããªããç¶æ ã瀺ãããã«äžå¯æ¬ ãªæŠå¿µã§ãã
åããã°ã©ãã³ã°èšèªãããŒã¿ããŒã¹ã·ã¹ãã ã§ã¯ãNullã®æ±ãã«éãããããåå¿è ã¯ãã®éããçè§£ããããšãéèŠã§ãã - ä»åŸã®å±æ
ããã°ã©ãã³ã°èšèªã®é²åã«äŒŽããNullã«é¢é£ãããã°ãé²ãããã®ä»çµã¿ïŒäŸïŒKotlinã®nullå®å šèšèšããC++11以éã®nullptrïŒãå°å ¥ãããŠããŸãã
ä»åŸããããæç¢ºãã€å®å šãªNullã®åãæ±ããé²ããšèããããéçºçŸå Žã§ã®å®è·µãæ±ããããã§ãããã
ä»é²ïŒåèæ å ±ãšå®äŸ
ã³ãŒãäŸïŒC/C++ïŒ
#include <stdio.h>
#define NULL ((void*)0)
int main(void) {
int *ptr = NULL;
if (ptr == NULL) {
printf("ãã€ã³ã¿ã¯NULLã§ãã\n");
}
return 0;
}
ã³ãŒãäŸïŒJavaïŒ
public class Main {
public static void main(String[] args) {
String str = null;
if (str == null) {
System.out.println("åç
§ã¯nullã§ãã");
}
}
}
å®åã§ã®æ³šæç¹
ããã°ã©ãã³ã°ãããŒã¿ããŒã¹èšèšã®éã¯ãNullã®åãæ±ãã«äŒŽãåé¡ç¹ãäºåã«æ€èšŒããé©åãªå¯ŸçïŒäŸïŒãªãã·ã§ãã«åã®å°å ¥ãæç¢ºãªNULLãã§ãã¯ã®å®è£ ïŒãè¡ãããšã倧åã§ãã
Nullã¯ãããã°ã©ãã³ã°ã®ããããåéã§ãäœããªããç¶æ ãé©åã«æ±ãããã«äžå¯æ¬ ãªæŠå¿µã§ããåèšèªãããŒã¿ããŒã¹ã§ã®åãæ±ãã®éããæ£ããçè§£ããããšã§ããã°ã®é²æ¢ãå¹ççãªã³ãŒãèšèšã«ã€ãªãããŸããä»åŸã®ããã°ã©ãã³ã°åŠç¿ãå®åã«ãããŠãNullã®çè§£ãæ·±ããããšã¯å®å šã§æè»ãªã·ã¹ãã éçºã«å€§ãã«åœ¹ç«ã€ã§ãããã

Comment