Derived Type Procedures
Constructor Helper
Building a Value
A module function can act as a constructor helper when initialization needs a rule before the value is returned.
Program
Play the program to choose the raw port and build a validated server value.
constructor_helper.f90
module server_model
implicit none
type :: server
character(len=12) :: host
integer :: port
end type server
contains
function make_server(raw_port) result(item)
integer, intent(in) :: raw_port
type(server) :: item
item%host = 'local'
item%port = max(raw_port, 1)
end function make_server
end module server_model
program constructor_helper_demo
use server_model
implicit none
integer :: raw_port
type(server) :: app
raw_port =
app = make_server(raw_port)
print '(A, A, I0)', trim(app%host), ':', app%port
end program constructor_helper_demo
module server_model
implicit none
type :: server
character(len=12) :: host
integer :: port
end type server
contains
function make_server(raw_port) result(item)
integer, intent(in) :: raw_port
type(server) :: item
item%host = 'local'
item%port = max(raw_port, 1)
end function make_server
end module server_model
program constructor_helper_demo
use server_model
implicit none
integer :: raw_port
type(server) :: app
raw_port =
app = make_server(raw_port)
print '(A, A, I0)', trim(app%host), ':', app%port
end program constructor_helper_demo
module server_model
implicit none
type :: server
character(len=12) :: host
integer :: port
end type server
contains
function make_server(raw_port) result(item)
integer, intent(in) :: raw_port
type(server) :: item
item%host = 'local'
item%port = max(raw_port, 1)
end function make_server
end module server_model
program constructor_helper_demo
use server_model
implicit none
integer :: raw_port
type(server) :: app
raw_port =
app = make_server(raw_port)
print '(A, A, I0)', trim(app%host), ':', app%port
end program constructor_helper_demo
constructor helper
`make_server` returns a fully initialized derived-type value.
component assignment
`item%host` and `item%port` assign fields before returning.
validation rule
`max(raw_port, 1)` keeps the port positive.