-
Notifications
You must be signed in to change notification settings - Fork 37
/
Javaコーディング規約.html
2615 lines (2615 loc) · 224 KB
/
Javaコーディング規約.html
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang xml:lang>
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Future Enterprise Coding Standards" />
<title>Javaコーディング規約</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
color: #aaaaaa;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
div.sourceCode
{ }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #7d9029; } /* Attribute */
code span.bn { color: #40a070; } /* BaseN */
code span.bu { } /* BuiltIn */
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4070a0; } /* Char */
code span.cn { color: #880000; } /* Constant */
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
code span.dt { color: #902000; } /* DataType */
code span.dv { color: #40a070; } /* DecVal */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #40a070; } /* Float */
code span.fu { color: #06287e; } /* Function */
code span.im { } /* Import */
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
code span.op { color: #666666; } /* Operator */
code span.ot { color: #007020; } /* Other */
code span.pp { color: #bc7a00; } /* Preprocessor */
code span.sc { color: #4070a0; } /* SpecialChar */
code span.ss { color: #bb6688; } /* SpecialString */
code span.st { color: #4070a0; } /* String */
code span.va { color: #19177c; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
</style>
<style type="text/css">body {
font-family: Helvetica, arial, sans-serif;
font-size: 14px;
line-height: 1.6;
padding-top: 10px;
padding-bottom: 10px;
background-color: white;
padding: 30px;
}
body > *:first-child {
margin-top: 0 !important;
}
body > *:last-child {
margin-bottom: 0 !important;
}
body {
margin-left: 300px;
}
#TOC {
position: fixed;
left: 0;
top: 0;
bottom: 0;
overflow-y: auto;
width: 300px;
transition: width, font-size, opacity 300ms, 300ms, 300ms ease-in-out,
ease-in-out, ease-in-out;
padding-left: 1em;
box-sizing: border-box;
}
#TOC ul {
margin: 0 0 0 1em;
padding: 0;
}
@media all and (max-width: 1000px) {
body {
margin-left: 0;
}
#TOC {
overflow: hidden;
width: 0;
opacity: 0;
}
}
@media print {
body {
margin-left: 0;
}
#TOC {
display: none;
}
}
@media print {
.print-hidden {
display: none;
}
}
h1.title {
font-size: 42px;
border-bottom: 2px solid #cccccc;
}
@media print {
h1.title {
text-align: center;
margin-top: 50%;
page-break-before: auto;
}
}
h2.author {
font-size: 12px;
border: none;
color: initial;
text-align: right;
margin: 0;
page-break-after: always;
}
h1 {
page-break-before: always;
}
h1,
h2,
h3,
h4,
h5,
h6 {
margin: 20px 0 10px;
padding: 0;
font-weight: bold;
-webkit-font-smoothing: antialiased;
cursor: text;
position: relative;
page-break-after: avoid;
}
a {
color: #4183c4;
}
h1 {
font-size: 28px;
color: black;
}
h2 {
font-size: 24px;
border-bottom: 1px solid #cccccc;
color: black;
}
h3 {
font-size: 18px;
}
h4 {
font-size: 16px;
}
h5 {
font-size: 14px;
}
h6 {
color: #777777;
font-size: 14px;
}
p,
blockquote,
ul,
ol,
dl,
li,
table,
pre {
margin: 15px 0;
}
hr {
border: none;
border-bottom: 1px dashed #cccccc;
}
table {
padding: 0;
border-collapse: collapse;
}
table tr th {
font-weight: bold;
border: 1px solid #cccccc;
text-align: left;
padding: 6px 13px;
}
table tr td {
border: 1px solid #cccccc;
padding: 6px 13px;
}
table tr:nth-child(2n) {
background-color: #f8f8f8;
}
table * {
word-wrap: break-word;
word-break: break-all;
}
pre {
background-color: #f8f8f8;
border: 1px solid #cccccc;
font-size: 13px;
line-height: 19px;
overflow: auto;
padding: 6px 10px;
border-radius: 3px;
}
pre code {
margin: 0;
padding: 0;
white-space: pre;
border: none;
background: transparent;
}
code,
tt {
margin: 0 2px;
padding: 0 5px;
white-space: nowrap;
border: 1px solid #eaeaea;
background-color: #f8f8f8;
border-radius: 3px;
}
div.sourceCode {
page-break-before: avoid;
page-break-inside: avoid;
}
li * {
margin: 0;
}
blockquote {
border-left: 4px solid #dddddd;
padding: 0 15px;
color: #777777;
}
blockquote > :first-child {
margin-top: 0;
}
blockquote > :last-child {
margin-bottom: 0;
}
code.comment-code {
display: block;
white-space: pre;
}
table {
overflow: auto;
display: block;
}
@media screen and (max-width: 1300px) and (min-width: 1001px) {
#TOC {
font-size: 80%;
width: 200px;
}
body {
margin-left: 200px;
}
}
@media screen and (max-width: 1100px) and (min-width: 1001px) {
#TOC {
font-size: 60%;
width: 150px;
}
body {
margin-left: 150px;
}
table tr td {
font-size: 80%;
padding: 3px 6px;
}
}
@media all and (max-width: 1000px) {
table tr td {
font-size: 80%;
padding: 3px 6px;
}
}
@media all and (max-width: 800px) {
table tr td {
font-size: 70%;
}
}
@media all and (max-width: 600px) {
table tr td {
font-size: 60%;
}
}
</style>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<header id="title-block-header">
<h1 class="title">Javaコーディング規約</h1>
<p class="author">Future Enterprise Coding Standards</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#はじめに"><span class="toc-section-number">1</span> はじめに</a></li>
<li><a href="#規約の重要性"><span class="toc-section-number">2</span> 規約の重要性</a>
<ul>
<li><a href="#コーディングの心得"><span class="toc-section-number">2.1</span> コーディングの心得</a>
<ul>
<li><a href="#見やすさを重視せよ"><span class="toc-section-number">2.1.1</span> 見やすさを重視せよ</a></li>
<li><a href="#ネーミングはわかりやすく"><span class="toc-section-number">2.1.2</span> ネーミングはわかりやすく</a></li>
<li><a href="#サンプルを鵜呑みにしない"><span class="toc-section-number">2.1.3</span> サンプルを鵜呑みにしない</a></li>
<li><a href="#同じコードは二度書かない"><span class="toc-section-number">2.1.4</span> 同じコードは二度書かない</a></li>
<li><a href="#役割は一つに"><span class="toc-section-number">2.1.5</span> 役割は一つに</a></li>
</ul></li>
</ul></li>
<li><a href="#ネーミング規約"><span class="toc-section-number">3</span> ネーミング規約</a>
<ul>
<li><a href="#全般"><span class="toc-section-number">3.1</span> 全般</a></li>
<li><a href="#パッケージ"><span class="toc-section-number">3.2</span> パッケージ</a></li>
<li><a href="#クラス"><span class="toc-section-number">3.3</span> クラス</a></li>
<li><a href="#メソッド"><span class="toc-section-number">3.4</span> メソッド</a></li>
<li><a href="#引数"><span class="toc-section-number">3.5</span> 引数</a></li>
<li><a href="#変数全般"><span class="toc-section-number">3.6</span> 変数全般</a></li>
<li><a href="#ローカル変数"><span class="toc-section-number">3.7</span> ローカル変数</a></li>
<li><a href="#enum"><span class="toc-section-number">3.8</span> Enum</a></li>
</ul></li>
<li><a href="#コーディング規約"><span class="toc-section-number">4</span> コーディング規約</a>
<ul>
<li><a href="#全般-1"><span class="toc-section-number">4.1</span> 全般</a></li>
<li><a href="#フォーマット"><span class="toc-section-number">4.2</span> フォーマット</a></li>
<li><a href="#コメント"><span class="toc-section-number">4.3</span> コメント</a></li>
<li><a href="#インポート"><span class="toc-section-number">4.4</span> インポート</a></li>
<li><a href="#コンストラクタ"><span class="toc-section-number">4.5</span> コンストラクタ</a></li>
<li><a href="#メソッド-1"><span class="toc-section-number">4.6</span> メソッド</a></li>
<li><a href="#クラスメソッド"><span class="toc-section-number">4.7</span> クラスメソッド</a></li>
<li><a href="#変数全般-1"><span class="toc-section-number">4.8</span> 変数全般</a></li>
<li><a href="#定数"><span class="toc-section-number">4.9</span> 定数</a></li>
<li><a href="#インスタンス変数"><span class="toc-section-number">4.10</span> インスタンス変数</a></li>
<li><a href="#クラス変数"><span class="toc-section-number">4.11</span> クラス変数</a></li>
<li><a href="#ローカル変数-1"><span class="toc-section-number">4.12</span> ローカル変数</a></li>
<li><a href="#引数-1"><span class="toc-section-number">4.13</span> 引数</a></li>
<li><a href="#継承"><span class="toc-section-number">4.14</span> 継承</a></li>
<li><a href="#インナークラス"><span class="toc-section-number">4.15</span> インナークラス</a></li>
<li><a href="#メンバー順序"><span class="toc-section-number">4.16</span> メンバー順序</a></li>
<li><a href="#インスタンス"><span class="toc-section-number">4.17</span> インスタンス</a></li>
<li><a href="#制御構造"><span class="toc-section-number">4.18</span> 制御構造</a></li>
<li><a href="#文字列操作"><span class="toc-section-number">4.19</span> 文字列操作</a></li>
<li><a href="#数値"><span class="toc-section-number">4.20</span> 数値</a></li>
<li><a href="#日付"><span class="toc-section-number">4.21</span> 日付</a></li>
<li><a href="#三項演算子"><span class="toc-section-number">4.22</span> 三項演算子</a></li>
<li><a href="#switch-式"><span class="toc-section-number">4.23</span> switch 式</a></li>
<li><a href="#switch-文"><span class="toc-section-number">4.24</span> switch 文</a></li>
<li><a href="#コレクション"><span class="toc-section-number">4.25</span> コレクション</a></li>
<li><a href="#ラムダ式メソッド参照コンストラクタ参照"><span class="toc-section-number">4.26</span> ラムダ式・メソッド参照・コンストラクタ参照</a></li>
<li><a href="#実質的-finaleffectively-final"><span class="toc-section-number">4.27</span> 実質的 final(effectively final)</a></li>
<li><a href="#stream-api"><span class="toc-section-number">4.28</span> Stream API</a></li>
<li><a href="#optional"><span class="toc-section-number">4.29</span> Optional</a></li>
<li><a href="#var-local-variable-type-inference"><span class="toc-section-number">4.30</span> var (Local-Variable Type Inference)</a></li>
<li><a href="#レコード"><span class="toc-section-number">4.31</span> レコード</a></li>
<li><a href="#テキストブロック"><span class="toc-section-number">4.32</span> テキストブロック</a></li>
<li><a href="#ストリームinputstream-outputstream"><span class="toc-section-number">4.33</span> ストリーム(InputStream OutputStream)</a></li>
<li><a href="#リソースの解放"><span class="toc-section-number">4.34</span> リソースの解放</a></li>
<li><a href="#例外"><span class="toc-section-number">4.35</span> 例外</a></li>
<li><a href="#ガベージコレクション"><span class="toc-section-number">4.36</span> ガベージコレクション</a></li>
</ul></li>
<li><a href="#コメント規約"><span class="toc-section-number">5</span> コメント規約</a>
<ul>
<li><a href="#よいコメントの鉄則"><span class="toc-section-number">5.1</span> よいコメントの鉄則</a></li>
<li><a href="#java-コメント3-種類の使い分け"><span class="toc-section-number">5.2</span> Java コメント(3 種類)の使い分け</a></li>
</ul></li>
<li><a href="#パフォーマンス"><span class="toc-section-number">6</span> パフォーマンス</a>
<ul>
<li><a href="#stream-api-1"><span class="toc-section-number">6.1</span> Stream API</a></li>
<li><a href="#ラムダ式メソッド参照コンストラクタ参照-1"><span class="toc-section-number">6.2</span> ラムダ式・メソッド参照・コンストラクタ参照</a></li>
<li><a href="#文字列連結"><span class="toc-section-number">6.3</span> 文字列連結</a>
<ul>
<li><a href="#文字列連結繰り返し"><span class="toc-section-number">6.3.1</span> 文字列連結(繰り返し)</a></li>
<li><a href="#文字列連結定数"><span class="toc-section-number">6.3.2</span> 文字列連結(定数)</a></li>
</ul></li>
<li><a href="#list-の種類"><span class="toc-section-number">6.4</span> List の種類</a></li>
<li><a href="#bigdecimal-の-zero-との比較"><span class="toc-section-number">6.5</span> BigDecimal の ZERO との比較</a></li>
</ul></li>
<li><a href="#license"><span class="toc-section-number">7</span> License</a></li>
</ul>
</nav>
<p><page-title></page-title></p>
<p>本コーディング規約は、世の中のシステム開発プロジェクトのために無償で提供致します。<br />
ただし、掲載内容および利用に際して発生した問題、それに伴う損害については、フューチャー株式会社は一切の責務を負わないものとします。<br />
また、掲載している情報は予告なく変更することがございますので、あらかじめご了承下さい。</p>
<section id="はじめに" data-number="1">
<h1 data-number="1"><span class="header-section-number">1</span> はじめに</h1>
<p>一般に利用・参照されている Java コーディング規約やガイドラインを以下に示す。本規約の作成においても、下記規約類を参照・抜粋している。</p>
<table>
<colgroup>
<col style="width: 18%"></col>
<col style="width: 6%"></col>
<col style="width: 74%"></col>
</colgroup>
<thead>
<tr class="header">
<th>規約</th>
<th>著作者</th>
<th>URL</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Code Conventions for the Java Programming Language</td>
<td>Sun Microsystems</td>
<td><a href="http://www.oracle.com/technetwork/java/codeconvtoc-136057.html">http://www.oracle.com/technetwork/java/codeconvtoc-136057.html</a></td>
</tr>
<tr class="even">
<td>Writing Robust Java Code</td>
<td>Scott W. Ambler</td>
<td><a href="http://www.ambysoft.com/downloads/javaCodingStandards.pdf">http://www.ambysoft.com/downloads/javaCodingStandards.pdf</a></td>
</tr>
<tr class="odd">
<td>オブジェクト倶楽部版 Java コーディング標準</td>
<td>オブジェクト倶楽部</td>
<td><a href="http://objectclub.jp/community/codingstandard/CodingStd.pdf">http://objectclub.jp/community/codingstandard/CodingStd.pdf</a></td>
</tr>
<tr class="even">
<td>電通国際情報際サービス版 Java コーディング規約 2004</td>
<td>電通国際情報サービス</td>
<td><a href="http://objectclub.jp/community/codingstandard/JavaCodingStandard2004.pdf">http://objectclub.jp/community/codingstandard/JavaCodingStandard2004.pdf</a></td>
</tr>
<tr class="odd">
<td>JJGuideline (Java - J2EE Conventions and Guidelines)</td>
<td>Stephan.J & JCS Team</td>
<td><a href="http://www.fedict.belgium.be/sites/default/files/downloads/Java_J2EE_conventions_and_guidelines_EN.pdf">http://www.fedict.belgium.be/sites/default/files/downloads/Java_J2EE_conventions_and_guidelines_EN.pdf</a></td>
</tr>
<tr class="even">
<td>Google Java Style (非公式和訳)</td>
<td>Google</td>
<td><a href="https://kazurof.github.io/GoogleJavaStyle-ja/">https://kazurof.github.io/GoogleJavaStyle-ja/</a></td>
</tr>
<tr class="odd">
<td>Acroquest Technology Java コーディング規約</td>
<td>Acroquest Technology</td>
<td><a href="https://www.acroquest.co.jp/webworkshop/javacordingrule/Acroquest_JavaCodingStandard_6_7.pdf">https://www.acroquest.co.jp/webworkshop/javacordingrule/Acroquest_JavaCodingStandard_6_7.pdf</a><br>※現在は削除されています</td>
</tr>
</tbody>
</table>
<p>※ Sun Microsystems の規約は Java 草創期から一応の標準という位置づけだったが、オブジェクト指向、及び、その開発環境の普及・発展によって、設計やコーディングにおいて、直接的に有用な知識や豊富な指針を含むような優れた規約や、ツールなどによる機械的な準拠チェックと連携する規約が普及してきている。</p>
</section>
<section id="規約の重要性" data-number="2">
<h1 data-number="2"><span class="header-section-number">2</span> 規約の重要性</h1>
<p>標準としての規約を定義し、遵守することの重要性を以下に示す。</p>
<ul>
<li>ソフトウェアメンテナンスにおける、可読性・保守性・拡張性の向上</li>
<li>問題を起こしやすい実装を未然に回避することによる、品質・生産性の向上</li>
<li>標準規約を通して得られる一般的な実装知識やノウハウ(=学習効果)</li>
</ul>
<section id="コーディングの心得" data-number="2.1">
<h2 data-number="2.1"><span class="header-section-number">2.1</span> コーディングの心得</h2>
<p>長いプログラムを記述すること(ステップ数)によって生産性が評価されたのは、過去の時代の出来事である。現在は、クラスやメソッドの役割が明確で、ロジックが読みやすく、保守性に優れたプログラムを記述することが評価される。コーディング規約は、コードの書き方に関する一種のパターンと考えることもでき、コードの保守性を向上させる具体的な方法を示している。したがって、規約の一つ一つの意図を理解し、守ることが重要になる。しかし、保守性に優れたコードを作成するためには、コーディング規約を守ることに加えて、良いコードを記述するための基本的な心構えをしっかり心に留めておく必要がある。以下では、その心得について述べる。</p>
<p>【コーディングの心得 5 か条】</p>
<ol type="1">
<li>見やすさを重視せよ</li>
<li>ネーミングはわかりやすく</li>
<li>サンプルを鵜呑みにしない</li>
<li>同じコードを二度書かない</li>
<li>役割は一つに</li>
</ol>
<section id="見やすさを重視せよ" data-number="2.1.1">
<h3 data-number="2.1.1"><span class="header-section-number">2.1.1</span> 見やすさを重視せよ</h3>
<p>「良いコード」の基本は、「他の人が読んでもわかりやすいと感じられるコード」。コードの見やすさは、フォーマットはもちろん、ロジックの簡潔さや API の常識的な使い方などから生まれる。コーディングにあたっては、常に他の人の視点を意識しながら、見やすさに気を配って記述する必要がある。例えば、自分で記述したコードであっても、しばらくたってから読み返してみると理解に時間がかかった経験は誰にもあるはず。「3 日前に書いたコードは他人のコードと同じ」ということもよく言われる。見やすさを重視することは、他の人のためだけでなく自分のためにもなる。コードを読んでもすぐに理解できないような実装は、再考(リファクタリング)の必要がある。</p>
</section>
<section id="ネーミングはわかりやすく" data-number="2.1.2">
<h3 data-number="2.1.2"><span class="header-section-number">2.1.2</span> ネーミングはわかりやすく</h3>
<p>コーディングでは、様々な変数やメソッドなどにネーミング(名前付け)する必要がある。ネーミングとは、本来、その対象の本質を表すような名前を考える作業である。大変難易度の高い作業だが、一方で適当に行ってもコードの動作は変わらないため、人によっては手を抜きがちとなる。しかし、ネーミングの良し悪しは、コードの可読性に非常に大きな影響を及ぼす。例えば、「C0001」というクラス名があるとする。これでは、何を表すクラスなのかすぐにはわからないだろう。また、「int p = 5000;」という記述があるとする。プログラマに聞くと、変数名 p は価格(Price)の略だと言うのだが、それならば略さずに、「int price = 5000;」としたほうが分かりやすいはずである。「ネーミングはわかりやすく」の背景には、読んで内容が理解できるという意味で、文章のようなプログラミングを行う、という考え方に基づく。</p>
</section>
<section id="サンプルを鵜呑みにしない" data-number="2.1.3">
<h3 data-number="2.1.3"><span class="header-section-number">2.1.3</span> サンプルを鵜呑みにしない</h3>
<p>サンプルコードを活用すること自体は、著作権等を侵害しなければ問題ない。問題なのは、その内容や背景を理解しないまま、サンプルコードだけを鵜呑みにして、「おまじない」として表面的に適用してしまうことである。コードを「おまじない」ととらえていては、サンプルコードの間違いを気づかないまま適用してしまうこともある。例えば、ストリームのクローズ処理を行っていないサンプルコードであっても、それに気づかずに自分のコードに適用してしまい、後で思わぬ障害を引き起こすという可能性がある。サンプルコードは、そこで説明する内容に絞ったコードが多いため、このような例はよく見られる。また、サンプルコードをそのまま適用した結果、自分が記述すべきコードには必要のないコードが含まれてしまう場合もある。その場合、コードの可読性を下げる原因となる。自分のコードは、自分で深く理解して記述すべきである。</p>
</section>
<section id="同じコードは二度書かない" data-number="2.1.4">
<h3 data-number="2.1.4"><span class="header-section-number">2.1.4</span> 同じコードは二度書かない</h3>
<p>コードをコピー・ペーストしていませんか?コピー・ペーストしてしまうと、何らかの修正をする際に、全ての個所に同じ修正をする羽目になる。同じコードが現れるようならまとめて一つにし、外に出してコールするような書き方にすべきである。同じコードをまとめる作業は、どちらかといえば、コーディング時よりリファクタリング(ソフトウェアの外部的振る舞いを変更せずに内部構造を改善する作業)で行われることが多い。しかし、コーディング時からできるだけ気をつけておきたいことでもある。</p>
</section>
<section id="役割は一つに" data-number="2.1.5">
<h3 data-number="2.1.5"><span class="header-section-number">2.1.5</span> 役割は一つに</h3>
<p>メソッドの役割が明確で、かつ 1 つであれば単体テストが行いやすくなる。つまり、コードの「試験性」が高まる。また、役割が一つであれば、後でコードを変更する際に修正箇所がわかりやすいため、障害修正に要する時間が短くなる。つまり、コードの「保守性」があがることになる。例えば、「チェックをして実行する」機能を実現するために、checkAndDo()メソッドが存在したとする。この場合、このメソッドは check()メソッドと do()メソッドに分割すべきである。なぜなら、checkAndDo()メソッドの check()ロジックに誤りがあった場合、do()メソッドに書かれる内容まで把握する必要が生じるためである。分割してあれば、check()メソッドだけの変更で済む。このことはクラスの設計にもあてはまる。</p>
</section>
</section>
</section>
<section id="ネーミング規約" data-number="3">
<h1 data-number="3"><span class="header-section-number">3</span> ネーミング規約</h1>
<section id="全般" data-number="3.1">
<h2 data-number="3.1"><span class="header-section-number">3.1</span> 全般</h2>
<ul>
<li><p>大文字・小文字の違いで名前を区別しない。</p>
<p>良い例:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb1-1"><a href="#cb1-1"></a><span class="kw">private</span> <span class="dt">int</span> carNumber;</span>
<span id="cb1-2"><a href="#cb1-2"></a><span class="kw">private</span> <span class="dt">int</span> trainNumber;</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb2-1"><a href="#cb2-1"></a><span class="kw">private</span> <span class="dt">int</span> num;</span>
<span id="cb2-2"><a href="#cb2-2"></a><span class="kw">private</span> <span class="dt">int</span> Num;</span></code></pre></div></li>
</ul>
</section>
<section id="パッケージ" data-number="3.2">
<h2 data-number="3.2"><span class="header-section-number">3.2</span> パッケージ</h2>
<ul>
<li>パッケージ名はすべて小文字にする</li>
<li>パッケージ名は意味のある名前にする</li>
<li>サブパッケージ名の重複は可能</li>
</ul>
</section>
<section id="クラス" data-number="3.3">
<h2 data-number="3.3"><span class="header-section-number">3.3</span> クラス</h2>
<ul>
<li><p>クラス名は単語の先頭を大文字にする<br />
良い例:</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb3-1"><a href="#cb3-1"></a><span class="kw">public</span> <span class="kw">class</span> Entry {</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb4-1"><a href="#cb4-1"></a><span class="kw">public</span> <span class="kw">class</span> entry {</span></code></pre></div></li>
<li><p>インターフェース名、Enum 名、Record 名はクラス名に準ずる</p></li>
</ul>
</section>
<section id="メソッド" data-number="3.4">
<h2 data-number="3.4"><span class="header-section-number">3.4</span> メソッド</h2>
<ul>
<li><p>コンストラクタと同じ名前のメソッドはつくらない</p></li>
<li><p>メソッド名は区切りのみ大文字にする<br />
良い例:</p>
<div class="sourceCode" id="cb5"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb5-1"><a href="#cb5-1"></a><span class="kw">public</span> <span class="bu">String</span> <span class="fu">getName</span>() {</span>
<span id="cb5-2"><a href="#cb5-2"></a> <span class="co">//・・・</span></span>
<span id="cb5-3"><a href="#cb5-3"></a>}</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb6"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb6-1"><a href="#cb6-1"></a><span class="kw">public</span> <span class="bu">String</span> <span class="fu">getname</span>() {</span>
<span id="cb6-2"><a href="#cb6-2"></a> <span class="co">//・・・</span></span>
<span id="cb6-3"><a href="#cb6-3"></a>}</span>
<span id="cb6-4"><a href="#cb6-4"></a><span class="kw">public</span> <span class="bu">String</span> <span class="fu">GETNAME</span>() {</span>
<span id="cb6-5"><a href="#cb6-5"></a> <span class="co">//・・・</span></span>
<span id="cb6-6"><a href="#cb6-6"></a>}</span></code></pre></div></li>
<li><p>変換メソッド名は「“<code>to</code>”+オブジェクト名」にする<br />
良い例:</p>
<div class="sourceCode" id="cb7"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb7-1"><a href="#cb7-1"></a><span class="kw">public</span> <span class="bu">String</span> <span class="fu">toString</span>() {</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb8"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb8-1"><a href="#cb8-1"></a><span class="kw">public</span> <span class="bu">String</span> <span class="fu">string</span>() {</span></code></pre></div></li>
<li><p>ゲッターメソッド名は「“<code>get</code>”+属性名」にする<br />
型が<code>boolean</code>の場合は「“<code>is</code>”+属性名」にする</p></li>
<li><p>セッターメソッド名は「“<code>set</code>”+属性名」にする</p></li>
<li><p><code>boolean</code>変数を返すメソッド名は<code>true</code>/<code>false</code>の状態がわかるようにする</p>
<p>良い例:</p>
<div class="sourceCode" id="cb9"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb9-1"><a href="#cb9-1"></a><span class="kw">public</span> <span class="dt">boolean</span> <span class="fu">isAsleep</span>() {</span>
<span id="cb9-2"><a href="#cb9-2"></a>}</span>
<span id="cb9-3"><a href="#cb9-3"></a><span class="kw">public</span> <span class="dt">boolean</span> <span class="fu">exists</span>() {</span>
<span id="cb9-4"><a href="#cb9-4"></a>}</span>
<span id="cb9-5"><a href="#cb9-5"></a><span class="kw">public</span> <span class="dt">boolean</span> <span class="fu">hasExpired</span>() {</span>
<span id="cb9-6"><a href="#cb9-6"></a>}</span></code></pre></div></li>
</ul>
</section>
<section id="引数" data-number="3.5">
<h2 data-number="3.5"><span class="header-section-number">3.5</span> 引数</h2>
<ul>
<li><p>メソッドのパラメータ名とインスタンス変数名を一緒にしない<br />
ただし、アクセサメソッドやコンストラクタなど、統合開発環境の機能により自動生成するものに関しては可とする。<br />
アンダースコア <code>_</code> をつけての区別は原則禁止とする。</p>
<p>良い例:</p>
<div class="sourceCode" id="cb10"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb10-1"><a href="#cb10-1"></a><span class="kw">public</span> <span class="dt">double</span> <span class="fu">calc</span>(<span class="dt">double</span> rate) {</span>
<span id="cb10-2"><a href="#cb10-2"></a> <span class="kw">return</span> <span class="kw">this</span>.<span class="fu">value</span> * rate;</span>
<span id="cb10-3"><a href="#cb10-3"></a>}</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb11"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb11-1"><a href="#cb11-1"></a><span class="kw">public</span> <span class="dt">double</span> <span class="fu">calc</span>(<span class="dt">double</span> value) {</span>
<span id="cb11-2"><a href="#cb11-2"></a> <span class="kw">return</span> <span class="kw">this</span>.<span class="fu">value</span> * value;</span>
<span id="cb11-3"><a href="#cb11-3"></a>}</span>
<span id="cb11-4"><a href="#cb11-4"></a></span>
<span id="cb11-5"><a href="#cb11-5"></a><span class="kw">public</span> <span class="dt">double</span> <span class="fu">calc</span>(<span class="dt">double</span> _value) {</span>
<span id="cb11-6"><a href="#cb11-6"></a> <span class="kw">return</span> <span class="kw">this</span>.<span class="fu">value</span> * _value;</span>
<span id="cb11-7"><a href="#cb11-7"></a>}</span></code></pre></div></li>
</ul>
</section>
<section id="変数全般" data-number="3.6">
<h2 data-number="3.6"><span class="header-section-number">3.6</span> 変数全般</h2>
<ul>
<li><p><code>boolean</code>変数は<code>true</code>/<code>false</code> の状態がわかるようにする</p>
<p>良い例:</p>
<div class="sourceCode" id="cb12"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb12-1"><a href="#cb12-1"></a><span class="kw">private</span> <span class="dt">boolean</span> isOpen;</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb13"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb13-1"><a href="#cb13-1"></a><span class="kw">private</span> <span class="dt">boolean</span> flag;</span></code></pre></div></li>
<li><p>定数は全て<code>static final</code>とし、すべて大文字、区切りは“<code>_</code>”</p>
<p>良い例:</p>
<div class="sourceCode" id="cb14"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb14-1"><a href="#cb14-1"></a><span class="kw">private</span> <span class="dt">static</span> <span class="dt">final</span> <span class="bu">String</span> SYSTEM_NAME = <span class="st">"販売管理システム"</span>;</span></code></pre></div></li>
<li><p>変数名は小文字とし、単語の区切りのみ大文字にする</p>
<p>良い例:</p>
<div class="sourceCode" id="cb15"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb15-1"><a href="#cb15-1"></a><span class="kw">private</span> <span class="bu">String</span> thisIsString;</span></code></pre></div>
<p>変数名に固有名詞が含まれる場合、先頭をのぞき、単語の区切り以外に大文字を使用してもよい</p>
<p>良い例:</p>
<div class="sourceCode" id="cb16"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb16-1"><a href="#cb16-1"></a><span class="kw">private</span> <span class="bu">String</span> thisIsIPAddress;</span></code></pre></div></li>
</ul>
</section>
<section id="ローカル変数" data-number="3.7">
<h2 data-number="3.7"><span class="header-section-number">3.7</span> ローカル変数</h2>
<ul>
<li><p>スコープが狭い変数名は省略した名前でもよい<br />
良い例:</p>
<div class="sourceCode" id="cb17"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb17-1"><a href="#cb17-1"></a><span class="kw">if</span> (・・・) {</span>
<span id="cb17-2"><a href="#cb17-2"></a> <span class="bu">String</span> s = <span class="st">"・・・・"</span>;</span>
<span id="cb17-3"><a href="#cb17-3"></a> <span class="co">//変数sを利用した処理 数行</span></span>
<span id="cb17-4"><a href="#cb17-4"></a>}</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb18"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb18-1"><a href="#cb18-1"></a><span class="bu">String</span> s = <span class="st">"・・・・"</span>;</span>
<span id="cb18-2"><a href="#cb18-2"></a><span class="kw">if</span> (・・・) {</span>
<span id="cb18-3"><a href="#cb18-3"></a> <span class="co">//変数sを利用した処理</span></span>
<span id="cb18-4"><a href="#cb18-4"></a>}</span>
<span id="cb18-5"><a href="#cb18-5"></a>・・・</span>
<span id="cb18-6"><a href="#cb18-6"></a><span class="kw">if</span> (・・・) {</span>
<span id="cb18-7"><a href="#cb18-7"></a> <span class="co">//変数sを利用した処理</span></span>
<span id="cb18-8"><a href="#cb18-8"></a>}</span></code></pre></div>
<p>変数<code>s</code>の利用範囲が広いので役割が明確になる変数名に変更する。</p></li>
<li><p>for 文のループカウンタは、ネストごとに“<code>i</code>”,“<code>j</code>”,“<code>k</code>”・・・を使う</p></li>
</ul>
</section>
<section id="enum" data-number="3.8">
<h2 data-number="3.8"><span class="header-section-number">3.8</span> Enum</h2>
<ul>
<li><p>Enum 名はクラス名と同じく、単語の先頭を大文字にする</p></li>
<li><p>列挙定数は定数と同じく、すべて大文字、区切りは“<code>_</code>”</p>
<p>良い例:</p>
<div class="sourceCode" id="cb19"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb19-1"><a href="#cb19-1"></a><span class="kw">enum</span> Season {</span>
<span id="cb19-2"><a href="#cb19-2"></a> WINTER,</span>
<span id="cb19-3"><a href="#cb19-3"></a> SPRING,</span>
<span id="cb19-4"><a href="#cb19-4"></a> SUMMER,</span>
<span id="cb19-5"><a href="#cb19-5"></a> FALL</span>
<span id="cb19-6"><a href="#cb19-6"></a>}</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb20"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb20-1"><a href="#cb20-1"></a><span class="kw">enum</span> Season {</span>
<span id="cb20-2"><a href="#cb20-2"></a> winter,</span>
<span id="cb20-3"><a href="#cb20-3"></a> spring,</span>
<span id="cb20-4"><a href="#cb20-4"></a> summer,</span>
<span id="cb20-5"><a href="#cb20-5"></a> fall</span>
<span id="cb20-6"><a href="#cb20-6"></a>}</span></code></pre></div></li>
</ul>
</section>
</section>
<section id="コーディング規約" data-number="4">
<h1 data-number="4"><span class="header-section-number">4</span> コーディング規約</h1>
<section id="全般-1" data-number="4.1">
<h2 data-number="4.1"><span class="header-section-number">4.1</span> 全般</h2>
<ul>
<li><p>原則としてオブジェクトの参照にはインターフェースを利用する<br />
オブジェクトを参照する際は、そのオブジェクトの実装クラスを用いて宣言できるが、実装クラスに適切なインターフェースが存在している場合は、必ずインターフェースを用いて宣言すること。</p>
<p>良い例:</p>
<div class="sourceCode" id="cb21"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb21-1"><a href="#cb21-1"></a><span class="bu">List</span><Entry> list = <span class="kw">new</span> <span class="bu">ArrayList</span><>();</span>
<span id="cb21-2"><a href="#cb21-2"></a><span class="bu">Map</span><<span class="bu">String</span>, <span class="bu">String</span>> map = <span class="kw">new</span> <span class="bu">HashMap</span><>();</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb22"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb22-1"><a href="#cb22-1"></a><span class="bu">ArrayList</span><Entry> list = <span class="kw">new</span> <span class="bu">ArrayList</span><>();</span>
<span id="cb22-2"><a href="#cb22-2"></a><span class="bu">HashMap</span><<span class="bu">String</span>, <span class="bu">String</span>> map = <span class="kw">new</span> <span class="bu">HashMap</span><>();</span></code></pre></div></li>
<li><p>推奨されない API を使用しない<br />
アノテーション<code>@Deprecated</code>で指定されたメソッドは利用しないこと。</p></li>
<li><p>使われないコードは書かない</p></li>
<li><p>宣言は適切な権限で行うこと(<code>public</code>, <code>protected</code>, <code>private</code>)</p></li>
<li><p><code>final</code> を適切に利用する<br />
継承されないクラス、オーバーライドされないメソッド、値の変わらない変数(つまり定数)等、変化のないもの/変化させたくないものについては<code>final</code> で宣言する。</p>
<p>良い例:</p>
<div class="sourceCode" id="cb23"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb23-1"><a href="#cb23-1"></a><span class="co">//継承されないクラス</span></span>
<span id="cb23-2"><a href="#cb23-2"></a><span class="kw">public</span> <span class="dt">final</span> <span class="kw">class</span> CalculateUtils {</span>
<span id="cb23-3"><a href="#cb23-3"></a> <span class="co">//・・・</span></span>
<span id="cb23-4"><a href="#cb23-4"></a>}</span>
<span id="cb23-5"><a href="#cb23-5"></a></span>
<span id="cb23-6"><a href="#cb23-6"></a><span class="co">//値の変わらない変数(定数)</span></span>
<span id="cb23-7"><a href="#cb23-7"></a><span class="kw">private</span> <span class="dt">static</span> <span class="dt">final</span> <span class="bu">String</span> MESSAGE = <span class="st">"・・・"</span>;</span>
<span id="cb23-8"><a href="#cb23-8"></a></span>
<span id="cb23-9"><a href="#cb23-9"></a><span class="co">//オーバーライドされないメソッド</span></span>
<span id="cb23-10"><a href="#cb23-10"></a><span class="kw">public</span> <span class="dt">final</span> <span class="dt">int</span> <span class="fu">sum</span>(<span class="co">/*変化させたくない値*/</span><span class="dt">final</span> <span class="dt">int</span><span class="kw">... </span>values) {</span>
<span id="cb23-11"><a href="#cb23-11"></a> <span class="dt">int</span> sumValue = <span class="dv">0</span>;</span>
<span id="cb23-12"><a href="#cb23-12"></a> <span class="kw">for</span> (<span class="co">/*変化させたくない値*/</span><span class="dt">final</span> <span class="dt">int</span> value : values) {</span>
<span id="cb23-13"><a href="#cb23-13"></a> sumValue += value;</span>
<span id="cb23-14"><a href="#cb23-14"></a> }</span>
<span id="cb23-15"><a href="#cb23-15"></a> <span class="kw">return</span> sumValue;</span>
<span id="cb23-16"><a href="#cb23-16"></a>}</span></code></pre></div></li>
</ul>
</section>
<section id="フォーマット" data-number="4.2">
<h2 data-number="4.2"><span class="header-section-number">4.2</span> フォーマット</h2>
<ul>
<li><p>インデントは空白文字 4 文字分の Tab を使用する</p></li>
<li><p>長すぎる行は避ける</p></li>
<li><p><code>{</code> の後にステートメントを記述しない<br />
良い例:</p>
<div class="sourceCode" id="cb24"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb24-1"><a href="#cb24-1"></a><span class="kw">if</span> (s == <span class="kw">null</span>) {</span>
<span id="cb24-2"><a href="#cb24-2"></a> <span class="kw">return</span> <span class="dv">0</span>;</span>
<span id="cb24-3"><a href="#cb24-3"></a>}</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb25"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb25-1"><a href="#cb25-1"></a><span class="kw">if</span> (s == <span class="kw">null</span>) {<span class="kw">return</span> <span class="dv">0</span>;}</span></code></pre></div></li>
<li><p>1 行に 2 つ以上のステートメントを記述しない<br />
悪い例:</p>
<div class="sourceCode" id="cb26"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb26-1"><a href="#cb26-1"></a>} <span class="kw">catch</span> (<span class="bu">Exception</span> e) {</span>
<span id="cb26-2"><a href="#cb26-2"></a> log.<span class="fu">error</span>(<span class="st">"Error"</span>, e);<span class="kw">return</span> <span class="kw">null</span>;</span>
<span id="cb26-3"><a href="#cb26-3"></a>}</span></code></pre></div></li>
<li><p>カンマの後には空白文字を<br />
良い例:</p>
<div class="sourceCode" id="cb27"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb27-1"><a href="#cb27-1"></a><span class="fu">process</span>(x, y, z);</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb28"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb28-1"><a href="#cb28-1"></a><span class="fu">process</span>(x,y,z);</span></code></pre></div></li>
<li><p>代入演算子( <code>=</code> , <code>+=</code> , <code>-=</code> , …)の前後には空白文字を挿入する<br />
良い例:</p>
<div class="sourceCode" id="cb29"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb29-1"><a href="#cb29-1"></a><span class="dt">int</span> a = x;</span>
<span id="cb29-2"><a href="#cb29-2"></a>a += <span class="dv">10</span>;</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb30"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb30-1"><a href="#cb30-1"></a><span class="dt">int</span> a=x;</span>
<span id="cb30-2"><a href="#cb30-2"></a>a+= <span class="dv">10</span>;</span></code></pre></div></li>
<li><p>for 文内のセミコロンの後には空白文字を挿入する<br />
良い例:</p>
<div class="sourceCode" id="cb31"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb31-1"><a href="#cb31-1"></a><span class="kw">for</span> (<span class="dt">int</span> i = <span class="dv">0</span>; i < array.<span class="fu">length</span>; i++) {</span>
<span id="cb31-2"><a href="#cb31-2"></a> <span class="co">//・・・</span></span>
<span id="cb31-3"><a href="#cb31-3"></a>}</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb32"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb32-1"><a href="#cb32-1"></a><span class="kw">for</span> (<span class="dt">int</span> i = <span class="dv">0</span>;i < array.<span class="fu">length</span> ;i++) {</span>
<span id="cb32-2"><a href="#cb32-2"></a> <span class="co">//・・・</span></span>
<span id="cb32-3"><a href="#cb32-3"></a>}</span></code></pre></div></li>
<li><p><code>++</code> や <code>--</code> とオペランドの間には空白文字を入れない<br />
良い例:</p>
<div class="sourceCode" id="cb33"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb33-1"><a href="#cb33-1"></a>i++;</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb34"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb34-1"><a href="#cb34-1"></a>i ++;</span></code></pre></div></li>
<li><p>ビット演算子( <code>|</code> 、 <code>&</code> 、 <code>^</code> 、 <code><<</code> 、 <code>>></code> )の前後には空白文字を挿入する</p></li>
<li><p>論理演算子( <code>||</code> 、<code>&&</code>)の前後には空白文字を挿入する</p></li>
<li><p>関係演算子( <code><</code> 、 <code>></code> 、 <code>>=</code> 、 <code><=</code>、<code>==</code>、 <code>!=</code> )の前後には空白文字を挿入する</p></li>
<li><p>算術演算子( <code>+</code> 、 <code>-</code> 、 <code>*</code> 、 <code>/</code> 、 <code>%</code> )の前後には空白文字を挿入する</p></li>
<li><p>return 文ではカッコを使わない<br />
良い例:</p>
<div class="sourceCode" id="cb35"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb35-1"><a href="#cb35-1"></a><span class="dt">int</span> answer = (a + b + c) * d;</span>
<span id="cb35-2"><a href="#cb35-2"></a><span class="kw">return</span> answer;</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb36"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb36-1"><a href="#cb36-1"></a><span class="kw">return</span> ((a + b + c) * d);</span></code></pre></div></li>
<li><p>if などの条件式で boolean の変数を比較しない</p>
<p>良い例:</p>
<div class="sourceCode" id="cb37"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb37-1"><a href="#cb37-1"></a><span class="kw">if</span> (hasStock)</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb38"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb38-1"><a href="#cb38-1"></a><span class="kw">if</span> (hasStock == <span class="kw">true</span>)</span></code></pre></div></li>
<li><p>不等号の向きは左向き( <code><</code> 、 <code><=</code> )にする<br />
良い例:</p>
<div class="sourceCode" id="cb39"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb39-1"><a href="#cb39-1"></a><span class="kw">if</span> (from <= x && x <= to) {</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb40"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb40-1"><a href="#cb40-1"></a><span class="kw">if</span> (x >= from && x <= to) {</span></code></pre></div></li>
</ul>
</section>
<section id="コメント" data-number="4.3">
<h2 data-number="4.3"><span class="header-section-number">4.3</span> コメント</h2>
<ul>
<li><p>ファイルの先頭への Copyright の表記について<br />
ソースのファイルヘッダにコピーライト標記は法的拘束力がないため、不要とする。<br />
ただし、顧客からの要求があった場合を除く。</p></li>
<li><p>Javadoc コメントには、少なくとも author と version(クラス)、param と return と exception(メソッド)を記述する</p>
<ul>
<li>今後もバージョンアップのリリースが予定されているソースでは、上記に加えて since(バージョン)を記述する</li>
<li><code>@Override</code>のあるメソッドでは、上記に加えて<code>{@Inherit}</code>を記述する</li>
</ul></li>
<li><p>Javadoc クラスヘッダコメントのフォーマットは以下の通り</p>
<p>良い例:</p>
<div class="sourceCode" id="cb41"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb41-1"><a href="#cb41-1"></a><span class="co">/**</span></span>
<span id="cb41-2"><a href="#cb41-2"></a> <span class="co">*</span> Action(or Bean)クラス メニュー名称</span>
<span id="cb41-3"><a href="#cb41-3"></a> <span class="co">*</span></span>
<span id="cb41-4"><a href="#cb41-4"></a> <span class="co">* </span><span class="an">@author </span>姓 名</span>
<span id="cb41-5"><a href="#cb41-5"></a> <span class="co">*</span> <span class="an">@version </span>バージョン YYYY<span class="co">/</span>MM<span class="co">/</span>DD 説明</span>
<span id="cb41-6"><a href="#cb41-6"></a> <span class="co">*/</span></span></code></pre></div></li>
<li><p>コメントは必要なものだけを簡潔に<br />
悪い例:</p>
<div class="sourceCode" id="cb42"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb42-1"><a href="#cb42-1"></a><span class="co">/**</span></span>
<span id="cb42-2"><a href="#cb42-2"></a> <span class="co">*</span> 文字列に変換</span>
<span id="cb42-3"><a href="#cb42-3"></a> <span class="co">*/</span></span>
<span id="cb42-4"><a href="#cb42-4"></a><span class="at">@Override</span></span>
<span id="cb42-5"><a href="#cb42-5"></a><span class="kw">public</span> <span class="bu">String</span> <span class="fu">toString</span>() {</span>
<span id="cb42-6"><a href="#cb42-6"></a></span>
<span id="cb42-7"><a href="#cb42-7"></a><span class="co">/**</span></span>
<span id="cb42-8"><a href="#cb42-8"></a> <span class="co">*</span> コピー</span>
<span id="cb42-9"><a href="#cb42-9"></a> <span class="co">*</span></span>
<span id="cb42-10"><a href="#cb42-10"></a> <span class="co">* </span><span class="an">@return </span>コピーしたインスタンス</span>
<span id="cb42-11"><a href="#cb42-11"></a> <span class="co">*/</span></span>
<span id="cb42-12"><a href="#cb42-12"></a><span class="kw">public</span> Entry <span class="fu">copy</span>() {</span></code></pre></div></li>
<li><p>不要なコメントは記載しない</p>
<ul>
<li>コードからすぐわかること・冗長なコメント</li>
<li>名前の説明<br />
コメントではなくわかりやすい名前を付ける。</li>
<li>別システムで管理している内容<br />
ソースコード管理システム、バグトラッキングシステムで管理している内容はソースコードにコメントで記載する必要はない。
<ul>
<li>コメントアウトされたコード<br />
ソースコード管理システムで管理されている</li>
</ul></li>
</ul></li>
</ul>
</section>
<section id="インポート" data-number="4.4">
<h2 data-number="4.4"><span class="header-section-number">4.4</span> インポート</h2>
<ul>
<li><p><code>java.lang</code>パッケージはインポートしない</p>
<p>悪い例:</p>
<div class="sourceCode" id="cb43"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb43-1"><a href="#cb43-1"></a><span class="kw">import</span><span class="im"> java.lang.String;</span><span class="co">//必要のない記述</span></span></code></pre></div></li>
<li><p>原則として static インポートしない<br />
JUnit の作成やフレームワークとして static インポートが推奨されるような場合は利用してもよい</p></li>
<li><p>原則としてオンデマンドのインポート宣言(type-import-on-demand declaration)(アスタリスク<code>*</code>によるインポート) は行わない</p>
<p>悪い例:</p>
<div class="sourceCode" id="cb44"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb44-1"><a href="#cb44-1"></a><span class="kw">import</span><span class="im"> java.util.*;</span></span></code></pre></div></li>
</ul>
</section>
<section id="コンストラクタ" data-number="4.5">
<h2 data-number="4.5"><span class="header-section-number">4.5</span> コンストラクタ</h2>
<ul>
<li><p>public 宣言していないクラスには<code>public</code>権限のコンストラクタを作らない<br />
良い例:</p>
<div class="sourceCode" id="cb45"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb45-1"><a href="#cb45-1"></a><span class="kw">class</span> Entry {</span>
<span id="cb45-2"><a href="#cb45-2"></a> <span class="co">//・・・</span></span>
<span id="cb45-3"><a href="#cb45-3"></a> <span class="fu">Entry</span>(<span class="dt">int</span> id) {</span>
<span id="cb45-4"><a href="#cb45-4"></a> <span class="co">//・・・</span></span>
<span id="cb45-5"><a href="#cb45-5"></a> }</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb46"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb46-1"><a href="#cb46-1"></a><span class="kw">class</span> Entry {</span>
<span id="cb46-2"><a href="#cb46-2"></a> <span class="co">//・・・</span></span>
<span id="cb46-3"><a href="#cb46-3"></a> <span class="kw">public</span> <span class="fu">Entry</span>(<span class="dt">int</span> id) {</span>
<span id="cb46-4"><a href="#cb46-4"></a> <span class="co">//・・・</span></span>
<span id="cb46-5"><a href="#cb46-5"></a> }</span></code></pre></div></li>
<li><p>インスタンスメンバを持たない(static メンバのみの)クラスは、<code>private</code>権限のコンストラクタを作成する</p></li>
</ul>
</section>
<section id="メソッド-1" data-number="4.6">
<h2 data-number="4.6"><span class="header-section-number">4.6</span> メソッド</h2>
<ul>
<li><p>オーバーライドさせたくないメソッドは<code>final</code>を利用する</p></li>
<li><p>戻り値が配列のメソッドで、戻る配列のサイズが 0 の場合、メソッドを使用するクライアントの余計な null チェックのロジックを回避するため、null ではなく長さゼロの配列を戻すようにする。 良い例:</p>
<div class="sourceCode" id="cb47"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb47-1"><a href="#cb47-1"></a><span class="kw">public</span> <span class="bu">String</span>[] <span class="fu">toArray</span>(<span class="bu">String</span> s) {</span>
<span id="cb47-2"><a href="#cb47-2"></a> <span class="kw">if</span> (s == <span class="kw">null</span> || s.<span class="fu">isEmpty</span>()) {</span>
<span id="cb47-3"><a href="#cb47-3"></a> <span class="kw">return</span> ArrayUtils.<span class="fu">EMPTY_STRING_ARRAY</span>;</span>
<span id="cb47-4"><a href="#cb47-4"></a> }</span>
<span id="cb47-5"><a href="#cb47-5"></a> <span class="kw">return</span> <span class="kw">new</span> <span class="bu">String</span>[] { s };</span>
<span id="cb47-6"><a href="#cb47-6"></a>}</span>
<span id="cb47-7"><a href="#cb47-7"></a></span>
<span id="cb47-8"><a href="#cb47-8"></a><span class="kw">public</span> <span class="bu">List</span><<span class="bu">String</span>> <span class="fu">toList</span>(<span class="bu">String</span> s) {</span>
<span id="cb47-9"><a href="#cb47-9"></a> <span class="kw">if</span> (s == <span class="kw">null</span> || s.<span class="fu">isEmpty</span>()) {</span>
<span id="cb47-10"><a href="#cb47-10"></a> <span class="kw">return</span> <span class="bu">Collections</span>.<span class="fu">emptyList</span>();</span>
<span id="cb47-11"><a href="#cb47-11"></a> }</span>
<span id="cb47-12"><a href="#cb47-12"></a> <span class="kw">return</span> <span class="bu">List</span>.<span class="fu">of</span>(s);</span>
<span id="cb47-13"><a href="#cb47-13"></a>}</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb48"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb48-1"><a href="#cb48-1"></a><span class="kw">public</span> <span class="bu">String</span>[] <span class="fu">toArray</span>(<span class="bu">String</span> s) {</span>
<span id="cb48-2"><a href="#cb48-2"></a> <span class="kw">if</span> (s == <span class="kw">null</span> || s.<span class="fu">isEmpty</span>()) {</span>
<span id="cb48-3"><a href="#cb48-3"></a> <span class="kw">return</span> <span class="kw">null</span>;</span>
<span id="cb48-4"><a href="#cb48-4"></a> }</span>
<span id="cb48-5"><a href="#cb48-5"></a> <span class="kw">return</span> <span class="kw">new</span> <span class="bu">String</span>[] { s };</span>
<span id="cb48-6"><a href="#cb48-6"></a>}</span>
<span id="cb48-7"><a href="#cb48-7"></a></span>
<span id="cb48-8"><a href="#cb48-8"></a><span class="kw">public</span> <span class="bu">List</span><<span class="bu">String</span>> <span class="fu">toList</span>(<span class="bu">String</span> s) {</span>
<span id="cb48-9"><a href="#cb48-9"></a> <span class="kw">if</span> (s == <span class="kw">null</span> || s.<span class="fu">isEmpty</span>()) {</span>
<span id="cb48-10"><a href="#cb48-10"></a> <span class="kw">return</span> <span class="kw">null</span>;</span>
<span id="cb48-11"><a href="#cb48-11"></a> }</span>
<span id="cb48-12"><a href="#cb48-12"></a> <span class="kw">return</span> <span class="bu">List</span>.<span class="fu">of</span>(s);</span>
<span id="cb48-13"><a href="#cb48-13"></a>}</span></code></pre></div></li>
<li><p>メソッドは 1 つの役割にする</p></li>
</ul>
</section>
<section id="クラスメソッド" data-number="4.7">
<h2 data-number="4.7"><span class="header-section-number">4.7</span> クラスメソッド</h2>
<ul>
<li><p>クラスメソッドを利用するときは、クラス名を使って呼び出す<br />
良い例:</p>
<div class="sourceCode" id="cb49"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb49-1"><a href="#cb49-1"></a><span class="dt">int</span> comp = <span class="bu">Integer</span>.<span class="fu">compare</span>(x, y);</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb50"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb50-1"><a href="#cb50-1"></a><span class="bu">Integer</span> a = <span class="co">//</span></span>
<span id="cb50-2"><a href="#cb50-2"></a><span class="dt">int</span> comp = a.<span class="fu">compare</span>(x, y);</span></code></pre></div></li>
</ul>
</section>
<section id="変数全般-1" data-number="4.8">
<h2 data-number="4.8"><span class="header-section-number">4.8</span> 変数全般</h2>
<ul>
<li><p>1 つのステートメントには 1 つの変数宣言<br />
良い例:</p>
<div class="sourceCode" id="cb51"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb51-1"><a href="#cb51-1"></a><span class="co">/**</span> 科目コード <span class="co">*/</span></span>
<span id="cb51-2"><a href="#cb51-2"></a><span class="kw">private</span> <span class="bu">String</span> code;</span>
<span id="cb51-3"><a href="#cb51-3"></a><span class="co">/**</span> 科目名 <span class="co">*/</span></span>
<span id="cb51-4"><a href="#cb51-4"></a><span class="kw">private</span> <span class="bu">String</span> name;</span>
<span id="cb51-5"><a href="#cb51-5"></a><span class="co">/**</span> 科目略名 <span class="co">*/</span></span>
<span id="cb51-6"><a href="#cb51-6"></a><span class="kw">private</span> <span class="bu">String</span> shortName;</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb52"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb52-1"><a href="#cb52-1"></a><span class="kw">private</span> <span class="bu">String</span> code, name, shortName;</span></code></pre></div></li>
<li><p>リテラルは使用しない<br />
リテラルとは、コード中に、表現が定数として直接現れており、記号やリストで表現することができないものを指す(数値、文字列両方含む 通称マジックナンバー)。コードの可読性・保守性の低下を防ぐために、リテラル定数(<code>static final</code> フィールド)を使用すること。<br />
例外:<code>-1</code>,<code>0</code>,<code>1</code> 等をカウント値としてループ処理等で使用するような場合</p>
<p>良い例:</p>
<div class="sourceCode" id="cb53"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb53-1"><a href="#cb53-1"></a><span class="kw">private</span> <span class="dt">static</span> <span class="dt">final</span> <span class="dt">double</span> ONE_MILE_METRE = <span class="fl">1609.</span><span class="dv">344</span>;</span>
<span id="cb53-2"><a href="#cb53-2"></a></span>
<span id="cb53-3"><a href="#cb53-3"></a><span class="kw">public</span> <span class="dt">double</span> <span class="fu">mileToMetre</span>(<span class="dt">double</span> mi) {</span>
<span id="cb53-4"><a href="#cb53-4"></a> <span class="kw">return</span> mi * ONE_MILE_METRE;</span>
<span id="cb53-5"><a href="#cb53-5"></a>}</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb54"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb54-1"><a href="#cb54-1"></a><span class="kw">public</span> <span class="dt">double</span> <span class="fu">mileToMetre</span>(<span class="dt">double</span> mi) {</span>
<span id="cb54-2"><a href="#cb54-2"></a> <span class="kw">return</span> mi * <span class="fl">1609.</span><span class="dv">344</span>;</span>
<span id="cb54-3"><a href="#cb54-3"></a>}</span></code></pre></div>
<ul>
<li><p>リテラル定数の名前はその値の意味を正しく表現したものにする</p>
<p>悪い例:</p>
<div class="sourceCode" id="cb55"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb55-1"><a href="#cb55-1"></a><span class="kw">private</span> <span class="dt">static</span> <span class="dt">final</span> <span class="dt">int</span> ZERO = <span class="dv">0</span>;</span></code></pre></div></li>
</ul></li>
<li><p>配列宣言は「<code>型名[]</code>」にする</p>
<p>良い例:</p>
<div class="sourceCode" id="cb56"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb56-1"><a href="#cb56-1"></a><span class="kw">private</span> <span class="dt">int</span>[] sampleArray = <span class="kw">new</span> <span class="dt">int</span>[<span class="dv">10</span>];</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb57"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb57-1"><a href="#cb57-1"></a><span class="kw">private</span> <span class="dt">int</span> sampleArray[] = <span class="kw">new</span> <span class="dt">int</span>[<span class="dv">10</span>];</span></code></pre></div></li>
<li><p>できるだけローカル変数を利用する<br />
ローカル変数で事足りるものをインスタンス変数として利用するなど、必要のないインスタンス変数を定義すると、パフォーマンスや可読性の低下やの大きな要因となる上、マルチスレッドを意識した際に不整合がおきる可能性があるので、インスタンス変数は必要性を充分に考慮してから使用すること。</p></li>
<li><p>定数は<code>final</code>で宣言する</p></li>
<li><p>ローカル変数とインスタンス変数を使いわける</p></li>
</ul>
</section>
<section id="定数" data-number="4.9">
<h2 data-number="4.9"><span class="header-section-number">4.9</span> 定数</h2>
<ul>
<li><p><code>public</code> で宣言するクラス変数とインスタンス変数は、定数のみとし、 <code>static final</code> で定義する<br />
<code>final</code> ではない <code>static</code> な定数は作成しない。</p>
<p>良い例:</p>
<div class="sourceCode" id="cb58"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb58-1"><a href="#cb58-1"></a><span class="kw">public</span> <span class="dt">static</span> <span class="dt">final</span> <span class="bu">String</span> PROTOCOL_HTTP = <span class="st">"http"</span>;</span></code></pre></div></li>
<li><p>定数( <code>static</code> フィールド)に、 <code>static</code> ではないメソッドから書き込まない</p></li>
<li><p>定数は、プリミティブ型もしくは、不変(Immutable)オブジェクトで参照する</p>
<ul>
<li><p>不変<code>List</code>の生成には<code>List.of()</code>を利用する</p>
<p>良い例:</p>
<div class="sourceCode" id="cb59"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb59-1"><a href="#cb59-1"></a><span class="kw">public</span> <span class="dt">static</span> <span class="dt">final</span> <span class="bu">List</span><<span class="bu">Integer</span>> VALUES = <span class="bu">List</span>.<span class="fu">of</span>(<span class="dv">1</span>, <span class="dv">2</span>, <span class="dv">3</span>, <span class="dv">4</span>, <span class="dv">5</span>);</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb60"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb60-1"><a href="#cb60-1"></a><span class="kw">public</span> <span class="dt">static</span> <span class="dt">final</span> <span class="bu">List</span><<span class="bu">Integer</span>> VALUES = <span class="bu">Arrays</span>.<span class="fu">asList</span>(<span class="dv">1</span>, <span class="dv">2</span>, <span class="dv">3</span>, <span class="dv">4</span>, <span class="dv">5</span>);</span></code></pre></div></li>
<li><p>不変<code>Set</code>の生成には<code>Set.of()</code>を利用する</p></li>
<li><p>不変<code>Map</code>の生成には<code>Map.of()</code>を利用する</p>
<p>良い例:</p>
<div class="sourceCode" id="cb61"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb61-1"><a href="#cb61-1"></a><span class="kw">public</span> <span class="dt">static</span> <span class="dt">final</span> <span class="bu">Map</span><<span class="bu">Integer</span>, <span class="bu">String</span>> VALUES_MAP = <span class="bu">Map</span>.<span class="fu">of</span>(<span class="dv">1</span>, <span class="st">"A"</span>, <span class="dv">2</span>, <span class="st">"B"</span>, <span class="dv">3</span>, <span class="st">"C"</span>);</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb62"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb62-1"><a href="#cb62-1"></a><span class="kw">public</span> <span class="dt">static</span> <span class="dt">final</span> <span class="bu">Map</span><<span class="bu">Integer</span>, <span class="bu">String</span>> VALUES_MAP = <span class="kw">new</span> <span class="bu">HashMap</span><>() {</span>
<span id="cb62-2"><a href="#cb62-2"></a> {</span>
<span id="cb62-3"><a href="#cb62-3"></a> <span class="fu">put</span>(<span class="dv">1</span>, <span class="st">"A"</span>);</span>
<span id="cb62-4"><a href="#cb62-4"></a> <span class="fu">put</span>(<span class="dv">2</span>, <span class="st">"B"</span>);</span>
<span id="cb62-5"><a href="#cb62-5"></a> <span class="fu">put</span>(<span class="dv">3</span>, <span class="st">"C"</span>);</span>
<span id="cb62-6"><a href="#cb62-6"></a> }</span>
<span id="cb62-7"><a href="#cb62-7"></a>};</span></code></pre></div></li>
<li><p>不変な配列インスタンスは長さ 0 の配列以外は生成不可能なため、外部から参照される(<code>public</code>)定数では利用せず、<code>List</code>等への置き換えをすること</p>
<p>良い例:</p>
<div class="sourceCode" id="cb63"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb63-1"><a href="#cb63-1"></a><span class="kw">public</span> <span class="dt">static</span> <span class="dt">final</span> <span class="bu">List</span><<span class="bu">Integer</span>> VALUES = <span class="bu">List</span>.<span class="fu">of</span>(<span class="dv">1</span>, <span class="dv">2</span>, <span class="dv">3</span>, <span class="dv">4</span>, <span class="dv">5</span>);</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb64"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb64-1"><a href="#cb64-1"></a><span class="kw">public</span> <span class="dt">static</span> <span class="dt">final</span> <span class="dt">int</span>[] VALUES = { <span class="dv">1</span>, <span class="dv">2</span>, <span class="dv">3</span>, <span class="dv">4</span>, <span class="dv">5</span> };</span></code></pre></div></li>
</ul></li>
</ul>
</section>
<section id="インスタンス変数" data-number="4.10">
<h2 data-number="4.10"><span class="header-section-number">4.10</span> インスタンス変数</h2>
<ul>
<li><p>インスタンス変数は<code>private</code>にする</p>
<p>良い例:</p>
<div class="sourceCode" id="cb65"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb65-1"><a href="#cb65-1"></a><span class="kw">public</span> <span class="kw">class</span> Employee {</span>
<span id="cb65-2"><a href="#cb65-2"></a> <span class="kw">private</span> <span class="dt">long</span> id;</span>
<span id="cb65-3"><a href="#cb65-3"></a></span>
<span id="cb65-4"><a href="#cb65-4"></a> <span class="co">//・・・</span></span>
<span id="cb65-5"><a href="#cb65-5"></a> <span class="co">//getter/setter</span></span>
<span id="cb65-6"><a href="#cb65-6"></a>}</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb66"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb66-1"><a href="#cb66-1"></a><span class="kw">public</span> <span class="kw">class</span> Employee {</span>
<span id="cb66-2"><a href="#cb66-2"></a> <span class="kw">public</span> <span class="dt">long</span> id;</span>
<span id="cb66-3"><a href="#cb66-3"></a></span>
<span id="cb66-4"><a href="#cb66-4"></a> <span class="co">//・・・</span></span>
<span id="cb66-5"><a href="#cb66-5"></a> <span class="co">//getter/setter</span></span>
<span id="cb66-6"><a href="#cb66-6"></a>}</span></code></pre></div></li>
</ul>
</section>
<section id="クラス変数" data-number="4.11">
<h2 data-number="4.11"><span class="header-section-number">4.11</span> クラス変数</h2>
<ul>
<li><p><code>public static final</code> 宣言した配列を利用しない<br />
※「定数」を参照</p></li>
<li><p>クラス変数にはクラス名を使用してアクセスすること</p>
<p>良い例:</p>
<div class="sourceCode" id="cb67"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb67-1"><a href="#cb67-1"></a><span class="bu">BigDecimal</span> b = <span class="bu">BigDecimal</span>.<span class="fu">ZERO</span>;</span></code></pre></div>
<p>悪い例:</p>
<div class="sourceCode" id="cb68"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb68-1"><a href="#cb68-1"></a><span class="bu">BigDecimal</span> a = <span class="co">//</span></span>