Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ตัวตนในทับทิมคืออะไร &วิธีใช้งาน (อธิบายให้ชัดเจน)

หากคุณกำลังเรียนรู้ Ruby คุณอาจพบว่าการใช้คำหลัก "ตัวเอง" นั้นสับสนมาก

มันทำงานอย่างไร?

selfคืออะไร ใช่ไหม

มันคือ คำหลักทับทิม ที่ให้คุณเข้าถึงวัตถุปัจจุบันได้

หากคุณไม่รู้ว่าสิ่งของคืออะไร ให้ดูวิดีโอนี้ที่ฉันทำเพื่อคุณ มันเกี่ยวข้องกับการเขียนโปรแกรมเชิงวัตถุ

“วัตถุปัจจุบัน” นี้ขึ้นอยู่กับบริบท

บริบท?

ใช่ บริบทคือที่ที่โค้ดของคุณอยู่ในช่วงเวลาที่กำหนด

นี่คือตัวอย่าง :

หากโค้ดของคุณอยู่ในเมธอดของอินสแตนซ์ self เป็น ตัวอย่าง ของชั้นเรียนนั้นๆ กล่าวอีกนัยหนึ่ง self เป็นวัตถุ

คุณสามารถเห็นสิ่งนี้ได้ด้วยตัวคุณเอง

เรียกใช้รหัสนี้ :

def coffee
  puts self
end

coffee
# main

รหัสนี้กำหนดและเรียก coffee วิธีการพิมพ์ค่าของ self .

ทำไมมันถึงพิมพ์ main ?

เนื่องจากเป็นชื่อของออบเจ็กต์ระดับบนสุด จึงเป็นออบเจ็กต์ที่คุณจะพบวิธีการทั้งหมดที่กำหนดไว้ภายนอก ชั้นเรียน

ชอบ coffee . ของเรา วิธีการที่นี่

แต่ถ้าคุณกำหนดเมธอดภายในคลาสชื่อ Cat แล้ว self จะเป็น Cat วัตถุ

ดังที่เห็นที่นี่ :

class Cat
  def meow
    puts self
  end
end

Cat.new.meow
# <Cat:0x7a14c5>

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

ตอนนี้ :

ฉันเชื่อว่าคุณสามารถเข้าใจทุกอย่างได้ดีขึ้นด้วยการทำความเข้าใจจุดประสงค์ของมัน

ทำไม self มีประโยชน์ไหม

มาดูตัวอย่างกัน

ใช้ตนเองเพื่อแก้ความกำกวม

การใช้งานจริงอย่างหนึ่งสำหรับ self คือสามารถบอกความแตกต่างระหว่าง method และ local variable ได้

ไม่ควรตั้งชื่อตัวแปรและวิธีการเหมือนกัน แต่ถ้าคุณต้องทำงานกับสถานการณ์นั้น คุณจะสามารถเรียกใช้เมธอดด้วย self.method_name .

นี่คือสิ่งที่ฉันหมายถึง :

class Example
  def do_something
    banana = "variable"

    puts banana
    puts self.banana
  end

  def banana
    "method"
  end
end

Example.new.do_something

# "variable"  => puts banana
# "method"    => puts self.banana

เรามี banana ตัวแปรท้องถิ่นภายใน do_something แต่เราก็มี banana วิธีการ

ตัวแปรโลคัลมีความสำคัญ

เราจึงต้องใช้ self ที่นี่ถ้าเราต้องการ โทร banana วิธีการแทน การพิมพ์ คุณค่าของ banana ตัวแปร

ถัดไป :

มาดูกรณีการใช้งานทั่วไปกันดีกว่า… การกำหนดวิธีการของคลาส!

การใช้ตนเองเพื่อกำหนดวิธีการระดับชั้นเรียน

หมายเลข ONE ใช้สำหรับ self ไม่ต้องสงสัยเลยคือการกำหนดวิธีการระดับคลาส

ฉันแน่ใจว่าคุณเคยเห็นพวกเขา

def self.method_name These เหล่านี้ วิธีการ คำจำกัดความ .

ถูกใจสิ่งนี้ :

class Salad
  def self.buy_olive_oil
    # ...
  end
end

Salad.buy_olive_oil

นี้ self นี่เทียบเท่ากับ Salad , ชื่อคลาส

เหตุใดจึงมีประโยชน์

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

นอกจากนี้ยังทำให้โค้ดมีเสียงดังน้อยลงและอ่านได้ดีขึ้น

นั่นเป็นเหตุผลที่เราทำ def self.buy_olive_oil แทน def Salad.buy_olive_oil .

การใช้งานอื่นๆ สำหรับตนเอง

ใช่!

มีประโยชน์มากขึ้นสำหรับ self ดังนั้นจึงเป็นประโยชน์ที่ควรทำความคุ้นเคย

ตัวอย่างเช่น :

คุณสามารถใช้ในวิธีการเปรียบเทียบวัตถุปัจจุบันกับวัตถุอื่นได้

อะไรประมาณนี้ :

def ==(other)
  self == other
end

คุณยังสามารถใช้ self เพื่อจุดประสงค์ในการดีบัก เพื่อค้นหาว่าคุณกำลังทำงานกับวัตถุใด

ถูกใจสิ่งนี้ :

p self

หรือคุณสามารถใช้เป็นค่าส่งคืนเพื่อใช้รูปแบบการออกแบบ เช่น Builder Design Pattern

ตัวอย่าง :

class Salad
  def initialize
    @ingredients = []
  end

  def add_nuts
    @ingredients << :nuts

    self
  end
end

my_salad = Salad.new.add_nuts

โดยสรุป นี่คือรายการการใช้งานที่เป็นประโยชน์สำหรับตนเอง :

  • กำหนดวิธีการระดับคลาส
  • ใช้วิธีอินสแตนซ์เมื่อคุณมีตัวแปรในเครื่องที่มีชื่อเดียวกัน
  • การคืนตัวตน (รูปแบบผู้สร้าง)
  • การดีบัก
  • การเปรียบเทียบวัตถุ (==)
  • ตัวรับเริ่มต้นของการเรียกเมธอด

ตัวเอง vs ตัวเอง

อีกอย่างที่เราควรดูก่อนจะจบหัวข้อนี้

Kernel#itself วิธีการ

เป็นวิธีการที่คุณสามารถเรียกใช้วัตถุ &วัตถุจะส่งคืนเอง

ตัวอย่าง :

[1,2,3,nil].select(&:itself)

# [1, 2 ,3]

ตัวอย่างนี้กรอง nil &false ค่า

เข้าใจความแตกต่าง :

  • self เป็นคีย์เวิร์ด ค่ามันขึ้นอยู่กับ ที่ไหน คุณใช้มัน
  • self เป็นวิธีการ ค่ามันขึ้นอยู่กับ อะไร วัตถุที่คุณใช้บน (ใน 1.itself , 1 เป็นวัตถุ)

หวังว่าจะเป็นประโยชน์

บทสรุป

คุณได้เรียนรู้เกี่ยวกับรูบี้คีย์เวิร์ดแล้ว มันคืออะไร ทำไมมันถึงมีประโยชน์ &วิธีใช้งาน

ตอนนี้ถึงตาคุณแล้วที่จะลองดู

ขอบคุณที่อ่าน! 🙂