This commit is contained in:
OliverT87 2025-06-30 15:30:41 +02:00
parent 93b5502112
commit 60f83f9182
2 changed files with 88 additions and 5 deletions

0
KOMMENTIERUNGS-STATUS.md Normal file
View File

View File

@ -48,6 +48,18 @@ namespace Project_Periodensystem.Controller
_elements = elements ?? new List<Element>(); _elements = elements ?? new List<Element>();
} }
/// <summary>
/// Extrahiert alle Atomgewichte als Array - demonstriert klassische Array-Erstellung
///
/// C# KONZEPTE:
/// - Array-Initialisierung: new double[size]
/// - For-Schleife: Imperative Programmierung
/// - Property-Zugriff: element.AtomicWeight
///
/// ALTERNATIVE (LINQ): return _elements.Select(e => e.AtomicWeight).ToArray();
/// Zeigt Unterschied zwischen imperativem und funktionalem Stil
/// </summary>
/// <returns>Array aller Atomgewichte in g/mol</returns>
public double[] GetAtomicWeights() public double[] GetAtomicWeights()
{ {
double[] weights = new double[_elements.Count]; double[] weights = new double[_elements.Count];
@ -58,6 +70,17 @@ namespace Project_Periodensystem.Controller
return weights; return weights;
} }
/// <summary>
/// Berechnet das durchschnittliche Atomgewicht aller Elemente
///
/// C# KONZEPTE:
/// - Early Return Pattern: if (!_elements.Any()) return 0.0;
/// - Method Reuse: Nutzt GetAtomicWeights()
/// - Klassische Iteration: for-Schleife für Summe
///
/// MATHEMATIK: Arithmetisches Mittel = Summe / Anzahl
/// </summary>
/// <returns>Durchschnittliches Atomgewicht oder 0.0 bei leerer Liste</returns>
public double GetAverageAtomicWeight() public double GetAverageAtomicWeight()
{ {
if (!_elements.Any()) return 0.0; if (!_elements.Any()) return 0.0;
@ -71,15 +94,39 @@ namespace Project_Periodensystem.Controller
return sum / weights.Length; return sum / weights.Length;
} }
/// <summary>
/// Sammelt alle einzigartigen Element-Serien - demonstriert LINQ-Pipeline
///
/// C# KONZEPTE:
/// - LINQ Select(): Projektion (e => e.Series)
/// - LINQ Distinct(): Entfernt Duplikate
/// - LINQ Where(): Filtert leere/null Werte
/// - LINQ OrderBy(): Alphabetische Sortierung
/// - Method Chaining: Verkettung mehrerer Operationen
///
/// RÜCKGABE: Sortierte Liste aller chemischen Serien
/// </summary>
/// <returns>Liste aller Element-Serien (Alkalimetall, Edelgas, etc.)</returns>
public List<string> GetAllSeries() public List<string> GetAllSeries()
{ {
return _elements.Select(e => e.Series) return _elements.Select(e => e.Series) // Projektion
.Distinct() .Distinct() // Duplikate entfernen
.Where(s => !string.IsNullOrWhiteSpace(s)) .Where(s => !string.IsNullOrWhiteSpace(s)) // Null/Empty filtern
.OrderBy(s => s) .OrderBy(s => s) // Alphabetisch sortieren
.ToList(); .ToList(); // Zu Liste konvertieren
} }
/// <summary>
/// Sammelt wichtige Statistiken in einem Tuple - demonstriert strukturierte Rückgaben
///
/// C# KONZEPTE:
/// - Tuple Return Type: (int, int, double)
/// - Method Delegation: Ruft andere Methoden auf
/// - Tuple Creation: (value1, value2, value3)
///
/// VERWENDUNG: var (total, series, avg) = statistics.GetStatistics();
/// </summary>
/// <returns>Tuple mit (Anzahl Elemente, Anzahl Serien, Durchschnittsgewicht)</returns>
public (int totalElements, int uniqueSeries, double avgWeight) GetStatistics() public (int totalElements, int uniqueSeries, double avgWeight) GetStatistics()
{ {
var seriesCount = GetAllSeries().Count; var seriesCount = GetAllSeries().Count;
@ -88,6 +135,18 @@ namespace Project_Periodensystem.Controller
return (_elements.Count, seriesCount, avgWeight); return (_elements.Count, seriesCount, avgWeight);
} }
/// <summary>
/// Findet das leichteste und schwerste Element - demonstriert LINQ Ordering
///
/// C# KONZEPTE:
/// - LINQ OrderBy() / OrderByDescending(): Sortierung
/// - LINQ First(): Erstes Element nach Sortierung
/// - Tuple mit nullable Types: (Element?, Element?)
/// - Guard Clause: Early return bei leerer Liste
///
/// CHEMIE: Wasserstoff ist leichtestes (1.008), schwerste variieren
/// </summary>
/// <returns>Tuple mit (leichtestes Element, schwerstes Element) oder (null, null)</returns>
public (Element? lightest, Element? heaviest) GetWeightExtremes() public (Element? lightest, Element? heaviest) GetWeightExtremes()
{ {
if (!_elements.Any()) return (null, null); if (!_elements.Any()) return (null, null);
@ -98,6 +157,18 @@ namespace Project_Periodensystem.Controller
return (lightest, heaviest); return (lightest, heaviest);
} }
/// <summary>
/// Extrahiert Element-Informationen nach Ordnungszahl - demonstriert Tuple-basierte APIs
///
/// C# KONZEPTE:
/// - LINQ FirstOrDefault(): Sichere Suche (kann null zurückgeben)
/// - Conditional Operator: condition ? trueValue : falseValue
/// - Tuple mit Mixed Types: (string, string, double)
///
/// FALLBACK: Bei nicht gefundenem Element ("?", "Unknown", 0.0)
/// </summary>
/// <param name="atomicNumber">Ordnungszahl des gesuchten Elements (1-118)</param>
/// <returns>Tuple mit (Symbol, Name, Atomgewicht)</returns>
public (string symbol, string name, double weight) GetElementInfo(int atomicNumber) public (string symbol, string name, double weight) GetElementInfo(int atomicNumber)
{ {
var element = _elements.FirstOrDefault(e => e.AtomicNumber == atomicNumber); var element = _elements.FirstOrDefault(e => e.AtomicNumber == atomicNumber);
@ -106,6 +177,18 @@ namespace Project_Periodensystem.Controller
: ("?", "Unknown", 0.0); : ("?", "Unknown", 0.0);
} }
/// <summary>
/// Ermittelt die Position eines Elements im Periodensystem-Grid
///
/// C# KONZEPTE:
/// - Konsistente API: Gleiche Suchmuster wie GetElementInfo()
/// - Tuple für Koordinaten: (int row, int column)
/// - Fallback-Werte: (-1, -1) für "nicht gefunden"
///
/// VERWENDUNG: var (row, col) = statistics.GetElementPosition(1); // Wasserstoff
/// </summary>
/// <param name="atomicNumber">Ordnungszahl des gesuchten Elements</param>
/// <returns>Tuple mit (Zeile, Spalte) oder (-1, -1) wenn nicht gefunden</returns>
public (int row, int column) GetElementPosition(int atomicNumber) public (int row, int column) GetElementPosition(int atomicNumber)
{ {
var element = _elements.FirstOrDefault(e => e.AtomicNumber == atomicNumber); var element = _elements.FirstOrDefault(e => e.AtomicNumber == atomicNumber);