ເນື້ອໃນ

# ການນຳໃຊ້ ໂປຣຊີເຈີ, ຟັງຊັນ ແລະ ຄຸນສົມບັດ

ຕໍ່ໄປນີ້ແມ່ນການອະທິບາຍກ່ຽວກັບການນຳໃຊ້ ໂປຣຊີເຈີ, ຟັງຊັນ ແລະ ຄຸນສົມບັດ ພື້ນຖານໃນ LibreOffice Basic.

ເມື່ອທ່ານສ້າງໂໂມດູນໃໝ່, LibreOffice Basic ຈະໃສ່ Sub ທີ່ຊື່ວ່າ "Main" ໃຫ້ໂດຍອັດຕະໂນມັດ. ຊື່ມາດຕະຖານນີ້ບໍ່ກ່ຽວຂ້ອງກັບລຳດັບ ຫຼື ຈຸດເລີ່ມຕົ້ນຂອງໂປຣເຈັກ LibreOffice Basic. ທ່ານສາມາດປ່ຽນຊື່ Sub ນີ້ໄດ້ຢ່າງປອດໄພ.

ມີຂໍ້ຈຳກັດບາງຢ່າງໃນການຕັ້ງຊື່ຕົວແປສາທາລະນະ, ຊັບຣູທີນ, ຟັງຊັນ ແລະ ຄຸນສົມບັດ. ທ່ານຕ້ອງບໍ່ໃຊ້ຊື່ດຽວກັນກັບໂມດູນໃດໜຶ່ງໃນຄັງ (library) ດຽວກັນ.

ໂປຣຊີເຈີ (Sub), ຟັງຊັນ (Function) ແລະ ຄຸນສົມບັດ (Property) ຊ່ວຍໃຫ້ທ່ານຈັດການໂຄງສ້າງໄດ້ງ່າຍຂຶ້ນໂດຍການແບ່ງໂປຣແກຣມອອກເປັນສ່ວນໆຕາມຕັກກະ (logic). ສ່ວນເຫຼົ່ານີ້ສາມາດນຳມາໃຊ້ຄືນໄດ້ງ່າຍໃນການເຮັດວຽກທີ່ຄ້າຍຄືກັນໃນໂປຣເຈັກອື່ນ.

## ການສົ່ງຕົວແປໄປຫາ ໂປຣຊີເຈີ, ຟັງຊັນ ຫຼື ຄຸນສົມບັດ

ຕົວແປສາມາດຖືກສົ່ງໄປຫາ ໂປຣຊີເຈີ, ຟັງຊັນ ຫຼື ຄຸນສົມບັດ ໄດ້. ໂດຍທີ່ Sub, Function ຫຼື Property ນັ້ນຕ້ອງຖືກປະກາດໃຫ້ມີການຮັບພາຣາມິເຕີ:

      Sub SubName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...)
          ' ລະຫັດຂອງທ່ານຢູ່ບ່ອນນີ້
      End Sub

Sub ຈະຖືກເອີ້ນໃຊ້ໂດຍໃຊ້ໄວຍາກອນດັ່ງນີ້:

      [Call] SubName( [Parameter1:=]Value1, [Parameter2:=]Value2, ...)

ພາຣາມິເຕີທີ່ສົ່ງໄປຫາ Sub ຕ້ອງກົງກັບທີ່ລະບຸໄວ້ໃນຕອນປະກາດ Sub.

ຂະບວນການດຽວກັນນີ້ກໍໃຊ້ກັບ Function. ນອກຈາກນັ້ນ, ຟັງຊັນຈະສົ່ງຄ່າຜົນລັດສະເໝີ. ຜົນລັດນີ້ຖືກກຳນົດໂດຍການມອບຄ່າທີ່ຕ້ອງການສົ່ງກັບໃຫ້ກັບຊື່ຟັງຊັນ:

      Function FunctionName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...) As TYPENAME
          ' ລະຫັດຂອງທ່ານຢູ່ບ່ອນນີ້
          FunctionName=Result
      End Function

Function ຈະຖືກເອີ້ນໃຊ້ໂດຍໃຊ້ໄວຍາກອນດັ່ງນີ້:

      Variable = FunctionName( [Parameter1:=]Value1, [Parameter2:=]Value2, ...)

ຄຸນສົມບັດ (Properties) ເປັນການລວມເອົາໄວຍາກອນຂອງໂປຣຊີເຈີ ແລະ ຟັງຊັນເຂົ້າກັນ. ໂດຍປົກກະຕິ Property ຈະຕ້ອງການພາຣາມິເຕີສູງສຸດໜຶ່ງຕົວ.

      Private _IsApproved As TYPENAME
      Property Get IsApproved As TYPENAME
          ' ລະຫັດຂອງທ່ານຢູ່ບ່ອນນີ້
          IsApproved = some_computation
      End Property
      Property Let IsApproved(value As TYPENAME)
          ' ລະຫັດຂອງທ່ານຢູ່ບ່ອນນີ້
          _IsApproved = computed_value
      End Property

