Fluent.Calculations.Primitives 1.1.0-aplha.57

This is a prerelease version of Fluent.Calculations.Primitives.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package Fluent.Calculations.Primitives --version 1.1.0-aplha.57                
NuGet\Install-Package Fluent.Calculations.Primitives -Version 1.1.0-aplha.57                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Fluent.Calculations.Primitives" Version="1.1.0-aplha.57" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Fluent.Calculations.Primitives --version 1.1.0-aplha.57                
#r "nuget: Fluent.Calculations.Primitives, 1.1.0-aplha.57"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Fluent.Calculations.Primitives as a Cake Addin
#addin nuget:?package=Fluent.Calculations.Primitives&version=1.1.0-aplha.57&prerelease

// Install Fluent.Calculations.Primitives as a Cake Tool
#tool nuget:?package=Fluent.Calculations.Primitives&version=1.1.0-aplha.57&prerelease                

Logo

Quality gate SonarCloud

Quality Gate Status Maintainability Rating

Nuget Nuget (with prereleases) Nuget GPLv3 License

Fluent Calculations

One of the more powerful ways to make a program readable is to break the calculations up into intermediate values that are held in variables with meaningful names. - Robert C. Martin, Clean Code, A Handbook of Agile Craftsmanship

<div align="justify"> By following this principle together wit Fluent Calculations library we gain an ability to write readable calculations as well as get insights at runtime. </div>

Motivation

<div align="justify"> <p> Having worked on many line of business and some finance applications authors have observed a common difficulty of understating and communicating non-trivial business logic or calculations. </p><p> Validating the correctness of financial calculations, like tax calculations for example, involves a lot of effort on analyst or tester side. For a developer pinpointing problems from just the final result is challenging, thus often we resort to manual debugging. </p><p> TDD falls short of communicating more complex test cases to business people as it relies on quite granular decomposition. Splitting up some algorithms is not always a good option too, due to loss of the original conciseness. Troubleshooting calculations happening in a production environment is impossible without deploying some manual logging that makes code noisy and less readable. </p> <p> This project attempts to provide a clean way to get an <b>"X-ray"</b> of calculations or business logic. </p> </div>

The Goal

Spend minutes of programming to save hours of debugging and testing.

Features

  • Number (Decimal) and Condition (Boolean) datatype are supported,
  • Seamlessly use C# math and logic operators,
  • Build isolated calculation components,
  • Close to no boilerplate code,
  • Serialize calculation tree to JSON,
  • Generate DOT graph output of your calculations,
  • Render graph as an image.

Get Started

Fluent.Calculations can be installed using the Nuget package manager or the dotnet CLI.

dotnet add package Fluent.Calculations.Primitives

Documentation

Usage/Examples

Basic demo calculation:

public class Demo : EvaluationScope<Number>
{
    Number
        A = Number.Of(1),
        B = Number.Of(2),
        C = Number.Of(3);

    Number D => Evaluate(() => A + B);

    Number E => Evaluate(() => D * C);

    public override Number Return() => E;
}

Number result = new Demo().ToResult();

The result value can be :

<img src="../assets/example/fluent-calculations-demo.dot.png" alt="Demo calculation graph rendering" width="280" height="auto">

Challenges

  • Explore ways to introduce concept of units (Meters, Kilograms, etc.).
  • Expand a list of supported operations and math functions.
  • Explore ways to optimize lambda expression compilation.
  • Explore a ways to reuse existing calculations and attempt to benefit from :
    • Cache compiled expressions,
    • Cache evaluation results,
    • Partial execution depending on changed parameters.
  • Explore thread-safety aspects.

License

GNU General Public License v3.0

Authors

🚀 About The Team

We are bunch of .NET practitioners always looking for ways to make code great.

Give it a star ⭐

Loving it? Show your support by giving this project a star!

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on Fluent.Calculations.Primitives:

Package Downloads
Fluent.Calculations.DotNetGraph

