Upgrade to Pro — share decks privately, control downloads, hide ads and more …

読みやすいコードを書くために / code

読みやすいコードを書くために / code

津山高専情報工学科のプログラミングの講義で使用した資料です.コードを書くときの注意点をまとめてあります.

4778df65a51ce0612a2c2a7ab8dfe87a?s=128

Kazuhisa Fujita

December 06, 2017
Tweet

Transcript

  1. ಡΈ΍͍͢ίʔυΛॻͨ͘Ίʹ ౻ా Ұण 20171206

  2. ϓϩάϥϛϯάͰ͸Կ͕ॏཁ͔ʁ ࠽ೳ΋ඞཁ͔΋͠Ε·ͤΜ͕΋ͬͱॏཁͳ΋ͷ͕ ͋Γ·͢ɻ

  3. ͦΕ͸Մಡੑͷߴ͍ιʔείʔυ Λॻ͘͜ͱͰ͢ʂʂ ϓϩάϥϛϯάͰେ੾ͳ͜ͱ

  4. Մಡੑͷߴ͍ιʔείʔυͷඞཁੑ ‣ ಡΈʹ͍͘ίʔυ͸ɺॻ͍͍ͯΔ͏ͪʹͦͷίʔυ͕Ͳ ͷΑ͏ͳॲཧΛ͍ͯ͠Δ͔෼͔Βͳ͘ͳΔ͜ͱ͕͋Γ· ͢ɻ ‣ ྫ͑͹ɺΠϯσϯτ͕ΉͪΌͪ͘ΌͳίʔυͷॲཧΛཧղ ͠Α͏ͱ͢ΔͱେมͰ͢Ͷɻ ‣ ಡΈʹ͍͘ίʔυ͸ίʔυͷॲཧΛཧղ͢Δ͜ͱ͕೉

    ͍ͨ͠Ίɺίʔυͷؒҧ͍ʹؾ͖ͮʹ͘͘ͳΓ·͢ɻ ‣ ؒҧ͍ʹؾ͔ͮͳ͍ͨΊɺؒҧͬͨίʔυ͕࢒ͬͨ· ·ʹͳΓɺಈ࡞ෆྑͷιϑτ΢ΣΞ͕ੈʹग़Δ͔΋͠ Ε·ͤΜɻ
  5. Մಡੑͷߴ͍ιʔείʔυͷඞཁੑ ‣ ιʔείʔυ͸౓ॻ͍ͨΒ์ͬͨΒ͔͠ʹͳΔ͜ͱ͸ ͋Γ·ͤΜ तۀͰ͸ϨϙʔτΛॻ͍ͨΒऴΘΓ͔΋͠Ε ·ͤΜ͕ ɻ ‣ ϝϯςφϯεͷඞཁ͕͋Γ·͢ɻ ‣

    ػೳΛ֦ுͤ͞Δඞཁ͕͋Δ͔΋͠Ε·ͤΜɻ ‣ ୭͕ϝϯςφϯεͯ͠΋ྑ͍Α͏ʹɺಡΈ΍͍͢ίʔυΛ ॻ͘ඞཁ͕͋Γ·͢ɻ ‣ ·ͨɺ௕ظؒ์ஔ͞ΕͨՄಡੑͷ௿͍ίʔυ͸ɺίʔυΛ ॻ͍ͨຊਓ΋ͦͷॲཧΛཧղͰ͖ͳ͍Մೳੑ͕͋Γ·͢ɻ ݁Ռɼॻ͍ͨຊਓ͢ΒϝϯςφϯεͰ͖ͳ͘ͳͬͯ͠·͍ ·͢ɽ
  6. Մಡੑͷߴ͍ίʔυͱ͸ ‣ ίϝϯτ͕෇͍͍ͯΔɻ ‣ ϚδοΫφϯόʔ͕ͳ͍ɻ ‣ ҙຯͷ͋Δม਺໊͕෇͚ͯ͋Δɻ ‣ ม਺͸࢖༻͢Δ௚લ·ͨ͸ۙ͘Ͱએݴ͢Δɻ ‣

    Πϯσϯτ͕ϓϩάϥϜͷߏ଄ͱ߹͍ͬͯΔɻ ‣ ੍ޚߏ଄ΛதׅހͰද͢΋ͷʹ͸ɺলུͰ͖Δ৔߹Ͱ΋தׅހΛলུ ͍ͯ͠ͳ͍ʢ൓ରҙݟ͋Γʣɻ ‣ τϦοΩʔͳίʔυΛॻ͍͍ͯͳ͍ɻ ‣ ίʔσΟϯάنଇΛक͍ͬͯΔɻ
  7. ίϝϯτΛ෇͚Δ ‣ ԋशఔ౓ͷ୹͍ίʔυͰ͸ɺίϝϯτΛ෇͚ͳͯ͘΋Կ Λ΍͍ͬͯΔ͔Θ͔Γ·͢ɻ ‣ ͔͠͠ɺ௕͍ίʔυͰ͸ม਺ͷҙຯ΍ؔ਺ͷҙຯ͕Θ͔ Βͳ͘ͳΔ͜ͱ͕͋Γ·͢ɻ ‣ ͦΕΛආ͚ΔͨΊʹίϝϯτΛ෇͚Δඞཁ͕͋Γ·͢ɻ ‣

    ·ͨɺଞਓ͕ݟͯ΋͙͢෼͔ΔΑ͏ʹ͢ΔͨΊʹ΋ඞཁ Ͱ͢ɻ 分かりやすい表現を用いていれば必要ないことも多いですが
  8. ྫ const int XMAX = 800; //画面の縦幅 const int YMAX

    = 600; //画面の横幅 int sum(int num) { /* * 0から引数numまでの整数の総和を計算し、 * その値を返す。 */ ؔ਺͕ͲͷΑ͏ͳॲཧΛ͢Δ͔ίϝϯτʹΑ Γ෼͔Γ·͢ɻ ม਺͕Կͷ஋Λҙຯ͢Δ͔ɼίϝϯτʹΑΓ ෼͔Γ·͢ɻ
  9. ϚδοΫφϯόʔΛͳ͘͢ ‣ ϚδοΫφϯόʔ͕͋Δͱɺఆ਺ͷҙຯ͕Θ͔Βͳ͍ Ͳ͜Ζ͔ɺόάൃੜ͢ΔݪҼʹͳΓ·͢ɻ

  10. ϚδοΫφϯόʔͱ͸ ‣ ఆ਺͕௚઀਺ࣈॻ͔Ε͍ͯΔ΋ͷͰ͢ɻ for(int i = 0; i < 10;

    i++){ ͨͩͱ͍͏͚ͩͰ͸ҙຯෆ໌Ͱ͢ɻ Կ͔ҙຯ͕͋Δఆ਺ͷ͸ͣɻ
  11. ϚδοΫφϯόʔΛͳ͘͢ const int NUM = 10; //഑ྻͷݸ਺ for(int i =

    0; i < NUM; i++){ for(int i = 0; i < 10; i++){
  12. ϚδοΫφϯόʔΛͳ͘͢ͱ ‣ ఆ਺ͷҙຯ͕໌ࣔ͞ΕΔɻ ‣ ιʔείʔυͷ༷ʑͳ৔ॴͰ࢖ΘΕΔఆ਺͕ɺҰ౓ʹ શͯมߋͰ͖Δɻ ‣ มߋ࿙Ε͕ͳ͘ͳΓɺόά͕ݮΔɻ ‣ Օॴมߋ͢Δ͚ͩͰࡁΉͷͰɺָ͕Ͱ͖Δɻ

  13. ҙຯͷͳ͍ม਺໊ ͜ͷྫͰ͸୹͍ίʔυͳͷͰɺҙຯ͕ແ͍ม਺໊Ͱ΋Θ ͔Γ·͕͢ɺສߦͷιʔεͷதͰBͱ͔C͕සग़͢Δͱ ࠔΓ·͢Ͷɻ int a = 10; int b

    = 0; for(int i = 0; i < a; i++){ b += i; }
  14. ҙຯͷ͋Δ໊લ const int MAX = 10; int sum = 0;

    for(int i = 0; i < MAX; i++){ sum += i; } ‣ ҙຯͷ͋Δม਺໊ʹ͢Δͱɺม਺ͷར༻ํ๏͕෼͔Γ΍ ͘͢ͳΓόά͕ݮΓ·͢ɻ ‣ Bͱ͔CΛଟ༻͍ͯ͠ΔͱɺόάͷݪҼʹͳΓ·͢ɻ ‣ ͲͷB͕ͲͷΑ͏ʹ࢖ΘΕΔ͔Θ͔Βͳ͍ͨΊɻ
  15. ϋϯΨϦΞϯه๏ ‣ ม਺໊Λม਺ͷछྨ͕෼͔ΔΑ͏ͳ΋ͷʹ͢Δɻ ‣ γεςϜϋϯΨϦΞϯه๏ ‣ ม਺ܕ͕෼͔ΔΑ͏ʹɺม਺ͷ಄ʹϓϨϑΟοΫεΛͭ ͚Δɻ ‣ ΞϓϦέʔγϣϯϋϯΨϦΞϯه๏

    ‣ ม਺ͷҙຯ͕෼͔ΔΑ͏ʹɺม਺ͷ಄ʹϓϨϑΟοΫε Λ͚ͭΔɻ ‣ NJO9 NBY: VT/BNF ZFO9 VTE9
  16. γεςϜϋϯΨϦΞϯه๏ͷྫ ‣ ม਺ܕΛද͢ϓϨϑΟοΫεʴม਺໊ ‣ JOUJ9 ‣ EPVCMFG9 ‣ DIBST9 整数型

    iFoo 単精度浮動小数型 fBar 倍精度浮動小数 dHoge 論理型 bFooBar ポインタ pHogehoge
  17. ‣ γεςϜϋϯΨϦΞϯه๏͸ࣙΊΔํ޲ʹͳ͍ͬͯΔɻ ‣ Α͘Θ͔Βͳ͍ه߸͕ଟ͘ͳΓՄಡੑ͕ѱ͍ɻ ‣ ܕ͕มΘͬͨ࣌ɺ͍͍ͪͪม਺໊Λม͑ͳ͚Ε͹ͳΒͳ͍ɻ ‣ ݱࡏϚΠΫϩιϑτ΋ਪ঑͍ͯ͠ͳ͍ɻ ‣ ͦ΋ͦ΋ඞཁͳ͍ɻ

    ‣ ΞϓϦέʔγϣϯϋϯΨϦΞϯͷߟ͑ํ͸͍·Ͱ΋༗ޮɻ
  18. Ωϟϝϧέʔε ‣ ม਺໊ʹෳ਺ͷ୯ޠΛ࢖͏ͱ͖ɺͦͷ··ฒ΂ͨͷͰ͸ҙຯ͕Θ͔Β ͳ͘ͳΓ·͢ɻͦ͜Ͱɺ୯ޠͷ۠੾Γ͕Θ͔Γ΍͘͢͢ΔͨΊʹɼΩ ϟϝϧέʔεͱ͍͏ه๏͕͋Γ·͢ɻ ‣ 6QQFSDBNFMDBTF ‣ ୯ޠͷ۠੾Γ͕෼͔ΔΑ͏ʹɼ୯ޠͷઌ಄ͷจࣈΛେจࣈʹ͢Δɻ ‣

    ྫɿ $BNFM$BTF ‣ MPXFSDBNFMDBTF ‣ ୯ޠͷ۠੾Γ͕෼͔ΔΑ͏ʹɺ୯ޠͷઌ಄ͷจࣈΛେจࣈʹ͢Δɻͨͩ ͠ɺઌ಄ͷ୯ޠͷઌ಄ͷจࣈͷΈখจࣈʹ͢Δɻ ‣ ྫɿDBNFM$BTF
  19. εωʔΫέʔε ‣ ෳ਺ͷ୯ޠΛม਺໊Ͱ࢖͏ͱ͖ɺ୯ޠͷ۠੾Γ͕෼͔ ΔΑ͏୯ޠͱ୯ޠͷؒʹΞϯμʔείΞʢʊʣΛೖΕ Δ΍ΓํΛεωʔΫέʔεͱ͍͍·͢ɻ ‣ ྫɿTOBLF@DBTF

  20. ม਺એݴͷ৔ॴ ‣ ม਺એݴ͸ม਺Λ࢖͏৔ॴͷۙ͘ʢ௚લʣʹߦ͏ɻ ‣ ੲʑͷ$ݴޠͷ࢓༷ͷͨΊɺݹ͍ਓ͸ϓϩάϥϜͷઌ಄ Ͱએݴ͠·͕͢ɺ͍·͸ม਺Λ࢖༻͢Δ৔ॴͷۙ͘Ͱ એݴ͢Δ͜ͱ͕ҰൠతͰ͢ɻ ‣ ؔ࿈͢Δ΋ͷ͸͚ۙͮΔɺ࢖༻ൣғ͸ڱ͘ͱ͍͏ࢥ૝ Ͱ͢ɻ

  21. Πϯσϯτͷॏཁੑ ‣ ϓϩάϥϛϯάΛߦ͏ͱ͖ʹ࠷΋ॏཁͳࣄ͕ɺΠϯσϯ τΛਖ਼֬ʹ͢Δ͜ͱͰ͢ɻ ‣ ϓϩάϥϚ͸ΠϯσϯτΛཔΓʹɺϓϩάϥϜͷߏ଄Λ ཧղ͠Α͏ͱ͠·͢ɻ ‣ Πϯσϯτ͕ແ஡ۤ஡ͩͱɺϓϩάϥϜͷཧղΛ๦͛Δɻ ‣

    ݁Ռɺόά͕૿͑Δɻ ‣ อकΛ΍Γʹ͘͘ͳΔɻ
  22. ѱ͍Πϯσϯτ ֶੜͷॻ͘ιʔείʔυͰΑ͘ݟ·͢ɻ ϓϩάϥϜͷߏ଄ͱΠϯσϯτ͕Ұக͓ͯ͠Βͣɺ ؒҧ͍Λൃݟ͢Δͷ΋༰қͰ͸͋Γ·ͤΜɻ int main(void){ for(int i = 0;

    i < 10; i++){ print(“%d\n”, i); } return(0); }
  23. ྑ͍Πϯσϯτ プログラムの構造とインデントが一致しており、プ ログラムの構造が分かりやすくなっています。 int main(void) { for(int i = 0;

    i < 10; i++){ print(“%d\n”, i); } return(0); }
  24. τϦοΩʔͳίʔυΛॻ͔ͳ͍ ‣ ͳΔ΂͘Α͘࢖ΘΕΔදݱΛ࢖͏ɻ ‣ Α͘࢖ΘΕΔදݱΛ༻͍Δ͜ͱͰɺ୭ʹͰ΋෼͔Δι ʔείʔυʹͳΔɻ

  25. ίʔσΟϯάελΠϧ ‣ ίʔυͷݟͨ໨Λ౷Ұ͠ɺࠞཚΛͤ͞ͳ͍ͨΊʹඞཁɻ ‣ ίʔυΛ෼͔Γ΍͘͢͢Δɻ

  26. ୅දతͳίʔσΟϯάελΠϧ ‣ ,3ελΠϧ ‣ ΧʔχϋϯͱϦονʔ ,3 ͕ॻ͍ͨ$ݴޠͷຊͰ࢖Θ Ε͍ͯΔελΠϧ ‣ -JOVYελΠϧ

    ‣ #4%ελΠϧ ‣ (/6ελΠϧ
  27. ྫ int main(void) {//ϝΠϯؔ਺ for(int i; i < 10; i++){//̍̌ճςετΛදࣔ

    printf(“test\n”); } return(0); } 本当は見てすぐ分かるようなことはコメントで書かないよ。 Πϯσϯτ͸εϖʔεͭ ؔ਺ͷΧοί͸վߦޙʹ ੍ޚจͷΧοί͸ͦͷ௚ޙʹ
  28. ϝϯςφϯε͠΍͍͢ίʔυΛॻͨ͘Ίʹ ‣ Մಡੑͷߴ͍ίʔυΛॻ͘ɻ ‣ ௕͍ؔ਺Λॻ͔ͳ͍ɻ ‣ ػೳ͸ࡉ෼Խ͢Δɻ ‣ ػೳຖʹมߋ͕͠΍͍͢ɻ ‣

    ҰͭͷϑΝΠϧʹɺ௕͍ϓϩάϥϜΛॻ͔ͳ͍ɻ ‣ ػೳຖʹιʔείʔυΛ෼͚Δɻ ‣ ΫϥεΛ͏·͘࢖͏ɻ ‣ ඪ४Ͱ༻ҙ͞Ε͍ͯΔؔ਺΍ϥΠϒϥϦΛ༗ޮʹ࢖͏ɻ ‣ ಠ࣮ࣗ૷͸όάͷ΋ͱɻ
  29. ஫ҙ ‣ ͜ͷߨٛͰड़΂ͨ͜ͱ͸େํͷਓ͕ೲಘ͢ΔΑ͏ʹॻ͍ ͯ͋Γ·͕͢ɺઈରਖ਼͍͠ͱ͸͍͑·ͤΜɻ ‣ ϓϩάϥϛϯάͷ࡞๏ɺίʔσΟϯάϧʔϧ͸ɺϓϩάϥ ϚͳΒҰՈݴ͋ΓɺͦΕͧΕਖ਼͍͕͠ҟͳ͍ͬͯΔ͜ͱ͕ ͋Γ·͢ɻ ‣ ձࣾ͝ͱɺ෦ॺ͝ͱʹϧʔϧ͕͋Γ·͢ɻ

    ‣ ࣌୅͕มΘΕ͹ɺਖ਼͍͜͠ͱ΋มΘΓ·͢ɻ ‣ গͳ͘ͱ΋ɺࣗ෼ͷϧʔϧΛ࣋ͬͯϓϩάϥϛϯάΛ͠ ·͠ΐ͏ɻ
  30. ࢀߟॻ プログラミング作法 ブライアン カーニハン, ロブ パイク CODE COMPLETE スティーブ マコネル

    ʮؒҧͬͨίʔυ͸ؒҧͬͯݟ͑ΔΑ͏ʹ͢Δʯͱ͍͏XFCαΠτ΋ࢀߟʹͳΓ·͢ɻ