সুইফ্ট – অ্যাপলের নতুন চমক, পরিচিতি ও অন্যান্য

ভুমিকাঃ অবজেকটিভ-সি (Objective-C) এর বেসিক লার্নিং (সেকশন ১) ও আইওএস জিইউআই (GUI) অ্যাপ ডেভেলপমেন্ট (সেকশন ২) এ নজর রাখার জন্য আপনাকে অসংখ্য অভিনন্দন। আমাদের সেকশন ১ লেখা শেষ হওয়ার সাথে সাথেই অনুষ্ঠিত হয় অ্যাপলের ওয়ার্ল্ড ওয়াইড ডেভেলপার কনফারেন্স - ২০১৪ (WWDC - 2014)। প্রতিবছরের মত এবারও অ্যাপলের ওয়ার্ল্ডওয়াইড ডেভেলপার কনফারেন্স - ২০১৪ (WWDC) -এ ডেভেলপাররা পেয়েছে ৩ টি নতুন চমক। একদিকে আইওস-৮ (iOS 8) ও ইউসেমাইট (Yosemite, OS X 10.1০) এবং অন্যদিকে সুইফ্ট (Swift)। সুইফ্ট হল একেবারেই নতুন একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ যা দিয়ে অবজেক্টিভ-সি এর মতই আইফোন, আইপ্যাড ও আইপডের জন্য অ্যাপ্লিকেশন ডেভেলপ করা যাবে। প্রায় ৩০ বছর ধরে অবজেক্টিভ-সি একাই রাজত্ব করে আসছে আইওএস অ্যাপ্লিকেশন ডেভেলপমেন্ট ফিল্ডে। অ্যাপলের মতে অদুর ভবিষ্যতে অবজেকটিভ-সি কে সরিয়ে এই রাজত্ব দখল করে নেবে সুইফ্ট নিজের ফাস্ট (first), মডার্ন (modern), সেইফ (safe), ইন্টারঅ্যাকটভ (interactive) বৈশিষ্ট্যের দ্বারা।

সুইফ্ট - প্রোগ্রামিং ল্যাঙ্গুয়েজ ঃ আপনার যদি ওয়েব ডেভেলপমেন্ট (জাভাস্ক্রিপ্ট ও অন্যান্য স্ক্রিপ্টিং ল্যাঙ্গুয়েজ) সম্পর্কে ধারনা থাকে, তাহলে সুইফ্ট এর সিনট্যাক্স আপনার কাছে পরিচিত মনে হবে এবং আপনি অনেক সহজেই সুইফ্টের সিনট্যাক্স আত্মস্থ করতে পারবেন।

কিছু বিশেষ অবস্থার প্রিভিউ দেখার জন্য, সুইফ্টে লেখা প্রোগ্রাম কোন সিমুলেটর এ কম্পাইল ও রান করানো লাগবে না। Xcode 6 এ প্লেগ্রাউন্ড (playground) নামক নতুন ফিচার পাবেন যা দিয়ে সহজে সুইফ্ট এ লেখা প্রোগ্রামের রিয়েল টাইম আউটপুট দেখা যাবে।

মাত্রই ঘোষিত হওয়া সুইফ্ট শেখার জন্য অ্যাপল দিয়েছে পর্যাপ্ত রিসোর্স। একটি পিডিএফ ফরম্যাটের বই (অ্যাপলের দেওয়া সুইফ্ট এর ফ্রি বই) এবং আরও আছে কিছু অনলাইন রিসোর্স

তাহলে চলুন এবার সুইফ্ট ল্যাঙ্গুয়েজে হ্যালো ওয়ার্ল্ড প্রোগ্রামটি লিখে ফেলিঃ

println("Hello, World")

সদ্য তৈরি করা প্রজেক্টের মুল ফাইলটিতে শুধুমাত্র এটুকু লিখেই রান করলে ডানদিকের আউটপুট উইন্ডোতে "Hello, world" দেখা যাবে।

লাইব্রেরী ইমপোর্ট (Import) করা সুইফ্ট ল্যাঙ্গুয়েজ দিয়ে করা প্রোগ্রামেও যদি কোন এক্সটার্নাল লাইব্রেরী প্রয়োজন হয় তাহলে প্রজেক্টটিতে ওই লাইব্রেরী ইমপোর্ট করতে হয়। লাইব্রেরী ইমপোর্ট করার জন্য শুধুমাত্র import দিয়ে লাইব্রেরীর নাম লিখলেই হয়।

import Foundation

println("Foundation Library is imported.");

