ribs_units 1.0.0-dev.12
ribs_units: ^1.0.0-dev.12 copied to clipboard
Type-safe units of measurement with dimensional analysis that catches unit mismatch errors at compile time.
ribs_units #
ribs_units is a type-safe library for working with dimensional quantities and units of measure in Dart. Heavily inspired by Squants, it provides an expressive API for handling physical and digital quantities while preventing common "unit mismatch" bugs.
Features #
- Extensive Unit Support: Includes core domains like Space (Length, Area, Volume, Angle), Time (Time, Frequency), Information (Data Storage, Data Rate), Mass, Thermal (Temperature), and Motion (Velocity).
- Clean DSL: Uses Dart extension methods to allow intuitive syntax like
10.metersor5.megabytes. - Type Safety: Prevents mixing different quantities (e.g., adding meters to seconds) at compile time.
- Unit Conversions: Effortlessly convert between units within the same quantity.
- String Parsing: Robust parsing of quantity strings (e.g.,
"1.5 km","1024 MiB").
Why ribs_units? #
- Self-Documenting Code: Instead of
double timeoutSeconds, useTime timeout. - Precision & Safety: Avoid off-by-one errors or unit conversion mistakes (e.g., milliseconds vs. seconds).
- Immutability: All quantities are immutable, making them safe for concurrent or complex logic.
- Integration: Built to work as part of the larger
ribsecosystem.
Quick Examples #
Creating Quantities #
final length = 10.kilometers;
final duration = 15.minutes;
Conversions #
// Convert to a base value in specific units
final distanceInMeters = length.to(Length.meters);
print(distanceInMeters); // 10000.0
final temp = 32.fahrenheit;
print(temp.toCelsius); // 0.0 °C
Dimensional Arithmetic #
Some quantities support dimensional operations where appropriate:
final area = 10.meters * 5.meters; // Returns Area
final volume = area * 2.meters; // Returns Volume
String Parsing #
final parsed = Information.parse("1.5 GiB").getOrElse(() => throw "Invalid input");
print(parsed.toMegabytes);