1 :田杉山脈 ★:2020/12/09(水) 22:10:29.77 ID:CAP_USER.net
プログラミングをする上で、コメントをきちんと残したり、わかりやすい変数名をつけたりして「読みやすいコード」を目指す作業は重要です。しかし、「読みやすいコード」と「優れたコード」の間には、時として構造上の大きな違いがあるのも事実。そんな「優れたコード」に対するLinuxの開発者リーナス・トーバルズ氏の考え方について、エンジニアのmkirchner氏が説明しています。
トーバルズ氏は2016年のTEDインタビュー内で「連結リストの実装方法」を例とし、自身の「優れたコード」に対する考えを説明しています。連結リストはデータを線形につなげたリストのことで、データを扱う構造のひとつ。具体的には「4」や「12」といった値そのものと「次の値」を示すポインタで構成される「ボックス」を順番につなげたものが連結リストです。
連結リストをC言語で実装したコードは以下。値そのものである「value」と次の値を示すポインタ「next」で「IntListItem」構造体が作られており、IntListItem構造体からボックスが生成されます。「IntList」構造体はリストの先頭を表す変数「head」を持っています。
この連結リストからあるボックスを消去する処理について、スタンフォード大学の計算機科学講義「Computer Science 101(CS101)」で紹介されていたコードが以下とのこと。
上のコードが行っている処理はこんな感じ。まずはコードの以下の部分で「消去したいボックス」をリストの先頭から探索します。連結リストはリストの先頭からしか値をたどることができないので、まずリスト先頭のボックスのアドレスを「cur」ポインタに格納し、「prev」ポインタはNULLで初期化。curポインタが消去したいボックスのアドレスと一致するまで、curポインタを次のボックスのアドレスへと移しながら照合していきます。
先ほどの処理のイメージを図で表したものが以下。ちょうどprevポインタとcurポインタがリスト後部のボックスへスライドしていくようなイメージです。
以下ソース
https://gigazine.net/news/20201208-linked-list-good-taste/
110 :名刺は切らしておりまして:2020/12/31(木) 15:32:15.43 ID:hoHtvhPp.net
17 :名刺は切らしておりまして:2020/12/10(木) 00:52:43.63 ID:O7Ah3Gqc.net
87 :名刺は切らしておりまして:2020/12/12(土) 01:59:40.91 ID:eZSNfslH.net
7 :名刺は切らしておりまして:2020/12/09(水) 22:39:50.63 ID:LT0kIIel.net
34 :名刺は切らしておりまして:2020/12/10(木) 07:38:39.14 ID:AhpOjTnP.net
98 :名刺は切らしておりまして:2020/12/12(土) 22:35:09.45 ID:VFxib3Nx.net
50 :名刺は切らしておりまして:2020/12/10(木) 10:36:03.01 ID:zguu7azS.net
113 :名刺は切らしておりまして:2020/12/31(木) 22:48:40.67 ID:GszFZNdP.net
56 :名刺は切らしておりまして:2020/12/10(木) 12:27:51.84 ID:C9U28Mos.net
53 :大島栄城 :2020/12/10(木) 11:05:04.11 ID:ttQPI329.net
21 :名刺は切らしておりまして:2020/12/10(木) 01:15:50.61 ID:J3xH0wAA.net
8 :名刺は切らしておりまして:2020/12/09(水) 22:56:39.27 ID:lalfKSee.net
76 :名刺は切らしておりまして:2020/12/11(金) 01:26:46.19 ID:HrlNdNqL.net
84 :名刺は切らしておりまして:2020/12/11(金) 17:39:53.32 ID:gV0XoZMC.net
3 :名刺は切らしておりまして:2020/12/09(水) 22:24:08.28 ID:eXttlEXM.net
109 :名刺は切らしておりまして:2020/12/31(木) 15:05:49.46 ID:lsqIT4Op.net
100 :名刺は切らしておりまして:2020/12/13(日) 10:43:27.33 ID:tHJUk5lV.net
59 :名刺は切らしておりまして:2020/12/10(木) 13:55:14.82 ID:q2+zL1Gi.net
78 :名刺は切らしておりまして:2020/12/11(金) 01:49:08.91 ID:ThyZPUnk.net
42 :名刺は切らしておりまして:2020/12/10(木) 09:07:58.46 ID:eYmMVUhx.net
61 :名刺は切らしておりまして:2020/12/10(木) 14:12:00.40 ID:D7B2xVep.net
92 :名刺は切らしておりまして:2020/12/12(土) 08:03:27.76 ID:ugZJIdU7.net
101 :名刺は切らしておりまして:2020/12/13(日) 11:09:37.53 ID:sgpoOZaB.net
85 :名刺は切らしておりまして:2020/12/11(金) 19:21:06.97 ID:i4py4T/g.net
99 :名刺は切らしておりまして:2020/12/13(日) 07:47:02.86 ID:bO76inot.net
27 :名刺は切らしておりまして:2020/12/10(木) 01:51:37.22 ID:O/kczejv.net
97 :名刺は切らしておりまして:2020/12/12(土) 22:24:04.40 ID:mPG6ibd1.net
111 :名刺は切らしておりまして:2020/12/31(木) 18:17:27.82 ID:8pjjuWSW.net
86 :名刺は切らしておりまして:2020/12/11(金) 22:40:11.22 ID:9w8znf4P.net
64 :名刺は切らしておりまして:2020/12/10(木) 14:34:17.60 ID:4BTWYfMR.net
13 :名刺は切らしておりまして:2020/12/10(木) 00:14:07.38 ID:MLah/xT2.net
19 :名刺は切らしておりまして:2020/12/10(木) 01:02:22.22 ID:tGsCzTXv.net
52 :名刺は切らしておりまして:2020/12/10(木) 10:57:11.57 ID:C9U28Mos.net
114 :名刺は切らしておりまして:2020/12/31(木) 23:30:00.68 ID:u9FaUXfw.net
2 :名刺は切らしておりまして:2020/12/09(水) 22:18:15.40 ID:RTL5tQs5.net
43 :名刺は切らしておりまして:2020/12/10(木) 09:16:43.42 ID:WeSqc1yk.net
14 :名刺は切らしておりまして:2020/12/10(木) 00:20:04.45 ID:SCHSpxjk.net
93 :名刺は切らしておりまして:2020/12/12(土) 08:23:33.03 ID:jquYNH7b.net
118 :名刺は切らしておりまして:2021/01/03(日) 11:52:52.97 ID:8izqqKLt.net
90 :名刺は切らしておりまして:2020/12/12(土) 06:52:02.39 ID:7SIwehje.net
75 :名刺は切らしておりまして:2020/12/11(金) 00:51:28.61 ID:FpNdM9w2.net
38 :名刺は切らしておりまして:2020/12/10(木) 08:13:29.78 ID:QBurfjQl.net
28 :名刺は切らしておりまして:2020/12/10(木) 02:07:18.53 ID:smidZUMs.net
20 :名刺は切らしておりまして:2020/12/10(木) 01:09:03.94 ID:+nAR4sQk.net
106 :名刺は切らしておりまして:2020/12/17(木) 10:28:21.26 ID:PfyG4uVs.net
79 :名刺は切らしておりまして:2020/12/11(金) 02:19:41.46 ID:DUCu1g8t.net
62 :名刺は切らしておりまして:2020/12/10(木) 14:26:12.20 ID:UT/YdDOQ.net
80 :名刺は切らしておりまして:2020/12/11(金) 12:51:00.96 ID:ezWHgrzc.net
51 :名刺は切らしておりまして:2020/12/10(木) 10:38:29.61 ID:JejNo8QF.net
88 :名刺は切らしておりまして:2020/12/12(土) 02:16:52.32 ID:oHgXmQ44.net
コメント