Tuesday, December 6, 2016

What is Optional in Swift!!!

                       Apple's new programming language language swift is a very safe language. It will try to make sure that your code is not going to crash. To do this swift provides a feature called optional type. This optional type will store wrapped value if present and nil if no value presents. That basically means any optional variable either contains a value or nil. Lets see deep into optional type. The Optional type is a enumerated value with two values nil and some value which are represented as below.
  • Optional.none
  • Optional.some(value)
How to use optional: There  are two ways to  use - long form and short form. Mostly short form will be used, but we will see here both for better understanding purpose. Short form is represented by post question mark ?, and long form is represented by Optional key word.

let shortForm: Int? = Int("77")
let longForm: Optional = Int("77")

Optional Binding: We can use optional variable by unwrapping  the value, so that there wont be any runtime error. To unwrap conditionally we have three options
  • if let
  • gaurd let
  • switch
Optional Chaining: Optional chaining is a process for calling methods and properties on a optional that could be nil. if the optional contains a value, it will succeeds and proceeds for the next value, if the optional is nil, it simply returns nil. multiple optional method callings can be chained together and the entire chain will be failed gracefully if any one of the value is nil.

if let someResult = someValue?.someMethod()?.someAnotherMethod()
{
    print("Success")
} else {
    print("failed")
}
Nil-Coalescing Operator: This will be used for the optional to set default value for the nil optional value. And this can be used by doubel question mark ??. This can be also used as chaining

let someResult = someValue?? anotherValue

In this case, someResult will be someValue if it has value and anotherValue if someValue is nil.

Chaining example:
let someResult = someValue?? anotherValue?? anotherValue1

Unconditional Unwrapping: If you are sure that optional has a value,then this unconditional unwrapping will be used  by specifying  forced unwrap operator (postfix !). The problem with this feature is, if the optional value is nil, you will get run time error or possibly your app may crash.

let number = Int("77")!
print(number)
// Prints "77"

It is also possible to use chaining using postfix !.

let isPNG = imagePaths["image"]!.hasSuffix(".png")
print(isPNG)
// Prints "true"

Happy Swifting!!!

References:
Apple Doc

Monday, December 5, 2016

Difference between class and struct in Swift!!!


Structures and classes in swift follow the same syntax for variable, constants and methods. And below are the common things in both class and struct.
  • Properties
  • Methods
  • Initializers to initialize values
  • Conform to protocols
And the main differences are
  • Class supports inheritance and structs not
  • Classes are reference types and structs are value types
Value Type:  When copying or assigning one value type variable to another value type variable, whole data will be copied and they are entirely two new objects. If any change in one object doesn't effect another object. Structures are value types.

//struct definition
struct Name{
    var first = "Pasumarthi"
    var last = "Chandra"
}

//struct variable initialization
var name = Name()

//copying name objet to anotherName object
var anotherName = name

//modifying
anotherName.last = "Chandra sekhar"

print("\(name.first) \(name.last)")
print("\(anotherName.first) \(anotherName.last)")


Result:
Pasumarthi Chandra
Pasumarthi Chandra sekhar

In the above swift code snippet, I have created structure object name and which is assigned to another structure object anotherName and modified anotherName property last, and displayed both name and anotherName objects and both displayed different values.

Reference Type: When copying or assigning one reference type variable to another reference type variable, both will be pointing to the same object and if any change in one object will effect the another object as both are pointing to the same reference. Classes are reference types.

//Class definition
class NameAsClass{
    var first = "Pasumarthi"
    var last = "Chandra"
}

//class initialization
var nameAsClass = NameAsClass()
//Copying one class object to another class object
var anotherNameAsClass = nameAsClass
//modifying 
anotherNameAsClass.last = "Chandra sekhar"
print("\(nameAsClass.first) \(nameAsClass.last)")
print("\(anotherNameAsClass.first) \(anotherNameAsClass.last)")

Result:
Pasumarthi Chandra sekhar
Pasumarthi Chandra sekhar

In the above swift code snippet, I have created class object nameAsClass and which is assigned to another class object anotherNameAsClass and modified anotherNameAsClass property last, and displayed both nameAsClass and anotherNameAsClass objects and both displayed same values.

References:
Click


Happy Coding!!!!



Thursday, December 1, 2016

How to write safe and secure code!!!

                                 Coding is very easy task to do, but writing safe and secure code is difficult. In this post I will try to explain some of the rules/steps to make safe and secure code. If we follow these steps we can eliminate most of the failures in our software. As a coder, we need to find out all possible failure cases first and handle them. Some where I read statement like "A developer is like a cab driver in India who sees both sides in one way road". I think this statement is very true. In software application anything can happen, no software is secure and any software can crash at any time due to some simple mistake in the code. So to avoid all simple and silly mistakes and making more safe and secure code, below are the rules with no specific order you need to follow without fail.

  • Static Code Analysis(Static analyzer)
  • Test Driven Development(TDD)
  • Code Review
  • Pair Programming

Static Code Analysis: Basically what static analysis will do is, it just scans our code and find out possible errors. There could be some copy-paste errors, some human errors etc. All these can be identified by Static analyzers. Static analysis done by static analyzer which is simply another software which can scan our code and generate report with all errors and warnings.There are lot of open source and commercial static analyzers available on the web. Here are some of simple errors which  identified by static analyzer.

Test Driven Development(TDD): In TDD, first instead of writing code for functionality, need to write all possible test cases for that functionality. After finishing all test cases, run those test cases once. All these test cases will fail as there is no code available for the functionality. Now start writing the code to pass all these test cases. Believe me, It helps a lot in eliminating most of the bugs in the initial stage. Writing test cases for existing code is difficult. So always start tests cases before writing actual functionality. It will take some extra time, but it helps a lot.

Code Review: This is one of the traditional way of finding out silly mistake done by developers. Always make sure that your code is reviewed by some one. Some others reviewing your code doesn't mean that you are not good in coding, it eliminates if any mistakes and it boasts your confidence levels if there are no comments :-) So Always go for the code review and don't skip it.

Pair Programming: This is another new way of coding. Most of the developers thinks that if they are alone, they can write code quickly and efficiently. Yes that is true. But occasionally do pair programming. If possible code with new developer and some times with senior developer. While doing pair programming, basically two developers are seeing that code and two brains are working right!!. In this case, if any mistakes done, another developer identifies it and s/he may give another better way of writing the same code.

                        Till now I have not specified any secure programming techniques rite? If you follow above rules, you can easily eliminate lot of common security related issues. All these steps are not specific to any particular programming language. In whatever  language you are going to write, always follow these steps. Nowadays we have lot of IDE's (like XCode, Eclipse) which are supporting inbuilt frameworks to support static analyzers and TDD.

Enjoy Coding!!!
Happy Coding!!!


References:
Click

Popular Posts