แหล่งนิยายแปล แหล่งนิยาย นิยายแปล นิยายแต่ง มังงะ การ์ตูน อนิเมะ นายท่าน เว็บไซต์นายท่าน กระทู้สไลม์ สไลม์ยอดรัก

ผู้เขียน หัวข้อ: [เขียนโปรแกรมเรียนง่าย] บทที่ 7 - Generic type ชนิดข้อมูลแบบกว้างๆ  (อ่าน 486 ครั้ง)

ออฟไลน์ richter

  • ยอดกวีแห่งเขาเซนนิคุมะ
  • แม่ทัพหมีหนุ่ม
  • *
  • กระทู้: 2,097
  • ถูกใจแล้ว: 1317 ครั้ง
  • ความนิยม: +50/-25
https://github.com/Richter03/gitboard/issues/19

เฉลยคำถามร่วมสนุกจากบทก่อนหน้า

คำตอบคือ `ไม่ต่างกันครับ`

อ้างถึง
alpha == gamma == delta

เนื่องจากเวลาใช้งานจริงแล้วทั้ง 3 ตัวนี้จะเป็น `ที่อยู่อ้างอิง => ข้อมูล`
ตัวเดียวที่ไม่เหมือนชาวบ้านเขาในกลุ่มนี้คือ beta ซึ่งเป็นข้อมูลโดยตรงเลย

อ้างถึง
tldr : บทนี้จะเกี่ยวกับการเขียนโค๊ดแบบผลักภาระไปให้ตัวคุณเองหรือคนอื่นในอนาคตเขียนต่อส่วนที่ยังขาดโดยไม่ต้องกลับมาแก้โค๊ดที่เขียนไปแล้ว



Delegate การอ้างอิงชุดคำสั่งประมวลผล

การอ้างอิงชุดคำสั่งประมวลผล เอาไว้สลับชุดคำสั่งประมวลระหว่างทำงานหรือจัดการกับข้อมูลที่ไม่แน่ชัดว่าต้องใช้ชุดคำสั่งใดจัดการ วิธีการสร้างนั้นก็ไม่ต่างจากการสร้างชุดคำสั่งปรกติเพียงแต่เราไม่ต้องเขียนโค๊ดในชุดคำสั่งแค่นั้น

อ้างถึง
Delegate {Function หรือ Sub} ชื่อ(ชื่อข้อมูลเข้า As ชนิดข้อมูล) {ถ้าเป็น Function ระบุชนิดข้อมูลส่งกลับ} As ชนิดข้อมูล

โค๊ด: [Select]
Delegate Sub add_on(Input As T)
Delegate Function link(ByRef Input As T) As pointer(Of R)

Generic type การระบุชนิดข้อมูลแบบกว้างๆ

โดยทั่วไปในการเขียนแบบทฤษฏีเชิงวัตถุแล้วนั้น Type หรือชนิดข้อมูลจะเป็นตัวกำหนดรูปแบบข้อมูลที่เคร่งครัด มีกฏตายตัวเช่น inherit และ interface

อย่างไรก็ดีเมื่อเราจำต้องจัดการกับข้อมูลที่ไม่รู้รูปแบบใดๆ ล่วงหน้าแล้วนั้น ทางเลือกเดียวของการเขียนแบบทั่วไปคือโยนให้มันเป็น Object type ซึ่งตรงนี้เป็นการเหมารวมว่าทุกข้อมูล ณ จุดนั้นคือข้อมูลแบบอ้างอิง ซึ่งเมื่อทำการส่งข้อมูลทั่วไปแล้วก็จะต้องผ่านกระบวนการอ้างอิงข้อมูลเสียก่อนซึ่งเป็นการเสียเวลาโดยใช่เหตุ

ดังนี้การระบุชนิดข้อมูลแบบกว้างๆ จึงเป็นคำตอบของปัญหาดังกล่าว การใช้งานนั้นก็จะเป็นดังนี้

โค๊ด: [Select]
    Delegate Sub add_on(Of T)(Input As T)
    Public Sub on_add(Of T)(Input As T, add_f As add_on(Of T))
        add_f(Input)
        add_f(Input)
        add_f(Input)
    End Sub

ตรง `(Of T)` นั้นเป็นการกำหนดชนิดแบบกว้างๆ ซึ่งในที่นี้ผมกำหนดให้ `T` เป็นชื่อของชนิดข้อมูลแบบกว้างๆ นี้ โดยการกำหนดชนิดข้อมูลแบบกว้างๆ นี้นั้นเราสามารถจำกัดขอบเขตได้หากต้องการเช่นผมต้องการแค่ชนิดข้อมูลแบบทั่วไปก็จะเป็น `(Of T As Structure)` หรือถ้าต้องการเฉพาะชนิดข้อมูลแบบอ้างอิงก็จะเป็น `(Of T As Class)` เป็นต้น



https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA0AbEA3YaAuIUArgHYA+ACscBgJZgAEAwhgIYDOHjbGADgAs2AWABQjCYz416TACZt8bRgEFuASVL4YAcxhRGYgKKk5Ldl0Oix1Wg0YBlfCTD5isRsBhKxASGl28orKaoya2noGxqaOzsSu7jBWNjL2ALIQcsQYSZRQEDpQbAC2YpJW5QAiMDk6ikkONDxycgD6EKQAFADyAGaMACoAlJ2a0viq3MNlkrayjk0drWwtPf3Do6Tjk4NozW39oSttHWuDQ0Mz5RLHrb2b45fi1zctdw/E+E8vrwcfX1dGCYzI1gGI/HN7KDVMtVmNPjteII2N8fvD8AA6BRKRgAXjCW0+WOCjAA1IwAIx+XwOACeHG0xQxzA6HAgOQxAHUoHRtAAZOikGD/YlKJ6+YELMGiXyQpjQgBCsLk/x2XjFgPK6NFynx2uxynJVJlNPpjOZrPZMC5PP5guF+uC4sloPBzwkcqljDSbEFnVRLyWx06ADkYAB3Hj8IR7FQtWBcPow44B65B1ZhyPqtix+MwRP9JUpwEumiA6JmDJZHJAA=
« แก้ไขครั้งสุดท้าย: ตุลาคม 14, 2019, 12:32:21 PM โดย richter »
 
เหล่าหมีที่ถูกใจสิ่งนี้: BlackLucky, tem2546, shironeko654 และมีอีก 1 หมีที่ถูกใจสิ่งนี้

 

Tags:
แหล่งนิยายแปล แหล่งนิยาย นิยายแปล นิยายแต่ง มังงะ การ์ตูน อนิเมะ นายท่าน เว็บไซต์นายท่าน กระทู้สไลม์ สไลม์ยอดรัก