Swift-এ মূলত দুই ধরনের সংখ্যা থাকে: ইন্টিজার আর ফ্লোটিং-পয়েন্ট সংখ্যা।
0, 1, -1, 42 আর -273.0.0, 3.14 আর -1.36969e-10.পাঠযোগ্যতা বাড়াতে আপনি সংখ্যার লিটারেলে আন্ডারস্কোর বসাতে পারেন: 1_000_000 আর 1000000 একেবারে একই।
ফ্লোটিং-পয়েন্ট লিটারেল দশমিক বা সূচকীয় নোটেশনে লেখা যায়।
বেশিরভাগ ক্ষেত্রেই ইন্টিজারের জন্য আপনি Int আর ফ্লোটিং-পয়েন্ট সংখ্যার জন্য Double ব্যবহার করেন:
let speed: Int = 42 // Explicit Int
let pi: Double = 3.14 // Explicit Double
let giga: Double = 1_000_000_000 // Double with readability underscores
let plancksConstant: Double = 6.62607015e-34 // Double in scientific notation
সংখ্যা নিয়ে হিসাব করার জন্য Swift সাধারণ পাটিগণিত অপারেটর দেয়:
| অপারেটর | বিবরণ | উদাহরণ |
|---|---|---|
+ |
যোগ |
4 + 6-এর ফলাফল 10
|
- |
বিয়োগ |
15 - 10-এর ফলাফল 5
|
* |
গুণ |
2 * 3-এর ফলাফল 6
|
Swift টাইপ-সেফ, তাই পাটিগণিতের কাজে ভিন্ন টাইপের সংখ্যা একসাথে মেশাতে দেয় না।
আপনি সরাসরি একটি Int আর একটি Double যোগ বা গুণ করতে পারবেন না; আগে একটি টাইপকে অন্যটির সাথে মিলিয়ে কনভার্ট করতে হবে।
/ অপারেটর দিয়ে ভাগ করা হয়।
দুই পাশের অপারেন্ড দুটোই ইন্টিজার হলে, ইন্টিজার ভাগ ভগ্নাংশের অবশিষ্ট অংশটুকু বাদ দিয়ে দেয়:
5.0 / 2.0 // 2.5 (Double division)
5 / 2 // 2 (integer division truncates the remainder)
শূন্য নয় এমন কোনো ফ্লোটিং-পয়েন্ট সংখ্যাকে শূন্য দিয়ে ভাগ করলে ফল আসে inf বা -inf.
0.0-কে 0.0 দিয়ে ভাগ করলে পাওয়া যায় nan (Not a Number, অর্থাৎ সংখ্যা নয়)।
এর বিপরীতে, কোনো ইন্টিজারকে শূন্য দিয়ে ভাগ করলে কম্পাইল-টাইম বা রানটাইম এরর হয়:
print(5.0 / 0.0) // Prints inf
print(-5.0 / 0.0) // Prints -inf
print(0.0 / 0.0) // Prints nan
// The following line will not compile:
// print(5 / 0) // Error: Division by zero
ভাগশেষ অপারেটর (%) দুইটি ইন্টিজার ভাগ করার পর যে ভাগশেষ অবশিষ্ট থাকে তা বের করে:
5 % 2 // 1
-5 % 2 // -1
// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
Swift-এ % মডুলো অপারেটর নয়, বরং সত্যিকারের ভাগশেষ অপারেটর।
ফল সবসময় প্রথম অপারেন্ডের (যেটিকে ভাগ করা হচ্ছে) চিহ্নই নেয়, দ্বিতীয় অপারেন্ডের চিহ্ন যা-ই হোক না কেন:
5 % -2 // 1
-5 % 2 // -1
আপনি rounded() মেথড দিয়ে একটি ফ্লোটিং-পয়েন্ট সংখ্যাকে রাউন্ড করতে পারেন।
ডিফল্টভাবে rounded() নিকটতম ইন্টিজারে রাউন্ড করে।
চাইলে আপনি নির্দিষ্ট একটি রাউন্ডিং রুল দিতে পারেন, যেমন .up বা .down:
let x = 3.14
let y = x.rounded() // 3.0
let w = x.rounded(.down) // 3.0
let z = x.rounded(.up) // 4.0
টাইপ অ্যানোটেশন ছাড়া কোনো সংখ্যার কনস্ট্যান্ট বা ভ্যারিয়েবল ডিক্লেয়ার করলে Swift নিজেই তার টাইপ অনুমান করে নেয়:
Int.Double.let x = 42 // Inferred as Int
let y = 42.0 // Inferred as Double
let z: Double = 42 // Explicitly typed as Double
ভিন্ন টাইপের মান নিয়ে কাজ করতে হলে Double(_:) বা Int(_:)-এর মতো টাইপ ইনিশিয়ালাইজার দিয়ে একটি মানকে অন্যটিতে কনভার্ট করুন:
let integerCount = 42
let floatingCount = Double(integerCount)
print(floatingCount) // Prints 42.0
let pi = 3.14
let integerPi = Int(pi)
print(integerPi) // Prints 3 (fractional part is truncated)
এই অনুশীলনীতে আপনি এমন কোড লিখবেন যা একজন ফ্রিল্যান্সারকে একজন প্রজেক্ট ম্যানেজারের সঙ্গে যোগাযোগ করতে সাহায্য করবে। আপনার কাজ হলো কয়েকটি ইউটিলিটি দেওয়া, যেগুলো দিয়ে দৈনিক ও মাসিক রেট দ্রুত হিসাব করা যায়, প্রয়োজনে একটি নির্দিষ্ট ছাড়সহ।
প্রথমে ফ্রিল্যান্সার ও প্রজেক্ট ম্যানেজারের মধ্যে কয়েকটি নিয়ম ঠিক করে নিই:
কখনও কখনও ফ্রিল্যান্সার তার দৈনিক রেটে ছাড় দিতে চান (যেমন তার সবচেয়ে বিশ্বস্ত ক্লায়েন্ট বা অলাভজনক ক্লায়েন্টদের জন্য)।
ছাড়কে শতাংশ বোঝানো ভগ্নসংখ্যা হিসেবে মডেল করা হয়, যেমন 25.0 (২৫%)।
ঘণ্টাপ্রতি রেট প্যারামিটার হিসেবে নিয়ে দৈনিক রেট হিসাব করার জন্য dailyRateFrom নামের একটি ফাংশন ইমপ্লিমেন্ট করুন।
চুক্তিতে বলা আছে যে এক দিনে বিল করার মতো ৮টি ঘণ্টা থাকে।
dailyRateFrom(hourlyRate: 60)
// Returns 480.0
রিটার্ন করা দৈনিক রেটটি একটি Double হওয়া উচিত।
ছাড়যুক্ত মাসিক রেট হিসাব করার জন্য monthlyRateFrom ফাংশন ইমপ্লিমেন্ট করুন।
এটি দুটি প্যারামিটার নেয়: একটি ঘণ্টাপ্রতি রেট এবং শতাংশে ছাড়।
monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129
রিটার্ন করা মাসিক রেটটি নিকটতম পূর্ণ সংখ্যায় রাউন্ড আপ করতে হবে (সিলিং নিন)।
workdaysIn নামের একটি ফাংশন ইমপ্লিমেন্ট করুন, যেটি একটি বাজেট, একটি ঘণ্টাপ্রতি রেট ও একটি ছাড় নেয় এবং হিসাব করে যে সেটি দিয়ে কতগুলো সম্পূর্ণ দিনের কাজ হয়।
workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
রিটার্ন করা দিনসংখ্যা পরবর্তী পূর্ণ সংখ্যায় রাউন্ড ডাউন করতে হবে (ফ্লোর নিন)।
Exercism-এ সাইন আপ করুন, Swift ট্র্যাকের 35টি কনসেপ্ট116টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।