4 ms·
Unfortunately, creating a constrained type like this isn't easy (or even doable) in all programming languages. Fortunately, my preferred programming language,
by codesections 6y ago
Unfortunately, creating a constrained type like this isn't easy (or even doable) in all programming languages.
Fortunately, my preferred programming language, Raku, makes creating this sort of subset trivially easy[0]:
subset UnitInterval of Real where 0 ≤ * ≤ 1
[0]: https://docs.raku.org/language/typesystem#index-entry-subset-subset https://docs.raku.org/language/typesystem#index-entry-subset...
- johnsolo1701 6y agoIs there a difference between ≤ and <= in Raku? Curious why you used ≤ in your example.
- winthrowe 6y agoThey're equivalent, Raku defines both Ascii compatible and Unicode names for typical operators. I expect they used ≤ because it looks nicer.
- codesections 6y agoYep, correct on both counts
- tzs 6y agoIn C, I wonder if you could do something with functions and macros? Say you need to represent velocity in a transportation simulation. You could have a function, velocity, that looks like this: double velocity(double v, char * of_what) You use it to wrap constrained values. E.g., double v_jogger = velocity(8.0, "human"); double v_car = velocity(65.0, "city car"); velocity() simply returns the first argument, after doing validity checking based on the second argument. You probably couldn't reasonably use this everywhere that you would use actual constrained types in a language that has them, but you could probably catch a lot of errors just using them in initializers.
- saagarjha 6y agoThe problem you'd have is that doing any operations on such a value could take it outside the bounds of the "type".
- Razengan 6y agoIn Swift you can achieve this with Property Wrappers: @Clamping(0...14) var pH: Double = 7.0 https://nshipster.com/propertywrapper/#implementing-a-value-clamping-property-wrapper https://nshipster.com/propertywrapper/#implementing-a-value-...