Question: Calculate area of hall for 5 flats in a floor.
Solution:
Suppose we have A building with 9th floor. And we have to calculate the area of 5 flat whose dimension are given below
A-901 length len= 40.96, Width wid =20.00
A-902 length len =35.84, Width wid =22.08
A-903 length len =30.08, Width wid =16.00
A-904 length len =45.50, Width wid =25.00
A-905 length len =45.30, Width wid = 23.35
Logic to find out the area of 5 flats of building whose dimensions are given: [len*wid]: logic
Output:
819.2
788.48
480.0
1137.5
964.355
Process finished with exit code 0
Note: without constructor, complier will never return any output
println is nothing it’s a by default constructor.
constructor means it will print something.
Step: of complier
Answer:
Primary constructor allows to perform encapsulation.
Encapsulation has two points: It allows to perform getter and setter method.
Getter: Try to access the value. It allows only access. Does not allow to change it. By default, immutable. Immutable means val.
Setter: Setter can change and can change means mutable.
class Scala_Wel{ def area(len:Double,wid:Double):Double ={ val c = (len*wid) println(c) } } object Scal{ def main(args: Array[String]):Double = { val s1 = new Scala_Wel() val s2 = new Scala_Wel() val s3 = new Scala_Wel() val s4 = new Scala_Wel() val s5 = new Scala_Wel() s1.area(40.96, 20.00) s2.area(35.84, 22.00) s3.area(30.00, 16.00) s4.area(45.5, 25.00) s5.area(41.3, 23.35) } }
Classes, Functions and variables all these are by default public.
when we don’t write in Scala by default
No modifiers: by default, public
modifiers:
only the same class can access or the subclass can access or the same package can access.
Types of modifiers:
What is the access pattern?
Modifiers | ||||||
Outside
Package |
Same Package | Same Class | Sub Class | Companion Class | ||
1 | No Modifier | Yes | Yes | Yes | Yes | Yes |
2 | Private | No | No | Yes | No | Yes |
3 | Protected | No | No | Yes | Yes | Yes |
got to Scala class: kind it has class, case object, object, case object, trait.
always we need a main method. Without main method compiler will never wake up.
If we use extends App, then no need to type main method
object Prop_Vol extends App { //def main(args:Array[String]) ={} println("Helli Scala") }
Helli Scala
Process finished with exit code 0
How to create a method:?
def main(args:Array[String]): Unit = {
}
main method cannot have more methods inside. We cannot write methods inside method
For example:
def main(args:Array[String]): Unit = {
def vol ……….cannot write like this inside def function def vol
}
def cannot have inside def.
Example of singleton object.
The below example is for singleton. It’s a singleton object because there no class directly object
object Prop_Vol { def main(args:Array[String])={ def vol(l:Double,w:Double,h:Double)={ (l*w*h) } println("This is vol of marriage hall"+vol(17.8,12.5,19.0)) }
This is vol of marriage hall4227.5
Process finished with exit code 0
How to instantiate Prop_Vol?
object Prop_Vol { def main(args:Array[String])= { println("This is vol of marriage hall"+vol(17.8,12.5,19.0)) } def vol(l:Double,w:Double,h:Double)= { (l * w * h) val p = new Prop_Vol() } }
object Prop_Vol { def main(args:Array[String])= { println("This is vol of marriage hall"+vol(17.8,12.5,19.0)) val p = new Prop_Vol() def vol(l:Double,w:Double,h:Double)= { (l * w * h) } } Page Break Can not resolve symbol Pro_Vol object Prop_Vol { def main(args:Array[String])= { println("This is for area1:" +area(len =18.0f,wid= 16.5f)) println("This is for area 2:" +area(len=20.0f,wid=18.2f)) } def area(len:Float,wid:Float) = { (len*wid) } }
This is for area1:297.0
This is for area 2:364.0
Process finished with exit code 0
We cannot instantiate here we can just write a method a same object. But outside object it will get an issue.
what are Scala class object case object, trait and Scala worksheet in intellij IDE and how to select for efficient programming
Factorial function is recursion. recursive means function calling function.
5! = 5*4*3*2*1
logic
n! =n*(n-1) *(n-2) *(n-3) ………………………………………………………….(n-n+1)
How to use logic in syntax?
Python logic for factorial, java logic for factorial, Scala logic for factorial. logic is same in all the languages only syntax is different
Fibonacci series :0,1, (0+1=1), (1+1=2), (1+2=3), (2+3=5), …………………
any recursive function needs return type.
How write factorial methods in Scala
Factorial without using class
object Prop_Vol { def main(args:Array[String])= { println("output of factorial 5!:" + facto(5)) } def facto(n:BigInt):BigInt = { if(n==0)1 else n*facto(n-1) } } output of factorial 5!:120 Process finished with exit code 0 object Prop_Vol { def main(args:Array[String])= { println("output of factorial 10!:" + facto(10)) } def facto(n:BigInt):BigInt = { if(n==0)1 else n*facto(n-1) } } output of factorial 10!:3628800 Process finished with exit code 0 object Prop_Vol { def main(args:Array[String])= { println("output of factorial 6!:" + facto(6)) } def facto(n:BigInt):BigInt = { if(n==0)1 else n*facto(n-1) } } output of factorial 6!:720 Process finished with exit code 0 object Prop_Vol { def main(args:Array[String])= { println("output of factorial 3!:" + facto(3)) } def facto(n:BigInt):BigInt = { if(n==0)1 else n*facto(n-1) } } output of factorial 3!:6 Process finished with exit code 0
the factorial using class: in class we can write function within function then we can call it from my object .
class Factorial_new { def facto(n:BigInt):BigInt={ if(n==0)1 else n*(n-1) } } object Prop_Vol1{ def main(args:Array[String])={ // create instantiation for class val fn = new Factorial_new() println(fn.facto(5)) } } 20
Concept of Private:
private can be accessible only an only within the class no outside
private can be accessible only an only within the class no outside class Factorial_new { private val n = 5 def facto(n:BigInt):BigInt = { if(n==0)1 else n*facto(n-1) } } object Prop { def main(args:Array[String])={ val f = new Factorial_new() f.n } } f.n: here symbol is inaccessible from this place . due to private it can not be accessible outside the class. class Factorial_new { private val n = 0; def facto(n:BigInt):BigInt = { if(n==0)1 else n*facto(n-1) } } object Prop { def main(args:Array[String])={ val f = new Factorial_new() println(f.facto(6)) } } 720
Concept of companion:
Companion when class and object share the same names.
class Factorial_new { private val n = 0; def facto(n:BigInt):BigInt = { if(n==0)1 else n*facto(n-1) } } object Factorial_new { def main(args: Array[String]) = { val f = new Factorial_new() println(f.n) } } 0
Conditional expressions:
Whenever we want to use conditional expressions. Make sure that you are writing within the classes.
and if you are creating a function you can write within the within the singleton object.
if-else loop then you need to have a class.