SCALA INTRODUCTION

  • date 17th January, 2022 |
  • by Prwatech |
  • 0 Comments

Introduction | Tour of Scala

  Scala is a strong statically typed general-purpose programming language which supports both object-oriented programming and functional programming. Designed to be concise, many of Scala's design decisions are aimed to address criticisms of Java.  Scala started from 2001. Founder of Scala is also the founder of Javac. Started working with Java Compiler. Martin Odersky is the founder of Scala. Scala term collected from “Scalable” . It is scalable language.  Question: Comparison of Scala with OOPS:  Answer:  
  • Scala is more concise, elegant and easy to read/write. 
  • In Scala I line code, is equal to 10 line of Java. 
  • Scala is a Pure object oriented language. 
  • Scala doesn't support "static" keyword. Instead, we have singleton object in Scala. 
  • If your class and object Name is same. Then that class is known as companion class. 
  • Scala does not complain it's complier if data type is not given to variable. 
  • Scala function does not require any return type. unless function is recursive. 
Scala Comparison with Functional programming language (Python, ruby): - 
  • In any functional programming language, by default they support immutability. Though, Scala gives choice to user. 
  • In Scala, functions are first class citizens. 
  • Lazy evaluation  
  • Futures. 
  • Closures. 
 Framework: 
  1. Play: Web based app 
  1. Scalding: It means Scala + Cascading (Hibernate) 
  1. Spark: In memory 
  1. Akka : Multi-threading  
  1. Kafka: mq 
  1. Neoyj : Graph DB 

Question: Difference between immutable and mutable  

Answer: Immutable means not changeable. In Scala for assign the immutable value we use val    val = immutable means can’t change   Example:  
val s ="Scala" 

val f = 201.67
  Mutable means changeable. In Scala for assign the mutable value we use var  var= mutable means can change   Example:
var name = "Prwatech" 

name= "Tech"
    Important points: 
  • This operation is happened on RAM. Current session where we write code and run is known as REPL (Read evaluate print loop). 
  • : q use to go out from the cell 
  • System hold one address of x which we call memory address. 
  • X: mapped with some number. 
  • Memory address that depends internal algorithm  
  Immutable and mutable   val: for immutable   var: for mutable   here some other application  Example:  
val x= 1 to 10
  x: scala.collection.immutable.Range.Inclusive = Range (1,2,3,4,5,6,7,8,9,10)  Range:  
  • Range is immutable  
  • Range is created by default immutable  
Immutable has two internal concepts. 
  1. First logic you cannot grow, sink the size once its defined. 
  1. Always index stat 0 
  1. However, you may change index value. 

Question: How can access index? 

Answer:   It always starts from 0  Example:  
 x(0) 

 Int =1 

 x(1) 

 Int =2 

 x(10) 

java.lang.IndexOutOfBoundsException :10 

 x(9) 

 Int =10
    if we range this 9 index value from 9 to 100   
x(9)=100
    <console>:13: error: value update is not a member of scala.collection.immutable.Range.Inclusive   
x(9)=100. 

 val x1=1 until 10
  x1:scala.collection.immutable.Range= Range(1,2,3,4,5,6,7,8,9)  until 10 means last number excluded.  scala>x1  res5:scala.collection.immutable.Range=Range(1,2,3,4,5,6,7,8,9)   
 val y =1 to 10 by 2
    y:scala.collection.immutable.Range=Range(1,3,5,7,9)  it will create the same size of y but skipping step size by 2  blo belongs to integer data type    
 val blo :{var a=20;var b=20;b-a} 

blo :Int =0 

 val blo :{var a=20;var b=30;b-a} 

blo :Int =10
    here Return function is optional.  Return function   Return function is only using when function is recursive. Recursive means function calling itself. Factorial functions are recursive function.   
 var con= if(blo>9 && blo<25) “one” else 0
    con: Any = one  One is a string data type and 0 is an integer data type. Here we are using mixed data type it will throw compilation error.  It will give compilation error because two different data type is there in your written statement.  Scala say when there are mixed data type not necessary string and int, it can be long and double, Int and string, Float and string any combination with two different families.  Whenever mixed data type hence there supertype is “Any”   Whenever program is stuck we use supertype Any. But from the optimization site is not good. And when we use Any .it will have more range than this two.  Nutshell:   If there are two different datatypes which are mixing two each other from two different families. We can use “ANY”. 

LAZY EVALUATION 

  • Lazy evaluation is one of the terrific concept in all the programming language. In fact, to speed up website performance to perform up scaling, down scaling on server. Everywhere we are using this Lazy evaluation. 
  • Lazy in fact given server less architecture using lambda and other things  
  • Lazy applied with product architecture. 
How Lazy Evaluation works :   
 var opt1: Int =300  

Opt1: Int =300
   
  • Opt1 is a variable reference for us and this 300 has some memory address on JVM (Java virtual machine) Because compilation of Scala is on Java virtual machine. 
  • When we want 300 call opt1 and this is assigned in memory. So this memory we can call RAM. 
  • Whenever we do program or anything we perform it always goes to first volatile space after volatile then they go to permanent which is disc operation. 
  • Once it goes to RAM immediately it goes to CPU after this memory and try to execute this 300. Whatever is the size of this 300. Let if we consider Int the size of Int 4 byte of this go to CPU and occupy CPU. Some space of CPU.some % of CPU and try to execute 4 bytes and then will give one Answer 300. 
Scala> lazy var   It will have stopped execution. CPU request will have stopped. The Lazy does not work with var. This is architectural acceptance itself.  Lazy var(not applicable ) 
  • Var is mutable and with mutable Lazy is not applicable . 
 
Var x=10 

X=20 

X=30 

X=40
  Var is mutable x can be 10,20,30,40. If this is keep changing performance will degrade and hence this have discarded the concept of var  Lazy val(applicable ) 
  • Only val can be Lazy. 
Operation:   There are two operations. 
  • Transformation: when we are not requesting to CPU  
  • Action: requesting to CPU 
Every execution is taking 1 minute.   

How to read file in SCALA? 

  Scala> val f1 =file handling operation(“file path”)function to see the data  Scala>val f1 = scala.io.Source.fromFile(“file path.txt”).mkString  If it throws error FileNotFound Exception  Then we will create file first then use syntax to read a file   Conditional Expression:  Total 7 conditional expressions. 
  1. If  
  1. If else 
  1. Nested if else  
  1. If else ladder 
  1. For  
  1. While  
  1. Break  
How to apply for or inner forloop    
 val flop = for(i<-1 to 3)println(i)
    1  2  3  Floop:unit()         Operators: 
  • Arithmetic operator 
  • Logical operator  
Logical operator  
  • And (&&): Both conditions true result will be true else false  
  • OR (||): Any one of conditions true result will be true else false 
  • NOT(!)  
Even vale works on the concept of mod      
 val flop =for (i<-1 to 10;if(i%2==0)println(i)
  2  4  6  8  10  Floop: unit ()  Unit:void type  floop, for loop is type of unit. Why it is not storing anything because using println statement. Println just print that in the console not actually storing anything in this loop.  IF we want to that another operation. The function name yield. This will give the output and store in floop .  If want to store it: yield operation  If want doesn’t store use println    Introduction | Tour of Scala

Quick Support

image image