Make Your Code Clear: C#: Listing 1: Numeric library version 1

This version of the numeric library works correctly. However, there are many poor practices in this library that make it harder to use. In addition, those practices will confuse users of the code. They'll make assumptions about what the code does because of how it's structured. In its current form, those assumptions will be wrong.

public class NumericAlgorithm
{
    public double Mean(List<double> sequence)
    {
        double total = Sum(sequence);
        return (sequence.Count == 0) 
           ? total : total / sequence.Count;
    }

    public double Median(List<double> sequence)
    {
        if (sequence == null)
            throw new ArgumentNullException("sequence", 
                "Sequence must not be null");
        if (sequence.Count == 0)
            return 0;

        List<double> local = new List<double>(sequence);
        local.Sort();

        return local[local.Count / 2];
    }

    public double Variance(List<double> sequence)
    {
        double sum = Sum(sequence);
        if (sequence.Count == 0)
            return 0;
        List<double> squares = 
            sequence.Select(n => n * n).ToList();
        double sumSquares = Sum(squares);
        double variance = (sumSquares + sum * sum / 
            sequence.Count) / (sequence.Count - 1);
        return variance;
    }

    public double Sum(List<double> sequence)
    {
        if (sequence == null)
            throw new ArgumentNullException("sequence", 
            "Sequence must not be null");
        double total = 0;
        sequence.ForEach(num => total += num);

        return total;
    }
}
comments powered by Disqus

Featured

  • Entity Framework Core 6: What Developers Want

    Microsoft outlined its plan for Entity Framework Core 6, which in November will take its place as the data access component of the landmark .NET 6, a long-term support (LTS) release that will mark Microsoft's transition from the Windows-only .NET Framework to an open source, cross-platform umbrella offering of all things .NET.

  • AWS Open Sources .NET Porting Assistant GUI

    After previously open sourcing components of its Porting Assistant for .NET, Amazon Web Services open sourced the tool's GUI.

  • .NET Core Ranks High Among Frameworks in New Dev Survey

    .NET Core placed high in a web-dominated ranking of development frameworks published by CodinGame, which provides a tech hiring platform.

  • Here's a One-Stop Shop for .NET 5 Improvements

    Culled from reams of Microsoft documentation, here's a high-level summary of what's new for performance, networking, diagnostics and more, along with links to the nitty-gritty details for those wanting to dig in more.

Upcoming Events