টিএল; ডিআর: when পার্শ্ব প্রতিক্রিয়া সম্পর্কে, andখাঁটি বুলিয়ান এক্সপ্রেশনগুলির জন্য।
যেমন আপনি লক্ষ্য করেছেন, andএবং whenকেবল বাক্য গঠনতে পৃথক, তবে অন্যথায় সম্পূর্ণ সমতুল্য।
সিনট্যাক্টিক পার্থক্যটি বেশ গুরুত্বপূর্ণ, যদিও: প্রথম যুক্তি ফর্ম ব্যতীত সমস্ত চারদিকে whenএকটি অন্তর্নিহিত আবৃত progn। prognএটি স্বভাবগতভাবে অপরিহার্য বৈশিষ্ট্য: এটি কেবলমাত্র তাদের পার্শ্ব প্রতিক্রিয়াগুলির জন্য কেবলমাত্র সর্বশেষ শরীরের ফর্মটি মূল্যায়ন করে, তারা যে পরিমাণ মান ফিরে আসে তা ত্যাগ করে।
যেমন, whenপাশাপাশি একটি আবশ্যকীয় রূপ: এটির মূল উদ্দেশ্যটি পার্শ্ব-প্রতিক্রিয়াশীল ফর্মগুলি মোড়ানো because কারণ কেবলমাত্র শেষ আকারের মূল্যই দেহের পক্ষে গুরুত্বপূর্ণ।
andঅন্যদিকে একটি খাঁটি ফাংশন, যার মূল উদ্দেশ্য প্রদত্ত আর্গুমেন্ট ফর্মগুলির রিটার্ন মানগুলি পর্যালোচনা করা: আপনি যদি prognতার যুক্তিগুলির কোনওটির চারপাশে পরিষ্কারভাবে আবদ্ধ না করেন তবে প্রতিটি আর্গুমেন্টের ফর্মের মান গুরুত্বপূর্ণ, এবং কোনও মান কখনই উপেক্ষা করা হবে না ।
তাই, মধ্যে আসল পার্থক্যটা andএবং whenরচনাশৈলীসংক্রান্ত হল: আপনি এই ব্যবহার andবিশুদ্ধ বুলিয়ান এক্সপ্রেশন জন্য, এবং whenপ্রায় পার্শ্ব-effecting ফরম গার্ড করা।
সুতরাং, এগুলি খারাপ শৈলী:
;; `when' used for a pure boolean expression
(let ((use-buffer (when (buffer-live-p buffer)
(file-exists-p (buffer-file-name buffer)))))
...)
;; `and' used as guard around a side-effecting form
(and (buffer-file-name buffer) (write-region nil nil (buffer-file-name buffer)))
এবং এগুলি ভাল:
(let ((use-buffer (and (buffer-live-p buffer)
(file-exists-p (buffer-file-name buffer)))))
...)
(when (buffer-file-name buffer)
(write-region nil nil (buffer-file-name buffer)))
আমি জানি যে কিছু লোক এ সম্পর্কে মতভেদ করে না, এবং আনন্দের andসাথে পার্শ্ব প্রতিক্রিয়া রক্ষা করতে ব্যবহার করে তবে আমি মনে করি এটি সত্যই খারাপ শৈলী। আমাদের এই কারণগুলির জন্য এই বিভিন্ন ফর্ম রয়েছে: সিনট্যাক্স বিষয় । যদি এটি না হয়, আমরা কেবলমাত্র সবসময়ই ব্যবহার করতাম if, যা কেবলমাত্র ইমাস লিস্পে শব্দার্থগতভাবে আপনার প্রয়োজন কেবলমাত্র শর্তযুক্ত ফর্ম। অন্যান্য সমস্ত বুলিয়ান এবং শর্তসাপেক্ষিক ফর্মগুলির নিরিখে লেখা যেতে পারে if।