คุณจำเป็นต้องรู้คณิตศาสตร์เพื่อเป็นโปรแกรมเมอร์ที่ดีหรือไม่
มันขึ้นอยู่กับ!
หากคุณกำลังจะเขียนแอป CRUD ทั้งวัน คุณก็ไม่จำเป็นต้องรู้คณิตศาสตร์มากนัก หากมี
แต่ถ้าคุณต้องการทำสิ่งที่น่าสนใจมากขึ้น เช่น การแก้ปัญหาด้านการเขียนโค้ดและเตรียมพร้อมสำหรับการสัมภาษณ์เกี่ยวกับการเขียนโค้ด การเรียนรู้แนวคิดพื้นฐานสองสามข้อก็มีประโยชน์
วันนี้คุณจะได้เรียนรู้เกี่ยวกับ :
- ตัวดำเนินการโมดูโล (
%) - ระบบตัวเลข
- บิตมาสก์
คุณจะได้เรียนรู้วิธีใช้แนวคิดเหล่านี้ใน Ruby ดังนั้น นี่จึงเป็นแนวทางปฏิบัติ
มาทำสิ่งนี้กันเถอะ!
ตัวดำเนินการ Ruby Modulo
ตัวดำเนินการ Ruby modulo มีลักษณะดังนี้:
%
ใช่ เช่นเดียวกับสัญลักษณ์เปอร์เซ็นต์
มันทำอะไร?
โมดูโลโอเปอเรเตอร์ให้ส่วนที่เหลือของดิวิชั่น . สามารถใช้กับสิ่งต่างๆ เช่น ตรวจสอบว่าตัวเลขเป็นเลขคู่หรือคี่
ใช่.
ใน Ruby เรามี even? /odd? วิธีการ
ตัวอย่าง :
8.even? # true 5.even? # false
แต่ถ้าคุณต้องการตรวจสอบว่าตัวเลขหารด้วย 3 ลงตัวหรือไม่ คุณต้องใช้ตัวดำเนินการโมดูโล
ตัวอย่าง :
9 % 3 == 0 # true
มาสำรวจการใช้งานเพิ่มเติมกัน!
การใช้งานจริงสำหรับตัวดำเนินการโมดูโล่
คุณสามารถใช้โมดูโล่เพื่อตรวจสอบว่า ตัวเลขหารด้วยตัวเลขอื่นได้หรือไม่ .
ตัวเลขจะหารลงตัวถ้าเหลือ 0
ตัวอย่าง :
ความท้าทายในการเขียนโค้ด “FizzBuzz” สุดคลาสสิกอยากให้คุณค้นหาว่าตัวเลขนั้นหารด้วย 3 หรือ 5 ลงตัวหรือไม่
if n % 3 == 0 puts "Fizz" end if n % 5 == 0 puts "Buzz" end
คุณสามารถใช้ modulo โอเปอเรเตอร์ทำสิ่งต่าง ๆ ทุก ๆ น.
ถูกใจสิ่งนี้ :
(1..10).select { |n| n % 2 == 0 }
# [2, 4, 6, 8, 10]
หรือคุณสามารถใช้ step วิธีการ:
(2..10).step(2).to_a # [2, 4, 6, 8, 10]
การใช้วิธีการ Divmod
อีกวิธีหนึ่งสำหรับตัวดำเนินการโมดูโลคือการแปลงนาทีเป็นชั่วโมง + นาทีที่เหลือ
ตัวอย่าง :
เรามี 90 นาที ซึ่งเท่ากับ 1 ชั่วโมง 30 นาที
hours, minutes = 90.divmod(60) # [1, 30]
สังเกต divmod วิธีการ:
มันทำการดิวิชั่น &โมดูโล (ส่วนที่เหลือของดิวิชั่น) ในเวลาเดียวกัน
มีประโยชน์มาก!
ทำความเข้าใจระบบตัวเลข
ระบบตัวเลขเป็นวิธีการแสดงตัวเลข
ในการใช้ตัวเลขในแต่ละวัน คุณใช้ระบบทศนิยม .
0123456789
ระบบตัวเลขประกอบด้วยชุดตัวเลขและบางครั้งก็เป็นอักขระด้วย
ตัวอย่างเช่น :
ระบบเลขฐานสิบหกใช้สัญลักษณ์ทั้งหมด 16 ตัว
0123456789abcdef
นี่คือตารางระบบตัวเลขทั่วไป :
| ชื่อ | จำนวนสัญลักษณ์ | สัญลักษณ์ |
|---|---|---|
| ฐานสิบหก | 16 | 0123456789abcdef |
| ทศนิยม | 10 | 0123456789 |
| Octal | 8 | 01234567 |
| ไบนารี | 2 | 01 |
คุณสามารถแปลงระหว่างระบบตัวเลขใน Ruby ด้วย to_s วิธีการ
ต่อไปนี้เป็นวิธีแปลงจากทศนิยม (9 ) เป็น ไบนารี (1001 ):
9.to_s(2) # "1001"
คุณสามารถใช้ to_i เมธอดบนสตริงเพื่อแปลงกลับเป็นจำนวนเต็ม
ดังนั้นหากคุณต้องการเปลี่ยนจาก เลขฐานสิบหก (ff ) เป็น ทศนิยม (255 ) คุณสามารถทำได้:
"ff".to_i(16) # 255
โดยที่ 16 คือ “จำนวนสัญลักษณ์” หรือฐานของตัวเลข
Bitmasking คืออะไร
คุณคงไม่ตื่นมาทุกวันเพราะคิดว่า…
"เฮ้! ฉันต้องการ แพ็คค่าบูลีนจำนวนมาก ลงพื้นที่ให้น้อยที่สุด”
แต่ถ้าวันใดคุณต้องทำเช่นนั้น…
เทคนิคดีๆ ที่ช่วยคุณได้คือ “บิตมาสก์”
ด้วยบิตมาสก์ คุณสามารถแพ็คค่าบูลีนจำนวนมากเป็นค่าจำนวนเต็มเดียวได้
เป็นไปได้ยังไง?
โดย ใช้แต่ละบิต ที่หมายเลขนั้นทำขึ้น
เนื่องจากค่าบูลีนสามารถแสดงด้วยบิตเดียว และค่าจำนวนเต็มมี 64 บิต เราจึงสามารถแพ็คค่าบูลีนได้สูงสุด 64 ค่าเป็นตัวเลขเดียว
เราจะใช้ตัวดำเนินการระดับบิต
นี่คือตาราง :
| ชื่อ | สัญลักษณ์ | ใช้ |
|---|---|---|
| XOR (Exclusive OR) | ^ | สลับบิต |
| และ | & | ตรวจสอบบิต |
| ไม่ | ~ | เคลียร์บิต |
| หรือ | | | ตั้งค่าบิต |
ตัวดำเนินการ Bitwise ทำงานที่ระดับ BIT และนั่นคือสิ่งที่เราต้องการ
นี่คือตัวอย่างโค้ด :
class Bitmask
def initialize
@value = 0
end
def set(bit)
@value |= bit
end
def clear(bit)
@value &= ~bit
end
def check(bit)
(@value & bit) == bit
end
def to_binary
@value.to_s(2)
end
end
bit = Bitmask.new
วิธีใช้ BitMasking
ตอนนี้คุณสามารถใช้ set , clear &check วิธีการทำงานกับโครงสร้างข้อมูลนี้ คุณยังอาจต้องการกำหนดค่าคงที่เพื่ออธิบายความหมายของแต่ละค่า
ตัวอย่าง :
class Bitmask ENGINES_ENABLED = 1 CAPTAIN_ABOARD = 2 SHIELDS_UP = 4 # ... rest of code here end bit = Bitmask.new bit.set(Bitmask::ENGINES_ENABLED) bit.check(Bitmask::ENGINES_ENABLED)
ค่าที่ถูกต้องสำหรับ set รวม 1 และกำลัง 2 (2,4,8,16,32…) เพื่อหลีกเลี่ยงการเขียนทับบิตอื่นๆ