Property ຈະຖືກເອີ້ນໃຊ້ໂດຍໃຊ້ໄວຍາກອນດັ່ງນີ້:

      var = IsApproved
      IsApproved = some_value

ທ່ານຍັງສາມາດໃຊ້ຊື່ແບບເຕັມເພື່ອເອີ້ນໃຊ້ ໂປຣຊີເຈີ, ຟັງຊັນ ຫຼື ຄຸນສົມບັດ ໄດ້:
[Call] Library.Module.Macro(), ໂດຍທີ່ Call ແມ່ນຈະໃສ່ ຫຼື ບໍ່ກໍໄດ້.
ຕົວຢ່າງ: ການເອີ້ນໃຊ້ Autotext ມາໂຄຣ ຈາກຄັງ Gimmicks, ໃຫ້ໃຊ້ຄຳສັ່ງນີ້:
Gimmicks.AutoText.Main()

## ການສົ່ງຕົວແປແບບຄ່າ (Value) ຫຼື ແບບອ້າງອີງ (Reference)

ພາຣາມິເຕີສາມາດສົ່ງໄປຫາໂປຣຊີເຈີ, ຟັງຊັນ ຫຼື ຄຸນສົມບັດ ໄດ້ທັງແບບອ້າງອີງ ຫຼື ແບບຄ່າ. ຖ້າບໍ່ໄດ້ລະບຸໄວ້ເປັນຢ່າງອື່ນ, ພາຣາມິເຕີຈະຖືກສົ່ງແບບອ້າງອີງສະເໝີ. ນັ້ນໝາຍຄວາມວ່າ Sub, Function ຫຼື Property ຈະໄດ້ຮັບພາຣາມິເຕີນັ້ນ ແລະ ສາມາດອ່ານ ຫຼື ແກ້ໄຂຄ່າຂອງມັນໄດ້.

ຖ້າທ່ານຕ້ອງການສົ່ງພາຣາມິເຕີແບບຄ່າ (by value), ໃຫ້ໃສ່ຄຳສຳຄັນ ByVal ໄວ້ທາງໜ້າພາຣາມິເຕີໃນຕອນທີ່ເອີ້ນໃຊ້ Sub, Function ຫຼື Property, ຕົວຢ່າງ:

      Function ReadOnlyParms(ByVal p2, ByVal p2)
          ' ລະຫັດຂອງທ່ານຢູ່ບ່ອນນີ້
      End Function
      result = ReadOnlyParms(parm1, parm2)

ໃນກໍລະນີນີ້ນີ້, ເນື້ອໃນຕົ້ນສະບັບຂອງພາຣາມິເຕີຈະບໍ່ຖືກແກ້ໄຂໂດຍ Function ເພາະມັນໄດ້ຮັບພຽງແຕ່ຄ່າ ບໍ່ແມ່ນຕົວພາຣາມິເຕີເອງ.

## ການກຳນົດພາຣາມິເຕີແບບເລືອກໄດ້ (Optional Parameters)

ຟັງຊັນ, ໂປຣຊີເຈີ ຫຼື ຄຸນສົມບັດ ສາມາດຖືກກຳນົດໃຫ້ມີພາຣາມິເຕີແບບເລືອກໄດ້, ຕົວຢ່າງ:

      Sub Rounding(number, Optional decimals, Optional format)
          ' ລະຫັດຂອງທ່ານຢູ່ບ່ອນນີ້
      End Sub

## ອາກິວເມັນແບບຕາມຕຳແໜ່ງ ຫຼື ແບບໃຊ້ຄຳສຳຄັນ

ເມື່ອທ່ານເອີ້ນໃຊ້ຟັງຊັນ ຫຼື ຊັບຣູທີນ, ທ່ານສາມາດສົ່ງອາກິວເມັນຕາມຕຳແໜ່ງ ຫຼື ຕາມຊື່ກໍໄດ້. ການສົ່ງຕາມຕຳແໜ່ງໝາຍເຖິງການລຽງອາກິວເມັນຕາມລຳດັບທີ່ກຳນົດໄວ້ໃນຟັງຊັນ. ສ່ວນການສົ່ງຕາມຊື່ ແມ່ນທ່ານຕ້ອງໃສ່ຊື່ພາຣາມິເຕີທີ່ກ່ຽວຂ້ອງນຳໜ້າ ແລ້ວຕາມດ້ວຍເຄື່ອງໝາຍຈ້ຳ ແລະ ເທົ່າກັບ (:=). ອາກິວເມັນແບບຄຳສຳຄັນສາມາດລຽງລຳດັບແນວໃດກໍໄດ້. ເບິ່ງຕົວຢ່າງໄດ້ຈາກຟັງຊັນ Replace() ຂອງ Basic.