ভ্যারিয়েবল, কনস্ট্যান্ট ও টাইপ অ্যানোটেশনঃ অবজেক্টিভ-সি (Objective-C) এর মত ভ্যারিয়েবল বা কনস্ট্যান্ট ডিক্লেয়ার করার জন্য সুইফ্ট এ আসল ডাটাটাইপ লেখা লাগে না। সুইফ্ট এ ভ্যারিয়েবল ডিক্লেয়ার করার জন্য শুধুমাত্র "var" ও কনস্ট্যান্ট ডিক্লেয়ার করার জন্য "let" ব্যবহার করা হয়। সুবিধা হল ভ্যারিয়েবল বা কনস্ট্যান্ট ডিক্লেয়ার করার সময় এর ডাটাটাইপ সম্পর্কে মাথা ঘামানোর প্রয়োজন নেই। যে ধরনের ডাটা দিয়ে ইনিশিয়ালাইজ করা হবে, এদের ডাটাটাইপ ও তাই হবে। নিজের প্রোগ্রামটুকু দেখলেই পরিস্কার হয়ে যাবে।

println("Hello, world")
var myVariable = 42
// myVariable is a variable which will be inferred to be int

var (x, y, z) = (11, 12, 45)                      // x = 11, y = 12, z = 45
// x, y and z variables are inferred to be int

let π = 3.1415926                                 // constant
// π is inferred to be int

let (x, y) = (10, 20.8)                             // x = 10, y = 20.8
// x is inferred to be int and y is inferred to be double

উপরের কোড থেকে দেখা যাচ্ছে যে parentheses "( )" ব্যবহার করে একসাথে একাধিক ভ্যারিয়েবল বা একাধিক কনস্ট্যান্ট ইনিশিয়ালাইজ করা যায়। আবার কনস্ট্যান্ট এর নাম হিসেবে "π" লেখা হয়েছে। সুইফ্টে ভ্যারিয়েবল বা কনস্ট্যান্ট অথবা অন্যান্য আইডেন্টিফায়ারের নাম গুলোতে যেকোন স্পেশাল ক্যারেকটার এমনকি ইমোজি (emoji) আইকন ও ব্যবহার করা যায়। উদাহরনস্বরুপ,

let π = 3.14159       // any special characters
let 你好 = "你好世界"  // any unicode supported characters
let স্টিভ = "একজন কিংবদন্তীর নাম"  // any unicode supported characters
let 🐶🐮 = "dogcow"     // any emoji icons

emoji ক্যারেকটারের লিস্ট পাওয়ার জন্য কন্ট্রোল + কমান্ড + স্পেসবার একসাথে চাপ দিন।

আপনি চাইলে ভ্যারিয়েবল বা কনস্ট্যান্ট ডিক্লেয়ার করার সময় এক্সপ্লিসিটলি ডাটাটাইপ জানিয়ে দিতে পারেন। এজন্য ভ্যারিয়েবল বা কনস্ট্যান্ট এর নামের পর কোলন (ঃ) ও তারপর স্পেস দিয়ে ডাটাটাইপ লিখতে হয়। এভাবে আলাদা করে ডাটাটাইপ সম্পর্কে জানানো কে বলা হয় টাইপ অ্যানোটেশন (Type Annotation)।

var annotatedMessage: String = "Hello World! This variable is Type Annotated"

আচ্ছা, আমরা কি খেয়াল করেছি যে, উপরের প্রোগ্রামগুলোর কোন স্টেটমেন্টের শেষে সেমিকোলন নেই। অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজের মত সুইফ্টে স্টেটমেন্টের শেষে সেমিকোলন লাগে না। কিন্তু আপনার যদি ইচ্ছা হয় তাহলে দিতে পারেন। এতে কোন রকম এরর হবে না। আবার যদি আপনি একটি লাইনে একাধিক স্টেটমেন্ট লিখতে চান সেক্ষেত্রে অবশ্যই স্টেটমেন্টগুলোর শেষে সেমিকোলন দিতে হবে।

println("I am the first statement. I need semicolon"); println("I am the last statement. I don't need semicolon")
println("Another Line, I don't need any semicolon.But you can give me a semicolon if you want.");

অপারেটরঃ অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজের অপারেটর গুলোর সাথে সুইফ্ট এর অপারেটর গুলোর মধ্যে তেমন কোন পার্থক্য নেই। তবে কিছু কিছু ক্ষেত্রে অনেকটা ইমপ্রুভমেন্ট এনেছে সুইফ্ট। নিচে ক্যাটেগরী অনুযায়ী কিছু অপারেটর সম্পর্কে ধারনা দেওয়া হলঃ

