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

ผู้เขียน หัวข้อ: [เขียนโปรแกรมเรียนง่าย] บทที่ 6 - การจัดการกลุ่มข้อมูล  (อ่าน 1724 ครั้ง)

ออฟไลน์ richter

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



https://dotnetfiddle.net/Aeqys7

โค๊ด: [Select]
Public Class alpha
Public data As Integer
End Class

Public Structure beta
Public data As Integer
End Structure

Public Module Program

Public Sub A_add(Input As alpha)
Input.data += 1
System.Console.WriteLine(Input.data)
End Sub
Public Sub B_add(Input As beta)
Input.data += 1
System.Console.WriteLine(Input.data)
End Sub

Public Sub Main()
Dim A As New alpha
A_add(A)
A_add(A)
A_add(A)

System.Console.WriteLine()

Dim B As New beta
B_add(B)
B_add(B)
B_add(B)
End Sub
   
End Module

จากโค๊ดด้านบนจะเห็นว่าโค๊ด alpha กับ beta และ A_add กับ B_add นั้นแทบจะก๊อปวางมาเลยแต่เมื่อโปรแกรมทำงานออกมาแล้วผมกลับแตกต่างกันอย่างสิ้นเชิง
- A_add(A) นั้นได้ผลออกมาเป็น 1, 2 และ 3
- B_add(B) นั้นได้ผลออกมาเป็น 1, 1 และ 1

ทำไมถึงได้ผลออกมาแตกต่างกันมาก ?

เหตุที่แบบ A นั้นได้ผลลัพย์ไม่คงที่เนื่องจาก A เป็น คลาส(Class) ซึ่งเป็นข้อมูลอ้างอิง(Reference type) ดังนี้ข้อมูลที่อยู่กับ A จริงๆ จึงไม่ใช่ alpha.data แต่เป็นที่อยู่อ้างอิงที่จะนำไปยังตัวข้อมูลอีก

ดังนี้เมื่อทำการส่งข้อมูลเข้าไปยังชุดคำสั่งประมวลผล แทนที่ A จะคัดลอกส่งข้อมูล alpha.data ไปเหมือนกับ B ซึ่งทำให้ได้ผลลัพย์ไม่เปลี่ยนแปลง กลับส่งคัดลอกส่งที่อยู่ไปซึ่งเมื่อชุดคำสั่งทำการเปลี่ยนแปลงค่าภายในชุดคำสั่งจึงเกิดผลข้างเคียง(Side effect)

สำหรับท่านที่ไม่เคยเขียนโปรแกรมอาจจะงงว่า เอ๋ มันเป็นผลข้างเคียงยังไง ผมจะเขียนใหม่ให้เห็นภาพชัดขึ้นดังนี้

แบบ A
อ้างถึง
0 + 1 = 1
0 + 1 = 2
0 + 1 = 3

แบบ B
อ้างถึง
0 + 1 = 1
0 + 1 = 1
0 + 1 = 1

คำถามร่วมสนุกสำหรับทุกท่าน กลุ่มข้อมูลแบบ gamma กับ delta นั้นแตกต่างกันอย่างไรเมื่อเรานำไปใช้จัดการข้อมูล ?

โค๊ด: [Select]
Public Class gamma
Public data As beta
End Class

Public Structure delta
Public data As alpha
End Structure
 
เหล่าหมีที่ถูกใจสิ่งนี้: BlackLucky, shironeko654, 29Forever และมีอีก 0 หมีที่ถูกใจสิ่งนี้

 

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