currying in Swift, new declaration syntax in future?
only the declaration syntax will be removed e.g. func(a: Int)(b:Int) -> Int
func curry(a: Int)(b: Int) -> Int {
return a + b
}
is equivalent to:
func newCurry(a: Int) -> (b: Int) -> Int {
return { b in
return a + b
}
}
What is 'Currying'?
Currying is when you break down a function that takes multiple arguments into a series of functions that each take only one argument. Here's an example in JavaScript:
function add (a, b) {
return a + b;
}
add(3, 4); // returns 7
This is a function that takes two arguments, a and b, and returns their sum. We will now curry this function:
function add (a) {
return function (b) {
return a + b;
}
}
This is a function that takes one argument, a
, and returns a function that takes another argument, b
, and that function returns their sum.
add(3)(4);
var add3 = add(3);
add3(4);
The first statement returns 7, like the add(3, 4)
statement. The second statement defines a new function called add3
that will add 3 to its argument. (This is what some may call a closure.) The third statement uses the add3
operation to add 3 to 4, again producing 7 as a result.
What is a Y-combinator?
If you're ready for a long read, Mike Vanier has a great explanation. Long story short, it allows you to implement recursion in a language that doesn't necessarily support it natively.
What is the difference between Early and Late Binding?
The short answer is that early (or static) binding refers to compile time binding and late (or dynamic) binding refers to runtime binding (for example when you use reflection).
Is there a difference between YES/NO,TRUE/FALSE and true/false in objective-c?
There is no practical difference provided you use BOOL
variables as booleans. C processes boolean expressions based on whether they evaluate to 0 or not 0. So:
if(someVar ) { ... }
if(!someVar) { ... }
means the same as
if(someVar!=0) { ... }
if(someVar==0) { ... }
which is why you can evaluate any primitive type or expression as a boolean test (including, e.g. pointers). Note that you should do the former, not the latter.
Note that there is a difference if you assign obtuse values to a so-called BOOL
variable and test for specific values, so always use them as booleans and only assign them from their #define
values.
Importantly, never test booleans using a character comparison -- it's not only risky because someVar
could be assigned a non-zero value which is not YES, but, in my opinion more importantly, it fails to express the intent correctly:
if(someVar==YES) { ... } // don't do this!
if(someVar==NO ) { ... } // don't do this either!
In other words, use constructs as they are intended and documented to be used and you'll spare yourself from a world of hurt in C.
What is the difference between the const and final keywords in Dart?
There is a post on dart's website and it explains it pretty well.
Final:
"final" means single-assignment: a final variable or field must have an initializer. Once assigned a value, a final variable's value cannot be changed. final modifies variables.
Const:
"const" has a meaning that's a bit more complex and subtle in Dart. const modifies values. You can use it when creating collections, like const [1, 2, 3], and when constructing objects (instead of new) like const Point(2, 3). Here, const means that the object's entire deep state can be determined entirely at compile time and that the object will be frozen and completely immutable.
Const objects have a couple of interesting properties and restrictions:
They must be created from data that can be calculated at compile time. A const object does not have access to anything you would need to calculate at runtime. 1 + 2 is a valid const expression, but new DateTime.now() is not.
They are deeply, transitively immutable. If you have a final field containing a collection, that collection can still be mutable. If you have a const collection, everything in it must also be const, recursively.
They are canonicalized. This is sort of like string interning: for any given const value, a single const object will be created and re-used no matter how many times the const expression(s) are evaluated.
So, what does this mean?
Const:
If the value you have is computed at runtime (new DateTime.now()
, for example), you can not use a const for it. However, if the value is known at compile time (const a = 1;
), then you should use const
over final
. There are 2 other large differences between const
and final
. Firstly, if you're using const
inside a class, you have to declare it as static const
rather than just const
. Secondly, if you have a const
collection, everything inside of that is in const
. If you have a final
collection, everything inside of that is not final
.
Final:final
should be used over const
if you don't know the value at compile time, and it will be calculated/grabbed at runtime. If you want an HTTP response that can't be changed, if you want to get something from a database, or if you want to read from a local file, use final
. Anything that isn't known at compile time should be final
over const
.
With all of that being said, both const
and final
cannot be reassigned, but fields in a final
object, as long as they aren't const
or final
themselves, can be reassigned (unlike const
).
Related Topics
Swift Uisearchcontroller Wired Up in Core Data Project, App Runs, But Search Not Updating
How to Implement a Thread Safe Hashtable (Phonebook) Data Structure in Swift
Why Are Iboutlets Optionals After Swift 5 Migration
How to Automatically Reflect Coredata+Icloud Changes in Swiftui View
How to Call Initializer for Subclass of Generic Type
Difference Between Dispatchqueue Types in Swift
Xcode Error: Missing Required Module 'Firebase'
Enumerateobjectsusingblock in Swift
Swift Calling Static Methods: Type(Of: Self) VS Explicit Class Name
How to Use Swift Playground to Display Nsview with Some Drawing
How to Make a Swift Framework Submodule Really Private
Swift - Converting from Unsafepointer<Uint8> with Length to String
What's the Swift Equivalent of Objective-C's "#Ifdef _Iphone_11_0"
Swift Tableview Cell Set Accessory Type
How to Use Async/Await with Swiftui in Swift 5.5
Swiftui: How Do Style Text View with Different Font and Colour on String Subranges