Scala Naming Standards

From bibbleWiki
Revision as of 05:13, 10 September 2025 by Iwiseman (talk | contribs) (Case Classes)
Jump to navigation Jump to search

Scala Naming Standards

This page defines naming conventions for Scala codebases, supporting consistency, readability, and onboarding clarity. Inspired by the TypeScript standards used in Bibble projects.

Variables

Use camelCase for local and mutable variables.

Example: var userName = "John"

Values

Use camelCase for immutable values.

Example: val maxRetries = 3

Functions

Use camelCase for method and function names.

Example: def calculateTotal(): Double = { ... }

Parameters

Use camelCase for function parameters.

Example: def getUser(userId: String): User = { ... }

Classes

Use PascalCase for class names.

Example: class UserAccount { ... }

Traits

Use PascalCase for trait names.

Example: trait Serializable { ... }

Objects

Use PascalCase for singleton objects.

Example: object UserManager { ... }

Case Classes

Use PascalCase for the case class name, and camelCase for its attributes.

Example: case class UserProfile(userName: String, birthYear: Int)

Enumerations

Use PascalCase for enum types and members.

Example: enum UserRole {

 case Admin, Editor, Viewer

}

Constants

Use UPPER_SNAKE_CASE for global constants, or camelCase for scoped values.

Example: val MAX_RETRY_ATTEMPTS = 5 val apiEndpoint = "https://api.example.com"

Private Members

Use camelCase with optional underscore prefix for internal fields.

Example: private var _balance: Double = 0.0

Public Members

Use camelCase for public fields and methods.

Example: val name: String

Type Parameters

Use single uppercase letters or PascalCase for generic types.

Example: class Box[T] or class Response[TItem]

File Names

Use PascalCase.scala for class/trait/object files.

Example: UserProfile.scala, LoginService.scala

Package Names

Use lowercase dot-separated names.

Example: com.bibble.usermanagement

Companion Objects

Use the same name as the class or trait they accompany.

Example: class User { ... } object User { ... }