অ্যাসাইনমেন্ট অপারেটর (=) অ্যাসাইনমেন্ট অপারেটর (=) একটি বাইনারি অপারেটর। অর্থাত "=" এর দুইটি অপারেন্ড (Operands) থাকবে এবং ডানদিকের ভ্যালু বামদিকের ভ্যারিয়েবল বা কনস্ট্যান্ট এ অ্যাসাইন হবে।

let a = 5
let b = 10
var c = a + b
var (x, y) = (a, b)   // a is assigned to x and b is assigned to y
var httpNotFoundError = (404, "Page Not Found")

শেষ লাইন দুটি দেখে বোঝা যাচ্ছে যে, এভাবে "=" অপারেটরের ডানদিকে যদি একাধিক ডাটা থাকে তাহলে তা বামদিকের একাধিক সংখ্যক ভ্যারিয়বল বা কনস্ট্যান্ট এ অ্যাসাইন হতে পারে। আবার কোন একটি ভ্যারিয়েবল বা কনস্ট্যান্ট এর ভ্যালু একাধিক ভ্যালুর টাপল [ var a = (b,c) ] হতে পারে।

অ্যারাথমেটিক অপারেটর অন্যান্য সকল প্রোগ্রামিং ল্যাঙ্গুয়েজের অ্যারাথমেটিক অপারেটর গুলোর মতই সুইফ্ট এর অ্যারাথমেটিক অপারেটর গুলো নিজ নিজ অপারেশন করে।

1 + 2       // equals 3 (Addition)
5 - 3       // equals 2 (Subtraction)
2 * 3       // equals 6 (Multiplication)
10.0 / 2.5  // equals 4.0 (Division)
9 % 4       // equals 1 (Remainder after division)
-9 % 4      // equals -1 (Remainder after division)
8 % 2.5     // equals 0.5

"+" অপারেটর দিয়ে স্ট্রিং কনক্যাটেনেশনও করা যায়।

var msg1 = "Hello"
var msg2 = "World"
var concatenated = msg1 + msg2
println(concatenated)    // Hello World

অন্যান্য অ্যারাথমেটিক অপারেটর

var a = 10;
++a      // equals 11
a++      // equals 11

// currenlty a is 11
var b = a++  // b = 11, but a = 12
// at first a is assigned to b. So, value of b is same as current a (11). Then a is incremented by 1. So, value of as is 12.

//currently a is 12
var b = ++a  // b = 13, and a = 13
// at first a is incremented by 1. So, value of a is 13 (12+1). Then value of a is assigned to b. So, value of b is also 13

//currenly a is 13
var b = a--  // b = 13, but a = 12
// at first a is assigned to b. So, value of b is same as current a (13). Then a is decremented by 1. So, value of as is 12.

//currently a is 11
var b = --a  // b = 11, and a = 11
// at first a is decremented by 1. So, value of a is 13 (12+1). Then value of a is assigned to b. So, value of b is also 13

কমপ্যারিজন/কন্ডিশনাল অপারেটর সুইফ্ট সকল ধরনের কন্ডিশনাল অপারেটর গুলো সাপোর্ট করে। নিচে কয়েকটি অপারেটরের নাম দেওয়া হলঃ

  • Equal to (a == b)

  • Not equal to (a != b)

  • Greater than (a > b)

  • Less than (a < b)

  • Greater than or equal to (a >= b)

  • Less than or equal to (a <= b)

1 == 1   // true, because 1 is equal to 1
2 != 1   // true, because 2 is not equal to 1
2 > 1    // true, because 2 is greater than 1
1 < 2    // true, because 1 is less than 2
1 >= 1   // true, because 1 is greater than or equal to 1
2 <= 1   // false, because 2 is not less than or equal to 1

//ternary conditional operator
let hasHeader = true
let contentHeight = 100
let rowHeight = contentHeight + (hasHeader ? 50 : 20)  // rowHeight will be 50

এধরনের অপারেটর গুলো প্রোগ্রামের বিভিন্ন সিলেকশন বা ডিসিশন নেওয়ার সময় ব্যবহৃত হয়। পরবর্তী অধ্যায়সমুহে এ ব্যাপারে বিস্তারিত আলোচনা হবে।

এছাড়াও রয়েছে লজিক্যাল অপারেটর ও রেন্জ অপারেটর। সকল অপারেটর সম্পর্কে আরও বিস্তারিত আলোচনা ও বিশ্লেষণ থাকবে আমাদের আসছে প্রিন্টেড বইয়ে।

বইয়ের আপডেট পেতে চোখ রাখুন আমাদের ফ্যান পেজে

Originally Posted Here

Last updated