ເມື່ອຕ້ອງການສົ່ງພາຣາມິເຕີພຽງບາງຕົວ, ໃຫ້ໃຊ້ອາກິວເມັນແບບຄຳສຳຄັນ. ການສົ່ງຄ່າຕາມຕຳແໜ່ງໃນກໍລະນີທີ່ມີພາຣາມິເຕີໜ້ອຍກວ່າທັງໝົດ ຈະບັງຄັບໃຫ້ທ່ານຕ້ອງລະບຸຄ່າໃຫ້ຄົບທຸກຕົວທີ່ມາກ່ອນໜ້ານັ້ນ. ແຕ່ຖ້າທ່ານສົ່ງພາຣາມິເຕີຕາມຊື່, ທ່ານສາມາດຂ້າມພາຣາມິເຕີຕົວອື່ນໆທີ່ຢູ່ລະຫວ່າງກາງໄດ້ເລີຍ.

## ຂອບເຂດຂອງຕົວແປ

ຕົວແປທີ່ກຳນົດພາຍໃນ Sub, Function ຫຼື Property ຈະມີຜົນຈົນກວ່າຈະອອກຈາກໂປຣຊີເຈີນັ້ນ. ນີ້ເອີ້ນວ່າຕົວແປ "Local" (ທ້ອງຖິ່ນ). ໃນຫຼາຍກໍລະນີ, ທ່ານອາດຕ້ອງການໃຫ້ຕົວແປນັ້ນສາມາດໃຊ້ໄດ້ໃນທຸກໂປຣຊີເຈີ, ທຸກໂມດູນ, ທຸກຄັງ ຫຼື ຍັງຄົງຢູ່ເຖິງແມ່ນວ່າຈະອອກຈາກ Sub, Function ຫຼື Property ນັ້ນໄປແລ້ວ.

### ການປະກາດຕົວແປຢູ່ນອກ Sub, Function ຫຼື Property

    Global VarName As TYPENAME

ຕົວແປຈະຍັງມີຜົນຢູ່ຕະຫຼອດໄລຍະການເປີດໃຊ້ງານ LibreOffice.

    Public VarName As TYPENAME

ຕົວແປຈະມີຜົນໃນທຸກໂມດູນ.

    Private VarName As TYPENAME

ຕົວແປຈະມີຜົນສະເພາະໃນໂມດູນນີ້ເທົ່ານັ້ນ.

    Dim VarName As TYPENAME

ຕົວແປຈະມີຜົນສະເພາະໃນໂມດູນນີ້ເທົ່ານັ້ນ.

### ຕົວຢ່າງສຳລັບຕົວແປແບບສ່ວນຕົວ (Private)

ບັງຄັບໃຫ້ຕົວແປ Private ເປັນແບບສ່ວນຕົວຢ່າງແທ້ຈິງຂ້າມໂມດູນ ໂດຍການຕັ້ງຄ່າ CompatibilityMode(True).

      ' ***** Module1 *****
      Private myText As String
      Sub initMyText
          myText = "ສະບາຍດີ"
          Print "ໃນ ໂມດູນ1 : ", myText
      End Sub

      ' ***** Module2 *****
      'Option Explicit
      Sub demoBug
          CompatibilityMode( True )
          initMyText
          ' ຕອນນີ້ສົ່ງຂໍ້ຄວາມຫວ່າງກັບມາ
          ' (ຫຼື ແຈ້ງຂໍ້ຜິດພາດຖ້າໃຊ້ Option Explicit)
          Print "ຕອນນີ້ຢູ່ໃນ ໂມດູນ2 : ", myText
      End Sub

### ການເກັບຮັກສາຄ່າໃນຕົວແປຫຼັງຈາກອອກຈາກ Sub, Function ຫຼື Property

      Static VarName As TYPENAME

ຕົວແປຈະຍັງເກັບຄ່າເດີມໄວ້ຈົນກວ່າຈະມີການກັບເຂົ້າສູ່ Function, Sub ຫຼື Property ນັ້ນອີກຄັ້ງ. ການປະກາດນີ້ຕ້ອງຢູ່ພາຍໃນ Sub, Function ຫຼື Property.

## ການລະບຸປະເພດຄ່າທີ່ສົ່ງກັບຂອງ Function ຫຼື Property

ເຊັ່ນດຽວກັບຕົວແປ, ໃຫ້ໃສ່ຕົວອັກສອນລະບຸປະເພດຫຼັງຊື່ຟັງຊັນ, ຫຼື ລະບຸດ້ວຍ As ຕາມດ້ວຍປະເພດຂໍ້ມູນທີ່ທ້າຍລາຍການພາຣາມິເຕີ ເພື່ອກຳນົດປະເພດຄ່າທີ່ສົ່ງກັບຂອງຟັງຊັນ ຫຼື ຄຸນສົມບັດ, ຕົວຢ່າງ:

      Function WordCount(WordText As String) As Integer

ຫົວຂໍ້ທີ່ກ່ຽວຂ້ອງ

ຟັງຊັນ CompatibilityMode()

ຄຳສັ່ງ Option Explicit

ຄຳສຳຄັນ Optional

ຄຳສັ່ງ Property

ຄຳສັ່ງ Static

ກະລຸນາສະໜັບສະໜູນພວກເຮົາ!