আগের লেখাতে আমরা লুপ দেখেছি আজকে আমরা দেখবো ফাংশন। ফাংশন খুবই গুরুত্ত পূর্ণ একটা টপিক।

ফাংশন কিছু কোডকে বা কাজকে group করে রাখে কিন্তু এই grouping ছাড়াও আরো অনেক facility দেয়। আমরা আপাতত ফাংশন লেখা, grouping করা এবং এই group কিভাবে সুবিধা দেয় সেটা দেখি।

ল্যাঙ্গুয়েজ ভেদে ফাংশন লেখার নিয়ম কিছুটা আলাদা কিন্তু ধরন অনেকটা একি। ফাংশনের একটা নাম থাকবে এবং কিছু কাজ থাকবে যেটা সে ফাংশন করবে।

function name()
	print "my name is khan!"

এখানে name টা হল ফাংশনের নাম এবং my name is khan প্রিন্ট করাটা তার কাজ। আমরা ২টি সংখ্যা যোগ করার জন্য যদি একটা ফাংশন লিখতে চাই তাহলে অনেকটা এরকম হবে -

function add()
	print 2 + 5 // output 7

আচ্ছা ফাংশন তো লিখলাম কিন্তু এটা কাজ করাবো কিভাবে? ফাংশনকে কাজ করানোর জন্য আসলে call করতে হয়, মানে হচ্ছে ভাই ফাংশন তোমার কাজ শুরু কর। যেমন আমরা যদি উপরের ফাংশন দুটি কাজ করাতে চাই তাহলে নিচের মতো করে call করতে হবে -

name() // "my name is khan" লেখাটি প্রিন্ট করবে
add() // ২ আর ৫ এর যোগফল ৭ প্রিন্ট করবে

উপরে আমরা দেখতে পাচ্ছি যে ফাংশন ব্যাবহার করা খুব সোজা শুধু তার নাম বলতে হয় তারপর ব্রাকেট () দিতে হয়।

ফাংশন ২ ভাবে আমাদের সাহায্য করতে পারে -
১) side effect করতে পারে
২) কিছু একটা return বা ফেরত দিতে পারে।
উপরের ২টা ফাংশন আসলে side effect করবে। অর্থাৎ name() call করার আগে যদি কোন কাজ থাকে তাহলে সেটা হবে, তারপর name তার লেখা প্রিন্ট করবে, add যোগফল প্রিন্ট করবে, এরপরেও যদি কোন কাজ থাকে সেগুলো হবে। কিন্তু মাঝে মধ্যে এমন হতে পারে যে আমি যোগ করে এর যোগফলটা প্রিন্ট করবো না, যোগফলটা ফেরত নিবো তারপর হয়তো ৩ দিয়ে গুন করবো! যদি আমরা চাই add ফাংশনটা যোগফলটা প্রিন্ট না করে return করুক তাহলে এভাবে লিখতে হবে -

function add()
	return 2 + 5

এবং যেহেতু ফলাফল ফেরত নিতেসি তাই add call করার সময় কোন একটা variable এ সেটা রাখতে হবে। তখন call করতে হবে এভাবে -

ans = add()

এখনে ans variable এ আমরা ৭ ফেরত পাবো। এই ans কে আমরা চাইলে অন্য যে কোন কাজে লাগাতে পারি।
কিন্তু কাহিনী হল আমরা তো সব সময় ২ আর ৫ যোগ করবো না! ১০ আর ২০ ও যোগ করতে পারি বা অন্য যেকোন সংখ্যা দিতে পারি! তখন কিভাবে হবে?
কোন সমস্যা নেই, ফাংশনে চাইলে আমরা যেকোন ডেটা (Data) দিতে পারি তখন ফাংশন সেগুলা নিয়ে কাজ করতে পারবে। এজন্য ফাংশনটা এভাবে লিখতে হবে -

function add(x, y)
	return x + y

অর্থাৎ ফাংশনটা call করার সময় x আর y ২টা ডেটা দিতে হবে যেটা যোগ করে সে যোগফলটা return করবে। আর call করতে হবে এভাবে -

