Kotlin Class Functions
Methods that define what objects can do
⚙️ What are Class Functions?
Class functions (also called methods) define the actions that objects can perform. They operate on the object's data and provide behavior, like teaching your objects how to do specific tasks and interact with the world.
class Calculator {
fun add(a: Int, b: Int): Int {
return a + b
}
fun greet() {
println("Hello! I'm a calculator.")
}
}
Usage:
val calc = Calculator()
calc.greet() // Hello! I'm a calculator.
val result = calc.add(5, 3) // 8
Key Function Concepts
Parameters
Input values for functions
fun greet(name: String) { }
Return Values
Output from functions
fun add(): Int { return 5 }
Visibility
Control access to functions
private fun helper() { }
This Reference
Access current object
this.property = value
🔹 Basic Class Functions
Functions that perform actions and return values:
class BankAccount(private var balance: Double) {
// Function with no parameters, returns value
fun getBalance(): Double {
return balance
}
// Function with parameter, no return value
fun deposit(amount: Double) {
if (amount > 0) {
balance += amount
println("Deposited $amount. New balance: $balance")
} else {
println("Invalid deposit amount")
}
}
// Function with parameter and return value
fun withdraw(amount: Double): Boolean {
return if (amount > 0 && amount <= balance) {
balance -= amount
println("Withdrew $amount. New balance: $balance")
true
} else {
println("Insufficient funds or invalid amount")
false
}
}
}
fun main() {
val account = BankAccount(100.0)
println("Initial balance: ${account.getBalance()}")
account.deposit(50.0)
val success = account.withdraw(30.0)
println("Withdrawal successful: $success")
}
Output:
Initial balance: 100.0
Deposited 50.0. New balance: 150.0
Withdrew 30.0. New balance: 120.0
Withdrawal successful: true
🔹 Functions with Default Parameters
Make functions more flexible with default parameter values:
class MessageSender {
fun sendMessage(
message: String,
recipient: String = "Everyone",
priority: String = "Normal",
encrypt: Boolean = false
) {
val encryptionStatus = if (encrypt) "Encrypted" else "Plain text"
println("[$priority] To: $recipient")
println("Message: $message")
println("Security: $encryptionStatus")
println("---")
}
}
fun main() {
val sender = MessageSender()
// Using all defaults except message
sender.sendMessage("Hello World!")
// Specifying recipient
sender.sendMessage("Meeting at 3 PM", "Team")
// Using named parameters
sender.sendMessage(
message = "Confidential data",
recipient = "Manager",
priority = "High",
encrypt = true
)
}
Output:
[Normal] To: Everyone
Message: Hello World!
Security: Plain text
---
[Normal] To: Team
Message: Meeting at 3 PM
Security: Plain text
---
[High] To: Manager
Message: Confidential data
Security: Encrypted
---
🔹 Private Helper Functions
Use private functions to organize code and hide implementation details:
class PasswordValidator {
fun validatePassword(password: String): Boolean {
println("Validating password...")
return hasMinimumLength(password) &&
hasUpperCase(password) &&
hasLowerCase(password) &&
hasDigit(password)
}
// Private helper functions
private fun hasMinimumLength(password: String): Boolean {
val isValid = password.length >= 8
if (!isValid) println("❌ Password must be at least 8 characters")
else println("✅ Length requirement met")
return isValid
}
private fun hasUpperCase(password: String): Boolean {
val isValid = password.any { it.isUpperCase() }
if (!isValid) println("❌ Password must contain uppercase letter")
else println("✅ Uppercase requirement met")
return isValid
}
private fun hasLowerCase(password: String): Boolean {
val isValid = password.any { it.isLowerCase() }
if (!isValid) println("❌ Password must contain lowercase letter")
else println("✅ Lowercase requirement met")
return isValid
}
private fun hasDigit(password: String): Boolean {
val isValid = password.any { it.isDigit() }
if (!isValid) println("❌ Password must contain a digit")
else println("✅ Digit requirement met")
return isValid
}
}
fun main() {
val validator = PasswordValidator()
println("Testing weak password:")
val isValid1 = validator.validatePassword("weak")
println("Valid: $isValid1\n")
println("Testing strong password:")
val isValid2 = validator.validatePassword("StrongPass123")
println("Valid: $isValid2")
}
Output:
Testing weak password:
Validating password...
❌ Password must be at least 8 characters
Valid: false
Testing strong password:
Validating password...
✅ Length requirement met
✅ Uppercase requirement met
✅ Lowercase requirement met
✅ Digit requirement met
Valid: true