# Partial Functions in Scala

Introduction:
When a function is not able to produce a return for every single variable input data given to it then that function is termed as Partial function. It can determine an output for a subset of some practicable inputs only. It can only be applied partially to the stated inputs.
Some important points:

• Partial functions are beneficent in understanding many inconsistent kind of Scala functions.
• It can be interpreted by utilizing case statements.
• It is a Trait, which needs two methods namely isDefinedAt and apply to be implemented.

Example:

 `// Scala program of  ` `// Partial function ` ` `  `// Creating object  ` `object` `Case ` `{ ` ` `  `    ``// Main method ` `    ``def` `main(args``:` `Array[String]) ` `    ``{ ` ` `  `        ``// Creating Partial function  ` `        ``// using two methods ` `        ``val` `r ``=` `new` `PartialFunction[Int, Int]  ` `        ``{ ` ` `  `            ``// Applying isDefinedAt method  ` `            ``def` `isDefinedAt(q``:` `Int) ``=` `q !``=` `0` ` `  `            ``// Applying apply method ` `            ``def` `apply(q``:` `Int) ``=` `12` `* q ` ` `  `        ``}  ` ` `  `        ``// Displays output if the ` `        ``// condition is satisfied ` `        ``println(r(``10``)) ` `    ``} ` `} `

Output:

```120
```

Here, two methods are defined for applying Partial function, where isDefinedAt states the condition and apply performs the operation if the given condition is satisfied.
Methods to define Partial functions:
There are some methods to define Partial function, which includes case statements, collect method, andThen, and orElse.

• Partial function using Case statement:
we will create a Partial function below using case statement.
Example:

 `// Scala program using ` `// case statements ` ` `  `// Creating object  ` `object` `Case ` `{ ` ` `  `    ``// Main method ` `    ``def` `main(args``:` `Array[String]) ` `    ``{ ` ` `  `        ``// Creating Partial function ` `        ``val` `d``:` `PartialFunction[Int, Int] ``=` `        ``{ ` ` `  `            ``// using case statement  ` `            ``case` `x ``if` `(x ``%` `3``) ``==` `0` `=>` `x * ``3` `        ``} ` ` `  `        ``// Displays output if  ` `        ``// the condition is  ` `        ``// satisfied ` `        ``println(d(``3``)) ` `    ``} ` `} `

Output:

```9
```

Here, Partial function is created using case statement so, apply and isDefinedAt is not required here.

• Partial function using orElse:
This method is helpful in chaining Partial functions together.
Example:

 `// Scala program using ` `// orElse ` ` `  `// Creating object  ` `object` `orElse ` `{ ` ` `  `    ``// Main method ` `    ``def` `main(args``:` `Array[String]) ` `    ``{ ` ` `  `        ``// Creating Partial function1 ` `        ``val` `M``:` `PartialFunction[Int, Int] ``=`  `        ``{ ` ` `  `            ``// using case statement  ` `            ``case` `x ``if` `(x ``%` `5``) ``==` `0` `=>` `x * ``5` `        ``} ` ` `  `        ``// Creating Partial function2  ` `        ``val` `m``:` `PartialFunction[Int, Int] ``=`  `        ``{ ` ` `  `            ``// using case statement  ` `            ``case` `y ``if` `(y ``%` `2``) ``==` `0` `=>` `y * ``2` `        ``} ` ` `  `        ``// chaining two partial  ` `        ``// functions using orElse  ` `        ``val` `r ``=` `M orElse m ` ` `  `        ``// Displays output for  ` `        ``// which the given condition  ` `        ``// is satisfied ` `        ``println(r(``5``)) ` `        ``println(r(``4``)) ` `    ``} ` `} `

Output:

```25
8
```

Here, orElse will return output for which the given condition is satisfied.

• Partial function using Collect method:
Collect method requests Partial function to every single element of the collection and thus, helps in constructing a new collection.
Example:

 `// Scala program using ` `// collect method ` ` `  `// Creating object  ` `object` `Collect ` `{ ` ` `  `    ``// Main method ` `    ``def` `main(args``:` `Array[String]) ` `    ``{ ` ` `  `        ``// Creating Partial function ` `        ``val` `M``:` `PartialFunction[Int, Int] ``=`  `        ``{ ` ` `  `            ``// using case statement  ` `            ``case` `x ``if` `(x ``%` `5``) !``=` `0` `=>` `x * ``5` `        ``} ` ` `  `        ``// Applying collect method ` `        ``val` `y ``=` `List(``7``, ``15``, ``9``) collect { M } ` ` `  `        ``// Displays output for which  ` `        ``// the given condition  ` `        ``// is satisfied ` `        ``println(y) ` `    ``} ` `} `

Output:

```List(35, 45)
```

Here, Collect will apply Partial function to all the elements of the List and will return a new List on the basis of the conditions stated.

• Partial function using andThen:
This method appends at the end of the chains, which is utilized to continue towards additional chains of Partial functions.
Example:

 `// Scala program using ` `// andThen method ` ` `  `// Creating object  ` `object` `andThen ` `{ ` ` `  `    ``// Main method ` `    ``def` `main(args``:` `Array[String]) ` `    ``{ ` ` `  `        ``// Creating Partial function ` `        ``val` `M``:` `PartialFunction[Int, Int] ``=` `        ``{ ` ` `  `            ``// using case statement  ` `            ``case` `x ``if` `(x ``%` `4``) !``=` `0` `=>` `x * ``4` `        ``} ` ` `  `        ``// Creating another function ` `        ``val` `append ``=` `(x``:` `Int) ``=>` `x * ``10` ` `  `        ``// Applying andThen method  ` `        ``val` `y ``=` `M andThen append ` ` `  `        ``// Displays output after  ` `        ``// appending the another ` `        ``// function given ` `        ``println(y(``7``)) ` `    ``} ` `} `

Output:

```280
```

Here, andThen will append the output of Partial function with the another function given and then will return that value.

Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape, GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out - check it out now!

Similar Reads