3 ms·
Nope. The author is a C programmer too. The post is talking about who writes the interface that client code relies on. Is it the author of a package (eg like h
by aboodman 7y ago
Nope. The author is a C programmer too.
The post is talking about who writes the interface that client code relies on. Is it the author of a package (eg like header files) or the user of the package?
In Go and Typescript its easy for users to write their own interfaces describing just the functionality they rely on. This makes testing a lot easier.
- hesk 7y agoHow does the compiler know that the implementing class can be used where the interface is required? Is there still something like "Backend extends ProfilePage" in Java?
- kubanczyk 7y agoNot like "extends" or "implements". If a class implements all the methods of the interface (as seen at compile-time - same method name, arguments, returns) then that's it, period. Compiler will allow you to use it. Beyond that the interface doesn't "know" about the class and the class doesn't "know" about the interface. So it doesn't matter the interface didn't even exist when that class was written.
- hesk 7y agoSounds a lot like Python's duck typing to me. (Although Python would coerce the types if they don't match.)
- kevincox 7y agoIt is. "Structural typing" is basically "compile time duck typing". One major notable advantage is that you are checking the existence of every method you may call, not just the ones your tests happen to use.
- mcqueenjordan 7y agoSimilar in some ways, but duck typing is a misnomer because it doesn't involve typing. These are type classes, or what Rust calls Traits.
- aboodman 7y ago> duck typing is a misnomer because it doesn't involve ... dang, the joke was so close
- Too 7y agoJavascript (without typescript) also has duck typing. The difference with structural typing is that the interface is formalized and enforced compile time. Python 3.7 added compile structural typing using what they call Protocols. It works very similar to typescript. See https://www.python.org/dev/peps/pep-0544/ https://www.python.org/dev/peps/pep-0544/
- msbarnett 7y ago> How does the compiler know that the implementing class can be used where the interface is required Structural typing. The instance does not assert to the compiler an exhaustive list of all interfaces it claims to conform to; instead, the compiler determines, during compilation, whether the concrete instance being passed meets the requirements of a declared interface. The net result is that an implementation need not have known about an interface when it was written; it need merely match the interface’s requirements when called upon to do so. It is, effectively, statically enforced duck typing.
- aboodman 7y agoBefore someone “but Haskell”’s me: ... In Go, Typescript, and many other languages, but sadly lacking in many of today’s most popular languages...