ถ้าเรามี 64 + 32 + 1 ค่าที่เก็บไว้จะเป็นดังนี้:
1100001
วิธีคณิตศาสตร์ทับทิม
Ruby มีวิธีการทางคณิตศาสตร์ในตัวที่อาจเป็นประโยชน์
เราได้ครอบคลุม divmod . แล้ว , even? &odd? .
วิธีอื่นๆ ได้แก่ :
**/pow(การยกกำลัง)gcd(ตัวหารร่วมมาก)abs(ค่าสัมบูรณ์ ลบเครื่องหมายลบ)round(ปัดเศษเป็นจำนวนเต็มที่ใกล้เคียงที่สุด)floor&ceil(ปัดลง / ปัดขึ้น)Math.sqrt(n)(รากที่สองของ n)Math.log2(n)(log2 ของ n)digits(แปลงจำนวนเต็มเป็นอาร์เรย์แบบย้อนกลับของตัวเลข)
ตัวอย่าง :
5 ** 2 # 25 -10.abs # 10 300.digits # [0, 0, 3]
คณิตศาสตร์ในวิดีโอทับทิม
สรุป
คุณได้เรียนรู้เทคนิคทางคณิตศาสตร์ที่น่าสนใจบางอย่างแล้ว เช่น การใช้มอดูโล % เพื่อค้นหาส่วนที่เหลือของการหาร คุณสามารถใช้เศษที่เหลือเพื่อตรวจสอบว่าตัวเลขอื่นหารลงตัวหรือไม่
คุณยังได้เรียนรู้เกี่ยวกับระบบตัวเลข บิตมาสก์ และตัวดำเนินการระดับบิต
อย่าลืมแชร์โพสต์นี้…
และสมัครรับจดหมายข่าว RubyGuides หากคุณยังไม่ได้สมัคร!