টিএল; ডিআর: 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
।