A bridge between Fluent.Calculations.Primitives and DotNetGraph

Fluent.Calculations.Graphviz

Package Description

Fluent.Calculations.Primitives.Benchmarks

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.0-aplha.59 71 3/24/2024
1.1.0-aplha.58 64 3/24/2024
1.1.0-aplha.57 62 3/24/2024
1.1.0-aplha.56 67 3/24/2024
1.1.0-aplha.55 63 3/23/2024
1.1.0-aplha.54 54 3/23/2024
1.1.0-aplha.53 64 3/23/2024
1.1.0-aplha.52 62 3/21/2024
1.1.0-aplha.51 67 2/24/2024
1.1.0-aplha.50 75 2/22/2024
1.1.0-aplha.49 110 1/11/2024
1.1.0-aplha.48 100 12/30/2023
1.1.0-aplha.47 73 12/30/2023
1.1.0-aplha.46 78 12/30/2023
1.1.0-aplha.45 65 12/30/2023
1.1.0-aplha.44 71 12/30/2023
1.1.0-aplha.43 75 12/30/2023
1.1.0-aplha.42 79 12/30/2023
1.1.0-aplha.41 79 12/30/2023
1.1.0-aplha.40 83 12/28/2023
1.1.0-aplha.39 82 12/21/2023
1.1.0-aplha.38 82 12/18/2023
1.1.0-aplha.37 81 12/17/2023
1.1.0-aplha.36 93 12/5/2023
1.1.0-aplha.35 85 11/27/2023
1.1.0-aplha.34 75 11/22/2023
1.1.0-aplha.33 73 11/19/2023
1.1.0-aplha.32 73 11/16/2023
1.1.0-aplha.31 69 11/15/2023
1.1.0-aplha.30 72 11/13/2023
1.1.0-aplha.29 74 11/11/2023
1.1.0-aplha.28 71 11/10/2023
1.1.0-aplha.27 71 11/10/2023
1.1.0-aplha.26 67 11/10/2023
1.1.0-aplha.25 75 11/9/2023
1.1.0-aplha.24 73 11/9/2023
1.1.0-aplha.23 70 11/9/2023
1.1.0-aplha.22 72 11/9/2023
1.1.0-aplha.21 78 11/9/2023
1.1.0-aplha.20 70 11/9/2023
1.1.0-aplha.19 70 11/9/2023
1.1.0-aplha.18 74 11/9/2023
1.1.0-aplha.17 74 11/9/2023
1.1.0-aplha.16 69 11/8/2023
1.1.0-aplha.15 71 11/8/2023
1.1.0-aplha.14 72 11/8/2023
1.1.0-aplha.13 87 11/3/2023
1.1.0-aplha.12 84 10/31/2023
1.1.0-aplha.11 75 10/30/2023
1.1.0-aplha.10 86 10/25/2023
1.1.0-aplha.9 75 10/23/2023
1.1.0-aplha.8 77 10/19/2023
1.1.0-aplha.7 81 10/16/2023
1.1.0-aplha.6 90 10/9/2023
1.1.0-aplha.5 80 10/8/2023
1.1.0-aplha.4 89 10/8/2023
1.1.0-aplha.3 84 9/24/2023
1.1.0-aplha.2 79 9/22/2023
1.1.0-aplha.1 81 9/19/2023
1.1.0-alpha 91 9/12/2023
1.0.19-alpha.1 86 9/12/2023
1.0.19-alpha 84 9/12/2023
1.0.18-alpha.4 85 9/11/2023
1.0.18-alpha.3 82 9/11/2023
1.0.18-alpha.2 84 9/11/2023
1.0.17-alpha 87 9/10/2023
1.0.16-alpha 94 9/10/2023
1.0.7-alpha 85 8/25/2023
1.0.6-alpha 95 8/23/2023
0.0.0-alpha.0.31 90 9/11/2023
0.0.0-alpha.0 79 9/11/2023