Fungsi, prosedur dan tipe primitif dasar

Ubah file dpr dari pelajaran sebelumnya menjadi konten berikut

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
program MyProgram;
procedure MyProcedure(const A: Integer);
begin
  WriteLn('A + 10 is: ', A + 10);
end;
function MyFunction(const S: string): string;
begin
  Result := S + 'strings are automatically managed';
end;
var
  X: Single;
begin
  WriteLn(MyFunction('Note: '));
  MyProcedure(5);
  // Pembagian pakai "/" selalu menghasilkan bilangan pecahan, gunakan "div" untuk pembagian bulat
  X := 15 / 5;
  WriteLn('X is now: ', X); // notasi ilmiah
  WriteLn('X is now: ', X:1:2); // 2 angka di belakang koma
end.Code language: PHP (php)
D:\fpcdemo>fpc mydemo.dpr
Free Pascal Compiler version 3.2.2 [2021/05/15] for i386
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling mydemo.dpr
Linking mydemo.exe
20 baris dikompilasi, 0,0 detik, 39248 byte kode, 2484 byte data

D:\fpcdemo>mydemo
Note: strings are automatically managed
A + 10 is: 15
X is now:  3.000000000E+00
X is now: 3.00

D:\fpcdemo>Code language: CSS (css)

Berikut penjelasan komentar per baris. Karakter non-Inggris bisa tampil rusak; atur encoding konsol agar bisa menampilkan tulisan Mandarin dengan benar.

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
program MyProgram; 
// Nama program buatan sendiri. Program konsol Pascal harus dimulai dengan program nama; baru kemudian deklarasi variabel, prosedur dan logika utama

// Tanpa nilai kembalian: procedure prosedur. Prosedur dan fungsi hanya berjalan jika dipanggil
procedure MyProcedure(const A: Integer);
begin
  WriteLn('A + 10 =:', A + 10);
end;

// Ada nilai kembalian: function fungsi
function MyFunction(const S: string): string;
begin
  Result := S + 'memori string dikelola otomatis oleh sistem';
end;

// Object Pascal tidak punya fungsi main, blok terluar begin...end. menjadi titik masuk program, ini blok utama
var
  X: Single; // Tipe dasar bilangan pecahan presisi tunggal
begin 
  // Semua logika yang akan dijalankan ditulis di sini
  WriteLn(MyFunction('Peringatan:'));
  MyProcedure(5);

  // Operator "/" selalu menghasilkan bilangan pecahan, pakai div untuk pembagian bilangan bulat
  X := 15 / 5;
  WriteLn('X is now:', X); // Tampil otomatis pakai notasi ilmiah
  WriteLn('X is now:', X:1:2); // Batasi dua angka di belakang koma
end. // end. pakai titik menandakan program selesai sepenuhnyaCode language: PHP (php)

Setiap fungsi dan prosedur memiliki pasangan begin dan end untuk batas isi fungsi, setara dengan kurung kurawal { } di C, C++, Java dan bahasa lain.

WriteLn mencetak teks ke konsol, tanda kutip tunggal ‘ ‘ membungkus literal string. WriteLn('A + 10 =:', A + 10); akan mencetak berurutan string A + 10 =: lalu hasil perhitungan A + 10.

Satu program hanya boleh memiliki satu blok luar begin dan end. yang berisi semua kode utama dan memanggil fungsi serta prosedur lain di dalamnya.

X := 15 / 5;
WriteLn(‘X is now: ‘, X); // notasi ilmiah
WriteLn(‘X is now: ‘, X:1:2); // dua angka desimal

/ adalah operator pembagian pecahan, hasil bagi selalu bilangan desimal.

Dua baris pertama adalah arahan prakompilasi

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}Code language: PHP (php)

Ini adalah arahan kompilasi bersyarat khusus FPC

  • {$ifdef FPC}: Jalankan pengaturan di tengah hanya jika kompiler yang dipakai adalah Free Pascal
  • {$mode objfpc}: Beralih ke mode sintaks ObjFpc
  • {$H+}: Aktifkan string panjang (tipe string modern dengan manajemen memori otomatis, wajib pakai)
  • {$J-}: Nonaktifkan konstanta yang bisa diubah (konstanta tidak boleh diganti saat program jalan, lebih aman)
  • {$endif}: Akhir blok bersyarat

Fungsi: Hanya aktifkan sintaks modern saat dikompilasi pakai FPC; kompiler Delphi akan melewati seluruh blok ini.

{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}Code language: PHP (php)

Kompilasi bersyarat lintas platform

  • MSWINDOWS: Hanya berlaku di sistem operasi Windows
  • {$apptype CONSOLE}: Tetapkan program sebagai aplikasi konsol (muncul jendela terminal hitam bukan jendela GUI). Baris ini diabaikan saat kompilasi di Linux/macOS.

Poin Pengetahuan Inti

  • string tipe primitif bawaan; FPC/Delphi kelola memori secara otomatis, tidak perlu rilis manual
  • procedure prosedur: Tanpa nilai kembalian; function fungsi: Ada nilai kembalian disimpan di variabel bawaan Result
  • Pemisahan pembagian: / pembagian pecahan; div pembagian bilangan bulat potong desimal
  • Cetak format variabel:lebarTotal:angkaDesimal untuk atur tampilan bilangan pecahan
  • Fungsi rekursif tanpa parameter wajib pakai kurung kosong () agar tidak ambigu sintaks
  • Exit(nilai) bisa tentukan langsung nilai kembalian dan akhiri fungsi lebih awal
  • Fungsi bisa dipanggil tanpa simpan nilai kembalian, cocok untuk logika efek samping seperti ubah variabel global

