তাদের মূলত উভয়ই refএবং outকোনও পদ্ধতিতে ভেরিয়েবলের ঠিকানাটি পাস করার জন্য একটি প্রক্রিয়া সরবরাহ করে যাতে এটি আপডেট করা যায় - refবা outপরামিতি বরাদ্দকারী কলারের প্রসঙ্গে ভেরিয়েবল আপডেট করে। যেখানে তাদের পার্থক্য রয়েছে তার গ্যারান্টি রয়েছে: outগ্যারান্টি দেয় যে ভেরিয়েবল আপডেট হবে, refনা।
কলটির অন্য দিক থেকেও একই রকম পার্থক্য রয়েছে। outআমাদের পদ্ধতির একটি প্যারামিটার আগমনের সময় দরকারী যে কোনও কিছু রাখার গ্যারান্টিযুক্ত নয় এবং অবশ্যই কোনও সময়ে এটি একটি মান নির্ধারণ করতে হবে, যখন refপ্যারামিটারটির একটি মান রয়েছে বলে ধরে নেওয়া যেতে পারে এবং এটির সাথে আমাদের নির্দিষ্ট কিছু করার দরকার নেই।
কোড বিশ্লেষণ, প্রজন্ম এবং অপ্টিমাইজেশনের উপর এই পার্থক্যটির প্রভাব রয়েছে যা আমাদের বেশিরভাগ সময় আমাদের কাছে ভয়ঙ্করভাবে স্পষ্ট না হলেও আমাদের প্রোগ্রামগুলি পরিচালনা করার পথে কিছুটা প্রভাব ফেলতে পারে। কোড জেনারেটর কল করার অবিলম্বে অবধি ভেরিয়েবলের বরাদ্দ স্থগিত করতে পারে, অপ্টিমাইজার সিদ্ধান্ত নিতে পারে যে এটি চুক্তির উপর ভিত্তি করে আরও কার্যকরভাবে পুনরায় অর্ডার করতে পারে ইত্যাদি etc.
ব্যবহারের শর্তে: একটি সাধারণ নিয়ম হিসাবে outআমি এমন পরিস্থিতিতে ব্যবহার করি যেখানে আমি যখন প্যারামিটার হিসাবে উপস্থিত হয় এবং refযখন আমি ভেরিয়েবলের বিষয়বস্তু সম্পর্কে চিন্তা করি না।