ZetCode

FreeBasic Type Keyword

last modified June 16, 2025

The FreeBasic Type keyword allows creating user-defined types (UDTs). These are composite data types that group related variables together. UDTs help organize complex data structures in your programs.

Basic Definition

In FreeBasic, Type defines a new data structure containing one or more members. Each member can be of any valid FreeBasic data type, including other UDTs. Types are similar to structs in C or records in Pascal.

UDTs provide better code organization, improved readability, and easier data management. They are essential for object-oriented programming in FreeBasic. The Type block must end with End Type.

Simple Type Declaration

This example shows how to declare a basic user-defined type.

simple_type.bas
Type Point
    x As Integer
    y As Integer
End Type

Dim p As Point
p.x = 10
p.y = 20

Print "Point coordinates: ("; p.x; ", "; p.y; ")"

Here we define a Point type with x and y coordinates. We then declare a variable of this type and access its members using dot notation. This creates a logical grouping for related data.

Type with Different Data Types

Types can contain members of various data types.

mixed_type.bas
Type Employee
    name As String
    age As Integer
    salary As Double
    isActive As Boolean
End Type

Dim emp As Employee
emp.name = "John Smith"
emp.age = 42
emp.salary = 55000.75
emp.isActive = True

Print "Employee: "; emp.name
Print "Age: "; emp.age
Print "Salary: $"; emp.salary
Print "Active: "; emp.isActive

This Employee type combines string, integer, double, and Boolean members. Each member stores different aspects of employee data. The example shows how to initialize and access these members.

Type with Arrays

Types can contain array members for storing multiple values.

type_with_array.bas
Type Student
    name As String
    grades(4) As Integer  ' Array of 5 grades
End Type

Dim s As Student
s.name = "Alice"
s.grades(0) = 85
s.grades(1) = 90
s.grades(2) = 78
s.grades(3) = 92
s.grades(4) = 88

Print "Student: "; s.name
Print "Grades:";
For i As Integer = 0 To 4
    Print " "; s.grades(i);
Next
Print

The Student type includes a string for the name and an integer array for grades. This demonstrates how to work with array members within a type, including initialization and access.

Nested Types

Types can contain other types as members, enabling complex data structures.

nested_types.bas
Type Address
    street As String
    city As String
    zip As String
End Type

Type Person
    name As String
    age As Integer
    home As Address
End Type

Dim p As Person
p.name = "Bob Johnson"
p.age = 35
p.home.street = "123 Main St"
p.home.city = "Springfield"
p.home.zip = "12345"

Print "Name: "; p.name
Print "Address: "; p.home.street; ", "; p.home.city; " "; p.home.zip

This example shows a Person type that contains an Address type. We access nested members using multiple dot operators. This creates a hierarchical data structure.

Type with Procedures

FreeBasic allows adding procedures (methods) to types for object-oriented programming.

type_with_procedures.bas
Type Rectangle
    width As Double
    height As Double
    
    Declare Function Area() As Double
    Declare Sub Resize(newWidth As Double, newHeight As Double)
End Type

Function Rectangle.Area() As Double
    Return width * height
End Function

Sub Rectangle.Resize(newWidth As Double, newHeight As Double)
    width = newWidth
    height = newHeight
End Sub

Dim rect As Rectangle
rect.width = 10.5
rect.height = 20.3

Print "Initial area: "; rect.Area()
rect.Resize(15.0, 25.0)
Print "New area: "; rect.Area()

Here we define a Rectangle type with data members and methods. The Area function calculates the area, while Resize modifies the dimensions. This demonstrates basic object-oriented capabilities.

Type Initialization

Types can be initialized using various methods in FreeBasic.

type_initialization.bas
Type Book
    title As String
    author As String
    pages As Integer
    price As Double
End Type

' Method 1: Individual member assignment
Dim b1 As Book
b1.title = "The Hobbit"
b1.author = "J.R.R. Tolkien"
b1.pages = 310
b1.price = 12.99

' Method 2: Initializer list
Dim b2 As Book = ("Dune", "Frank Herbert", 412, 15.50)

' Method 3: With statement
Dim b3 As Book
With b3
    .title = "1984"
    .author = "George Orwell"
    .pages = 328
    .price = 9.99
End With

Print b1.title; " by "; b1.author
Print b2.title; " by "; b2.author
Print b3.title; " by "; b3.author

This example shows three ways to initialize type variables: individual member assignment, initializer lists, and the With statement. Each method has its advantages depending on the situation.

Type Pointers

Pointers to types allow efficient manipulation of type variables.

type_pointers.bas
Type Car
    make As String
    model As String
    year As Integer
End Type

Dim myCar As Car
myCar.make = "Toyota"
myCar.model = "Corolla"
myCar.year = 2020

Dim pCar As Car Ptr = @myCar

Print "Car details:"
Print "Make: "; pCar->make
Print "Model: "; pCar->model
Print "Year: "; pCar->year

Here we create a pointer to a Car type variable. The arrow operator (->) accesses members through the pointer. This is useful for passing large types efficiently.

Best Practices

This tutorial covered the FreeBasic Type keyword with practical examples showing its usage in different scenarios. Types are powerful tools for organizing complex data in your programs.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all FreeBasic Tutorials.