คุณจำเป็นต้องรู้คณิตศาสตร์เพื่อเป็นโปรแกรมเมอร์ที่ดีหรือไม่
มันขึ้นอยู่กับ!
หากคุณกำลังจะเขียนแอป 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 หากคุณยังไม่ได้สมัคร!