⇒ Using the command line to compile and run Kotlin code
⇒ Kotlin runtime
⇒ The REPL
⇒ Kotlin for scripting
⇒ Kotlin with Gradle
⇒ Kotlin with Maven
⇒ IntelliJ and Kotlin
⇒ Eclipse and Kotlin
⇒ Mixing Kotlin and Java in a project
⇒ Vals and vars
⇒ Type inference
⇒ Basic types
⇒ Numbers
⇒ Booleans
⇒ Chars
⇒ Strings
⇒ Arrays
⇒ Comments
⇒ Packages
⇒ Imports
⇒ Wildcard imports
⇒ Import renaming
⇒ String templates
⇒ Ranges
⇒ Loops
⇒ Exception handling
⇒ Instantiating classes
⇒ Referential equality and structural equality
⇒ This expression
⇒ Scope
⇒ Visibility modifiers
⇒ Private
⇒ Protected
⇒ Internal
⇒ Control flow as expressions
⇒ Null syntax
⇒ Smart casts
⇒ Explicit casting
⇒ When expression
⇒ When (value)
⇒ When without argument
⇒ Function Return
⇒ Type hierarchy
⇒ Defining functions
⇒ Single expression functions
⇒ Member functions
⇒ Local functions
⇒ Top-level functions
⇒ Named parameters
⇒ Default parameters
⇒ Extension functions
⇒ Extension function pre
⇒ Extension functions on nulls
⇒ Member extension function
⇒ Overriding member extension functions
⇒ Companion object extensions
⇒ Multiple return values
⇒ Infix functions
⇒ Operators
⇒ Operator overloading
⇒ Basic operators
⇒ In/contains
⇒ Get/set
⇒ Invoke
⇒ Comparison
⇒ Assignment
⇒ Java interop
⇒ Function literals
⇒ Tail recursive functions
⇒ Varargs
⇒ Spread operator
⇒ Standard library functions
⇒ Apply
⇒ Let
⇒ With
⇒ Run
⇒ Lazy
⇒ Use
⇒ Repeat
⇒ Require/assert/check
⇒ Generic functions
⇒ Pure functions
⇒ Java from Kotlin
⇒ Getters and setters
⇒ Single abstract methods
⇒ Escaping Kotlin identifiers
⇒ Java void methods
⇒ Kotlin from Java
⇒ Top-level functions
⇒ Default parameters
⇒ Object and static methods
⇒ Erasure naming
⇒ Checked exceptions
⇒ Higher order functions
⇒ Returning a function
⇒ Function assignment
⇒ Closures
⇒ Anonymous functions
⇒ Function references
⇒ Top-level function references
⇒ Member and extension function references
⇒ Bound references
⇒ Function-literal receivers
⇒ Functions in the JVM
⇒ Bytecode
⇒ Function composition
⇒ Inline functions
⇒ Noinline
⇒ Currying and partial application
⇒ Currying in action
⇒ Adding currying support
⇒ Memoization
⇒ Implementing memoization
⇒ Type alias
⇒ Either
⇒ Fold
⇒ Projection
⇒ Why use properties?
⇒ Syntax and variations
⇒ Visibility
⇒ Late initialization
⇒ Delegated properties
⇒ Lazy initializations
⇒ Lateinit versus lazy
⇒ Observables
⇒ A non-null property delegate
⇒ Properties or methods?
⇒ Nullable types
⇒ Smart cast
⇒ Safe null access
⇒ Force operator
⇒ Elvis operator
⇒ Safe casting
⇒ Optionals
⇒ Creating and returning an Optional
⇒ Using an Optional
⇒ Reflection
⇒ KClass
⇒ Instantiation using reflection
⇒ Constructors
⇒ Instantiation with callBy
⇒ Objects and companions
⇒ Useful KClass properties
⇒ Reflective functions and properties
⇒ Invoking a function reflectively
⇒ Declared and undeclared
⇒ Annotations
⇒ Annotation parameters
⇒ Parameterised functions
⇒ Parameterized types
⇒ Bounded polymorphism
⇒ Upper bounds
⇒ Multiple bounds
⇒ Type variance
⇒ Invariance
⇒ Covariance
⇒ Covariant return
⇒ Contravariance
⇒ Variance overview
⇒ Nothing type
⇒ Type projection
⇒ Type erasure
⇒ Type reification
⇒ Recursive type bounds
⇒ Algebraic data types
⇒ Automatic creation of getters and setters
⇒ The copy method
⇒ toString out of the box
⇒ hashCode and equals methods generated for you
⇒ Destructed declarations
⇒ Destructing types
⇒ Data class definition rules
⇒ Class hierarchy
⇒ Arrays
⇒ Lists
⇒ Maps
⇒ Sets
⇒ Threads
⇒ Blocking
⇒ Creating a thread
⇒ Stopping a thread
⇒ Thread interrupts
⇒ CPU-bound versus I/O-bound
⇒ Deadlocks and livelocks
⇒ Dining philosophers problem
⇒ Executors
⇒ Race conditions
⇒ Monitors
⇒ Locks
⇒ Read-write locks
⇒ Semaphores
⇒ The bounded buffer problem
⇒ Concurrent collections
⇒ ConcurrentHashMap
⇒ A blocking queue
⇒ Atomic variables
⇒ CountDownLatch
⇒ Cyclic Barrier
⇒ Non-blocking I/O and asynchronous programming
Duration
2-3 MonthsAvailable Seats
15Online Training Schedule
8.00 pm to 10.00 pmIndustrial Training Schedule in Chandigarh
8.00 am to 7.00 pm