ans1 = add(2, 5)
ans2 = add(10, 20)
ans3 = add(15, 5)

ফাংশন ব্যাবহারের আর একটা সুবিধা কিন্তু আমরা পেয়েগেছি, সেটা হল একবার লিখলে আমরা সেটাকে বার বার ব্যাবহার করতে পারবো।

একটা উদাহরন দিয়ে লেখা শেষ করিঃ

  • প্রথম যে add ফাংশন লিখেছি যেটা শুধু side effect করে (যোগফল প্রিন্ট করে) সেটা অনেকটা এরকম যে আমার ছোট ভাই লিংকন কে বললাম - লিংকন দোকানে গিয়ে বার্গার খাও। তাকে বলার (call করার) পর side effect হিসেবে সে বার্গার খেল।
  • দ্বিতীয় বার যখন লিখেছি যেটা যোগফল return করে সেটা অনেকটা এরকম যে - লিংকন দোকান থেকে বার্গার কিনে আমাকে দাও।
  • এবং তৃতীয় বার যেটা লিখেছি যেটা ২টা ডেটা নেয় এবং তাদের যোগফল return করে সেটা অনেকটা এরকম যে - লিংকন এই নেও টাকা এটা দিয়ে দোকান থেকে বার্গার কিনে আমাকে দেও।

আর এক ভাবে ফাংশন লেখা যায় যেটা অনেকটা এরকম হবে - লিংকন এই নেও টাকা এটা দিয়ে দোকান থেক বার্গার কিনে খাও।
এটা কিভাবে লিখতে হয় সেটা বাড়ির কাজ হিসেবে থাকলো :p

এবং শেষ বোনাস

আশা করি তোমরা already জানো কি করবো এখন ...right আমাদের ক্যালকুলেটর প্রোগ্রামকে আমরা ছোট ছোট কয়েকটা ফাংশন দিয়ে লিখবো। কথা না বাডিয়ে শুরু করা যাক -

প্রথমে user এর কাছে থেকে ইনপুট নেয়ার কাজটা একটা ফাংশনে লেখা যাক। আম্ররা এটার নাম দিবো get_user_input যেটা user এর ইনপুট return দিবে -

function get_user_input()
	[1] যোগ
	[2] বিয়োগ
	[3] গুন
	[4] ভাগ
	[5] ভাগশেষ
	[0] বন্ধ করবো

	অই ভাই, কোনটা করবেন?
	choise = user choise input

	return choise

এরপর যোগ, বিয়োগ, গুন, ভাগ এগুলার জন্য ফাংশন লিখে ফেলি -

function add(x, y)
    print x + y

function substitute(x, y)
    print x - y

function multiply(x, y)
    print x * y

function divide(x, y)
    print x / y

function modulus(x, y)
    print x % y

আমরা চাইলে ফলাফল return করতে পারতাম কিন্তু তার আর কোন কাজ নেই তাই সরাসরি ফাংশনেই প্রিন্ট করে দিলাম। এবার আমরা আসল প্রোগ্রামটা দেখি কিরকম হবে -

run_program = True
while run_program is True

	choise = get_user_input()

	if choise = 0 // user প্রোগ্রাম বন্ধ করতে চাই
		run_program = False

	else // বন্ধ না হলে ক্যাল্কুলেটর চলত থাকবে
		x = users first input data
		y = users second input data

		if choise = 1 // যোগ
			add(x, y)

		else if choise = 2 // বিয়োগ
			substitute(x, y)

		else if  choise = 3 // গুন
			divide(x, y)

		else if choise = 4 // ভাগ
			multiply(x, y)

		else if choise = 5 // ভাগশেষ
			modulus(x, y)

এই প্রোগ্রাম রিডিং পড়লেই কিন্তু বুঝা যায় আমরা কোন কাজের পর কোন কাজ করেছি। আশা করি ফাংশন সম্পর্কে মোটামুটি একটা ধারনা তোমরা পেয়েছ।


আগের লেখা: প্রোগ্রামিং কনসেপ্ট ১০১ - লুপ