With Scala sum types, you can establish type strictness. But can you restrict creation of instances of sum types? So that you can guarantee that the values they hold pertain to the types defined.
Scala community like others needs a platform for discussions and exchange thoughts and ideas. Above all, a platform where fellow programmers, old or new, can reach out for help and guidance, a platform for education and to breed and spread knowledge. Is Discord the right choice of platform? More importantly, is moving from Gitter to Discord the right choice?
While Scala allows creating defining ADTs, unfortunately all the sum types and their associated definitions have to be defined in the same file as the sealed trait
(ADT). This post discusses the situation of defining the sum type (companions) across multiple files.
Is Confluence your documentation / knowledge-management system? Are you sick of its shortcomings? Poor and non-standard rendering. Lack of markdown support. Weird and inconsistent handling of unicode. Do you still think Confluence is a boon for document writing? Just be aware that there are better alternatives.
A primer on Anorm to use the interesting parts - core and combinator functions, as opposed to the mundane way of reading the column from Row
. The post highlights situations when you don’t have a predefined type for the parsed row, and you are dealing with discrete columns in the result set based on time and need.
New tool on the block is scala-cli
(from virtuslab.org) - a clean simple approachable non-fluff command line first interface to the Scala language.
Many languages support union types, and it is high time Scala did. Union types are coming in upcoming version of Scala - Dotty. Union types (|) are already being compared with Either and Option (disjoint unions).
Avoid .get
at all costs. Forget there is even a .get
function on Option
. There is always a way out - better one, than using .get
. Same applies to .head
If you are going to have access the value in an Option
in a test class, prefer extending your test class from OptionValues
. Then you can use .value
on an Option
. Doing so establishes the presence of value as verification with meaningful error if value is not defined.
It is common to see mocks being setup this way in unit tests.
scenario("Test Case 1") {
...
when(addressResolutionService.resolve(...)).thenReturn(...)
when(vendorInventoryService.checkInventory(...)).thenReturn(...)
...
.... another bunch of when and then returns
when(shipmentService.schedule(...)).thenReturn(...)
...thisIsTheActualCalltoTest(...)
verify(vendorInventoryService, 1).checkInventory(...)
... other such verifications
}
scenario("Test Case 2") {
...
when(addressResolutionService.resolve(...)).thenReturn(...)
when(vendorInventoryService.checkInventory(...)).thenReturn(...)
...
.... another bunch of when and then returns ...give or take one or more mocks compared to the previous test ...
when(shipmentService.schedule(...)).thenReturn(...)
...thisIsTheActualCalltoTest(...)
verify(vendorInventoryService, 1).checkInventory(...)
... other such verifications
}
... other such test cases