Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scala: Update to Scala 3 #15

Open
wants to merge 1 commit into
base: trunk
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .github/workflows/scala.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Scala CI

on:
push:
branches: [ trunk ]
paths:
- 'expensereport-scala/**'
pull_request:
branches: [ trunk ]
paths:
- 'expensereport-scala/**'

permissions:
contents: read

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
cache: 'sbt'
- run: sbt compile scalafmtCheckAll
working-directory: expensereport-scala

2 changes: 0 additions & 2 deletions expensereport-scala/.gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
.bsp/
project/
target/
*.class
3 changes: 3 additions & 0 deletions expensereport-scala/.scalafmt.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
maxColumn = 120
runner.dialect = scala3
version = 3.7.3
2 changes: 1 addition & 1 deletion expensereport-scala/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ test:

.PHONY: clean
clean::
$(RM) -r project/ target/
sbt clean
2 changes: 2 additions & 0 deletions expensereport-scala/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Expense Report Scala
Kata for Coding Dojos
7 changes: 7 additions & 0 deletions expensereport-scala/build.sbt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
lazy val root = project
.in(file("."))
.settings(
name := "expensereport-scala",
version := "0.1.0-SNAPSHOT",
scalaVersion := "3.2.2",
)
1 change: 1 addition & 0 deletions expensereport-scala/project/build.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
sbt.version=1.8.3
1 change: 1 addition & 0 deletions expensereport-scala/project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.6")
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,44 @@ package com.nelkinda.training

import java.util.Date

class ExpenseType {
}

object ExpenseType {
val DINNER = new ExpenseType()
val BREAKFAST = new ExpenseType()
val CAR_RENTAL = new ExpenseType()
}

class Expense(val `type`: ExpenseType, val amount: Int)


class ExpenseReport {
def printReport(expenses: List[Expense]) {
var total = 0
var mealExpenses = 0

println(s"Expense Report: ${new Date()}")

for (expense <- expenses) {
if (expense.`type` == ExpenseType.DINNER || expense.`type` == ExpenseType.BREAKFAST) {
mealExpenses += expense.amount
}

var expenseName = expense.`type` match {
case ExpenseType.DINNER => "Dinner"
case ExpenseType.BREAKFAST => "Breakfast"
case ExpenseType.CAR_RENTAL => "Car Rental"
}

var mealOverExpensesMarker = if (expense.`type` == ExpenseType.DINNER && expense.amount > 5000 || expense.`type` == ExpenseType.BREAKFAST && expense.amount > 1000) "X" else " "

println(s"${expenseName}\t${expense.amount}\t${mealOverExpensesMarker}")

total += expense.amount
}

println(s"Meal Expenses: ${mealExpenses}")
println(s"Total Expenses: ${total}")
}
}
enum ExpenseType:
case DINNER, BREAKFAST, CAR_RENTAL

class Expense(
val `type`: ExpenseType,
val amount: Int
)

class ExpenseReport:
def printReport(expenses: List[Expense]): Unit =
var total = 0
var mealExpenses = 0

println("Expenses " + new Date())

for (expense <- expenses)
if (expense.`type` == ExpenseType.DINNER || expense.`type` == ExpenseType.BREAKFAST)
mealExpenses += expense.amount

var expenseName = ""
expense.`type` match
case ExpenseType.DINNER =>
expenseName = "Dinner"
case ExpenseType.BREAKFAST =>
expenseName = "Breakfast"
case ExpenseType.CAR_RENTAL =>
expenseName = "Car Rental"

val mealOverExpensesMarker =
if (
expense.`type` == ExpenseType.DINNER && expense.amount > 5000 ||
expense.`type` == ExpenseType.BREAKFAST && expense.amount > 1000
) "X"
else " "

println(expenseName + "\t" + expense.amount + "\t" + mealOverExpensesMarker)

total += expense.amount

println("Meal expenses: " + mealExpenses)
println("Total expenses: " + total)