Bei folgender Problemstellung bete ich immer, dass mein Quellcode so gut
läuft, dass ich ihn nie mehr anschauen muss (sonst habe ich sowieso
wieder vergessen, was da passiert):
Als Array vorliegende Daten müssen durch unterschiedliche Funktionen
klassifiziert werden. Konkret geht es um einen Rundumsensor, dessen
einzelne Punkte in Linien, Punktwolken und Restpunkte zerlegt werden. Um
kenntlich zu machen, dass Punkte einer Linie nicht mehr für Punktwolken
oder Restpunkte zur Verfügung stehen, werden die Werte in der
entsprechenden Klassifizierung auf null gesetzt.
Irgendwie aber blöde zu lesen. Weder "ref" noch "out" scheinen das
richtige Schlüsselchen zu sein, um meinem Kollegen (oder mir in einem
halben Jahr) zu zeigen, dass das Eingabefeld über die Unterroutinen von
ProcessInput manipuliert wird. Bleibt mir da wirklich nur die
Kommentierung?
1 | /// <summary>
|
2 | /// ...
|
3 | /// </summary>
|
4 | /// <remarks>"samples" parameter will be destroyed after call</remarks>
|
5 | public List<IPart> ProcessInput(ScanPoint[] samples)
|
6 | {
|
7 | List<IPart> rval = new List<IPart>();
|
8 | rval.AddRange ( GetLines(samples));
|
9 | rval.AddRange ( GetPointClouds(samples));
|
10 | rval.AddRange ( GetPoints(samples));
|
11 | return rval;
|
12 | }
|
13 |
|
14 |
|
15 |
|
16 | /// <summary>
|
17 | /// ...
|
18 | /// </summary>
|
19 | /// <param name="samples"></param>
|
20 | /// <returns></returns>
|
21 | /// <remarks>used points will be wiped out from samples</remarks>
|
22 | List<IPart> GetLines(ScanPoint[] samples)
|
23 | {
|
24 | List<IPart> rval = new List<IPart>();
|
25 | //Identify lines ...
|
26 |
|
27 | //dummy: wipe out used input points
|
28 | for (int i = 0; i < 42; i++)
|
29 | {
|
30 | samples[i] = null;
|
31 | }
|
32 | return rval;
|
33 |
|
34 | }
|
35 |
|
36 | /// <remarks>used points will be wiped out from samples</remarks>
|
37 | List<IPart> GetPointClouds(ScanPoint[] samples)
|
38 | {
|
39 | List<IPart> rval = new List<IPart>();
|
40 | //Identify PointClouds ...
|
41 |
|
42 | //dummy: wipe out used input points
|
43 | for (int i = 42; i <= 84; i++)
|
44 | {
|
45 | samples[i] = null;
|
46 | }
|
47 | return rval;
|
48 |
|
49 | }
|
50 |
|
51 | List<IPart> GetPoints(ScanPoint[] samples)
|
52 | {
|
53 | foreach (ScanPoint ptIn in samples)
|
54 | {
|
55 | if (ptIn != null)
|
56 | { // Ahh, its a point, so add it to rval;
|
57 | }
|
58 | }
|
59 |
|
60 |
|
61 | }
|
Merke: Es geht nicht darum, das Eingangsfeld vor der Zerstörung (durch
kopieren) zu retten, sondern einen Reminder zu setzen, dass das
Eingangsfeld zerstört wird.
Oder baut Ihr so etwas erst gar nicht?
Oder bin ich mittlerweile zu empfindlich?