Snowball Docs
SocialsContributeTry out online!Standard Library
  • 👋Welcome to snowball!
  • Overview
    • 🐈Why Snowball
    • ✨Language Features
  • fundamentals
    • 🛠️Getting started
    • 📝Installation
      • ‼️Common install issues
    • 👶Hello world!
  • language reference
    • 🌐Global Scope
    • 🤖Functions
      • 🐣Basic syntax
      • 😵Function Generics
      • ❓External functions
      • 🔧Function Attributes
      • 💢LLVM Functions
      • 🚪Program Entries
    • 🎭Types
      • 🔢Primitive types
      • 🔀Reference types
      • ☝️Pointer types
      • 🔓Mutability
      • ⁉️Type generics
      • 🔖Type aliases
      • 🚯Unknown pointer type (void pointers)
    • 🔄Casting
      • 🔐Mutability casting
      • 🦺Dynamic casting
      • 👨‍🎓Type conversions
    • 🏗️Classes
      • 💼Members
      • 🔒Access qualifiers
      • 🛑Final classes
      • 🍧Abstract classes
    • 🔏Access qualifiers
    • ⚒️Macros
      • ✨Builtin macros
    • 🔫Unsafe snowball
    • 😴Generics
    • 🌳Code Flow
      • ☝️If statements
    • 📦Modules
      • 👉Using Statement
  • snowball cli usage
    • 💻CLI usage and parameters
    • 🧪Testing mode
  • Confy
    • ⚙️Getting Started
    • 🐈Snowball's Schema
  • Reky Package Manager
    • 📦Getting Started
  • coding style
    • 💅The desired standard
Powered by GitBook
On this page
  • How to declare generic parameters
  • Where clause

Was this helpful?

Edit on GitHub
  1. language reference

Generics

How to declare generic parameters

Generic parameters have the same syntax for classes/struct/interfaces and functions.

class MyOwnInsanelyFastList<T> {...}
func important_function<T>() {...}

The overall syntax is

[name]<[...[<generic name>: [where clause] [ = <default type>]]]>

Neither classes/functions/etc... are type-checked if they contain generics

note: fn hello<>() {...} counts as a generic function

Where clause

The where clause is used as a way to make sure the correct generic has been passed. For example, let's imagine you are making a vector class that only what's T to be a Sized type. (all types implement Sized except those whose size is not known at compile time, for example, void)

class MyVector<T: Sized> {...}

Here, snowball checks if the given generics implements the given types.

let a: MyVector<void> // error: void doesn't implement "Sized"
let b: MyVector<i32> // ok

You can declare where clauses separately to either check for other types or better reading:

class Vector<T: Sized> {
   func to_string<>() 
      where T: ToString
   { ... } 
}
PreviousUnsafe snowballNextCode Flow

Last updated 1 year ago

Was this helpful?

😴