How to optimize this?
I have following:
Imagine I will call
using System;
namespace SquareCalculus
{
internal class FigureTriangle : IFigure
{
private readonly double _sideA;
private readonly double _sideB;
private readonly double _sideC;
public FigureTriangle(
double sideA,
double sideB,
double sideC)
{
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(sideA, nameof(sideA));
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(sideB, nameof(sideB));
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(sideC, nameof(sideC));
_sideA = sideA;
_sideB = sideB;
_sideC = sideC;
}
public double CalculateSquare()
{
var perimetr = (_sideA + _sideB + _sideC) / 2;
var square = Math.Sqrt(perimetr
* (perimetr - _sideA)
* (perimetr - _sideB)
* (perimetr - _sideC));
return square;
}
public bool IsRightTriangle()
{
var sides = new double[] { _sideA, _sideB, _sideC };
Array.Sort(sides);
return Math.Pow(sides[2], 2) == Math.Pow(sides[0], 2) + Math.Pow(sides[1], 2);
}
}
}using System;
namespace SquareCalculus
{
internal class FigureTriangle : IFigure
{
private readonly double _sideA;
private readonly double _sideB;
private readonly double _sideC;
public FigureTriangle(
double sideA,
double sideB,
double sideC)
{
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(sideA, nameof(sideA));
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(sideB, nameof(sideB));
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(sideC, nameof(sideC));
_sideA = sideA;
_sideB = sideB;
_sideC = sideC;
}
public double CalculateSquare()
{
var perimetr = (_sideA + _sideB + _sideC) / 2;
var square = Math.Sqrt(perimetr
* (perimetr - _sideA)
* (perimetr - _sideB)
* (perimetr - _sideC));
return square;
}
public bool IsRightTriangle()
{
var sides = new double[] { _sideA, _sideB, _sideC };
Array.Sort(sides);
return Math.Pow(sides[2], 2) == Math.Pow(sides[0], 2) + Math.Pow(sides[1], 2);
}
}
}Imagine I will call
IsRightTriangleIsRightTriangle twice with the same parameters. It is not optimal to do sorting etc again again.. So how can I fix it?