Aturan Nilai Kembalian Fungsi

  1. Variabel khusus bawaan Result simpan nilai yang dikembalikan fungsi, baca dan tulis sama seperti variabel lokal biasa
function MyFunction(const S: string): string;
begin
  Result := S + 'One';
  Result := Result + 'Two';
end;
Code language: PHP (php)
  1. Sintaks lama bisa langsung tetapkan nilai ke nama fungsi (MyFunction := xxx), tidak disarankan karena sulit dibaca; gunakan seragam Result.

C/C++/Java/C# pakai = untuk penugasan dan == untuk perbandingan sama. Pascal kebalikannya: := untuk isi variabel, satu = untuk bandingkan, sama dengan notasi matematika.

Pascal tidak punya operator ==

Ganti MyFunction lama di contoh dengan versi di atas. Fungsi ini menambahkan “One” lalu “Two” di akhir string yang dikirim saat panggilan.

String akhir yang dikembalikan: string asli + One + Two

Panggilan Rekursif

Fungsi tanpa parameter saat rekursif wajib pakai kurung kosong () untuk bedakan “jalankan fungsi” dan “baca nilai kembalian saat ini”:

function SumIntegersUntilZero: Integer;
var I: Integer;
begin
  ReadLn(I);
  Result := I;
  if I <> 0 then
    Result := Result + SumIntegersUntilZero(); // panggil rekursif pakai ()
end;
Code language: JavaScript (javascript)

Penjelasan fungsi tanpa parameter SumIntegersUntilZero:

  1. SumIntegersUntilZero()jalankan fungsi rekursif dan ambil nilai kembalian
  2. SumIntegersUntilZero → akses variabel internal Result (nilai kembalian milik fungsi sendiri)

Kode tanpa kurung:

Result := Result + SumIntegersUntilZero;

Kompiler akan artikan sebagai:

Result := Result + Result;

Sama dengan Result := Result * 2, logika rekursif rusak total, terjadi loop tak hingga dan angka terus berlipat ganda.

Di contoh ini, fungsi panggil dirinya sendiri berulang sampai input bernilai 0 baru keluar; selama input bukan nol rekursi terus berjalan.

Exit: Keluar Lebih Awal

  1. Exit tanpa parameter: Langsung keluar fungsi, kembalikan nilai Result yang sudah diisi
  2. Exit(nilai): Tentukan langsung nilai kembalian dan tutup fungsi, setara return x di bahasa C
function AddName(const ExistingNames, NewName: string): string;
begin
  if ExistingNames = '' then
    Exit(NewName); // Langsung kembalikan NewName dan hentikan fungsi
  Result := ExistingNames + ', ' + NewName;
end;
Code language: PHP (php)
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
program MyProgram;
procedure MyProcedure(const A: Integer);
begin
  WriteLn('A + 10 is: ', A + 10);
end;

function AddName(const ExistingNames, NewName: string): string;
begin
  if ExistingNames = '' then
    Exit(NewName); 
  Result := ExistingNames + ', ' + NewName;
end;

var
  X: Single;
begin
  WriteLn(AddName('Tom','Jack'));
  WriteLn(AddName('Tom',''));
  WriteLn(AddName('','Jack'));
end.Code language: PHP (php)

Panggil Fungsi Seperti Prosedur (Abaikan Nilai Kembalian)

Meskipun fungsi punya nilai kembalian, bisa hanya jalankan logika dan abaikan hasilnya; cocok untuk logika efek samping seperti ubah variabel global:

var
  Count, MyCount: Integer;
function CountMe: Integer;
begin
  Inc(Count); // Efek samping: tambah variabel global satu
  Result := Count;
end;
begin
  Count := 10;
  CountMe;   // Abaikan nilai kembalian, hanya jalankan logika, Count jadi 11
  MyCount := CountMe; // Simpan nilai kembalian, Count jadi 12
end.
Code language: PHP (php)

Contoh lengkap berjalan

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
program MyProgram;

var
  Count, MyCount: Integer;

function CountMe: Integer;
begin
  Inc(Count); 
  Result := Count;
end;

begin
  Count := 10;
  WriteLn(CountMe);   
  MyCount := CountMe;
  WriteLn(MyCount);
end.Code language: PHP (php)

Inc fungsi standar bawaan Pascal (FPC/Delphi), gunanya tambah variabel sebesar 1.

var adalah kata kunci deklarasi variabel Pascal, fungsinya definisikan variabel.

var
  Count, MyCount: Integer;Code language: JavaScript (javascript)

var: Buka blok deklarasi variabel

Count, MyCount: Dua nama variabel

Integer: Tipe bilangan bulat

Variabel yang dideklarasikan di blok var contoh ini bersifat global, bisa dipakai semua prosedur dan fungsi di seluruh program.

Fungsi, prosedur dan tipe primitif dasar

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *