সুইফটে precondition(condition: Bool, message: String)এবং এর মধ্যে পার্থক্য কী assert(condition: Bool, message: String)?
দু'টিই আমার কাছে একই রকম। কোন প্রসঙ্গে আমাদের একে অপরের ব্যবহার করা উচিত?
সুইফটে precondition(condition: Bool, message: String)এবং এর মধ্যে পার্থক্য কী assert(condition: Bool, message: String)?
দু'টিই আমার কাছে একই রকম। কোন প্রসঙ্গে আমাদের একে অপরের ব্যবহার করা উচিত?
উত্তর:
assertএটি পরীক্ষার সময় স্যানিটি চেক করার জন্য, অন্যদিকে preconditionএমন কিছু থেকে রক্ষা পাওয়ার জন্য যা যদি ঘটে থাকে তবে এর অর্থ আপনার প্রোগ্রামটি যুক্তিসঙ্গতভাবে এগিয়ে যেতে পারছে না।
সুতরাং উদাহরণস্বরূপ, আপনার assertকোনও ত্রুটি আছে কিনা তাড়াতাড়ি খুঁজে পেতে আপনি কিছু বুদ্ধিমান বুদ্ধিমান ফলাফল রেখে যেতে পারেন (কিছু সীমাতে এটি বলুন)। তবে আপনি এটি দিয়ে জাহাজে যেতে চাইবেন না, যেহেতু বহির্মুখী ফলাফল বৈধ হতে পারে এবং সমালোচনামূলক নয় তাই আপনার অ্যাপ্লিকেশনটি ক্র্যাশ করা উচিত নয় (মনে করুন আপনি এটি কেবল একটি অগ্রগতি বারে অগ্রগতি প্রদর্শনের জন্য ব্যবহার করছেন)।
অন্যদিকে, কোনও উপাদান আনার সময় অ্যারেতে একটি সাবস্ক্রিপ্ট বৈধ কিনা তা পরীক্ষা করা precondition। যখন অবৈধ সাবস্ক্রিপ্ট জিজ্ঞাসা করা হয় তখন অ্যারে অবজেক্টটির পক্ষে গ্রহণযোগ্য কোনও পরবর্তী পদক্ষেপ নেই, কারণ এটি অবশ্যই একটি অ-alচ্ছিক মান প্রদান করতে পারে।
দস্তাবেজগুলি থেকে সম্পূর্ণ পাঠ্য (বিকল্প ক্লিক করে assertএবং preconditionএক্সকোডে চেষ্টা করুন ):
পূর্বশর্ত
এগিয়ে অগ্রগতি জন্য একটি প্রয়োজনীয় শর্ত পরীক্ষা করুন।
এমন শর্ত সনাক্ত করতে এই ফাংশনটি ব্যবহার করুন যা অবশ্যই শিপিং কোডে প্রোগ্রামটি অগ্রসর হওয়া থেকে বিরত থাকতে হবে।
খেলার মাঠ এবং ওওন বিল্ডগুলিতে (এক্সকোডের ডিবাগ কনফিগারেশনের জন্য ডিফল্ট): যদি মিথ্যাটিকে
conditionমূল্যায়ন করা হয়, মুদ্রণের পরে ডিবাগযোগ্য অবস্থায় প্রোগ্রামের প্রয়োগ বন্ধ করুনmessage।ইন-ও বিল্ড করে (এক্সকোডের রিলিজ কনফিগারেশনের জন্য ডিফল্ট): যদি
conditionমিথ্যাটিকে মূল্যায়ন করা হয় তবে প্রোগ্রামের প্রয়োগ বন্ধ করুন।-Ounchecked তৈরী করে সালে
conditionমূল্যায়ন করা হয় না, কিন্তু অপটিমাইজার অনুমান হতে পারে এটি হবে মূল্যায়নtrue। -শিক্ষিত বিল্ডগুলিতে এই ধারণাটি পূরণ করতে ব্যর্থতা একটি গুরুতর প্রোগ্রামিং ত্রুটি।
জাহির করা
একটি alচ্ছিক বার্তা সহ ditionতিহ্যবাহী সি-শৈলী যুক্ত করা।
অভ্যন্তরীণ স্যানিটি চেকগুলির জন্য এই ফাংশনটি ব্যবহার করুন যা পরীক্ষার সময় সক্রিয় থাকে তবে শিপিং কোডের কার্যকারিতা প্রভাবিত করে না। রিলিজ বিল্ডগুলিতে অবৈধ ব্যবহারের জন্য পরীক্ষা করতে; দেখতে
precondition।
খেলার মাঠ এবং ওওন বিল্ডগুলিতে (এক্সকোডের ডিবাগ কনফিগারেশনের জন্য ডিফল্ট): যদি মিথ্যাটিকে
conditionমূল্যায়ন করা হয়, মুদ্রণের পরে ডিবাগযোগ্য অবস্থায় প্রোগ্রামের প্রয়োগ বন্ধ করুনmessage।ইন-ও বিল্ডগুলি (এক্সকোডের রিলিজ কনফিগারেশনের জন্য ডিফল্ট),
conditionমূল্যায়ন করা হয় না এবং এর কোনও প্রভাব নেই।-Ounchecked তৈরী করে সালে
conditionমূল্যায়ন করা হয় না, কিন্তু অপটিমাইজার অনুমান হতে পারে এটি হবে মূল্যায়নtrue। -শিক্ষিত বিল্ডগুলিতে এই ধারণাটি পূরণ করতে ব্যর্থতা একটি গুরুতর প্রোগ্রামিং ত্রুটি।
data["name"]অস্তিত্ব নেই, তবে এটি হওয়া উচিত। প্রহরীটির ভিতরে দৃsert়তা থাকার কারণে ... অন্যথায় cra cra আমাকে ক্র্যাশ করে এবং সমস্যায় এনে আমার ত্রুটি ধরাতে সহায়তা করবে। একইভাবে, যদি এই কোডটি উত্পাদিত হয়, তবে দাবিটি প্রোগ্রামটি ক্র্যাশ করবে না এবং আমি যে ব্যবহার করেছি তা ব্যাকআপ কোডই return nilগ্রহণ করবে।
আমি সুইফট দৃser়পদগুলি পেয়েছি - অনুপস্থিত ম্যানুয়ালটিকে সহায়ক বলে মনে করি
debug release release
function -Onone -O -Ounchecked
assert() YES NO NO
assertionFailure() YES NO NO**
precondition() YES YES NO
preconditionFailure() YES YES YES**
fatalError()* YES YES YES
এবং সুইফট বিবর্তন সম্পর্কিত আকর্ষণীয় আলোচনা থেকে
- জোর দেওয়া: অভ্যন্তরীণ ত্রুটির জন্য আপনার নিজের কোড পরীক্ষা করা
- পূর্বশর্ত: আপনার ক্লায়েন্টরা আপনাকে বৈধ যুক্তি দিয়েছে তা যাচাই করার জন্য।
এছাড়াও, আপনাকে কী ব্যবহার করবেন সে সম্পর্কে সতর্কতা অবলম্বন করা উচিত, দৃser়তা ব্যর্থতা এবং অপ্টিমাইজেশন স্তরটি দেখুন
precondition()এবং preconditionFailure()করছে একই আচরণ থাকার । এই ফাংশনগুলির মধ্যে পৃথকটি হ'ল: preconditionভিতরে একটি শর্ত প্রয়োজন, যখন preconditionFailureকেবল বাইরে ফেলে দেওয়া হয়।
preconditionতাই আপনি মুক্তি মোডে সক্রিয় তা আপনার অ্যাপ অর্ণবপোত এবং পূর্বশর্ত ব্যর্থ অ্যাপ্লিকেশন বিনষ্ট হবে।
Assertডিফল্ট হিসাবে কেবল ডিবাগ মোডে কাজ করে।
এনএসএইচপিস্টারে কখন এটি ব্যবহার করব তা আমি এই দুর্দান্ত ব্যাখ্যাটি পেয়েছি:
দাবিগুলি ধ্রুপদী যুক্তি থেকে ধার করা একটি ধারণা। যুক্তি হিসাবে, দৃser়বিজ্ঞান একটি প্রমাণ মধ্যে প্রস্তাব সম্পর্কে বিবৃতি হয়। প্রোগ্রামিংয়ে, জোর দিয়ে প্রোগ্রামার অ্যাপ্লিকেশন সম্পর্কে যে জায়গাগুলি ঘোষিত হয় সেই জায়গাগুলিতে অনুমানগুলি বোঝায়।
পূর্ব শর্ত এবং পোস্টকন্ডিশনের ক্ষমতায় ব্যবহৃত হয়, যা কোনও পদ্ধতি বা ফাংশন সম্পাদনের শুরু এবং শেষে কোডের অবস্থা সম্পর্কে প্রত্যাশা বর্ণনা করে, দৃ describe়ভাবে একটি চুক্তি গঠন করে। নির্দিষ্ট পূর্বশর্ত ব্যর্থ হলে কার্যকর হওয়া রোধ করতে, রান-টাইমে শর্ত প্রয়োগের জন্যও দৃser়তা ব্যবহার করা যেতে পারে।
পূর্বশর্ত
func precondition(condition: @autoclosure () -> Bool, _ message: @autoclosure () -> String = default, file: StaticString = default, line: UWord = default)
এগিয়ে অগ্রগতি জন্য একটি প্রয়োজনীয় শর্ত পরীক্ষা করুন।
জাহির করা
func assert(condition: @autoclosure () -> Bool, _ message: @autoclosure () -> String = default, file: StaticString = default, line: UWord = default)
একটি alচ্ছিক বার্তা সহ ditionতিহ্যবাহী সি-শৈলী যুক্ত করা।
অভ্যন্তরীণ স্যানিটি চেকগুলির জন্য এই ফাংশনটি ব্যবহার করুন যা পরীক্ষার সময় সক্রিয় থাকে তবে শিপিং কোডের কার্যকারিতা প্রভাবিত করে না। রিলিজ বিল্ডগুলিতে অবৈধ ব্যবহারের জন্য পরীক্ষা করতে; পূর্বশর্ত দেখুন
খেলার মাঠ এবং ওওন বিল্ডগুলিতে (এক্সকোডের ডিবাগ কনফিগারেশনের জন্য ডিফল্ট): শর্তটি যদি মিথ্যা হিসাবে মূল্যায়ন করে তবে বার্তা প্রিন্ট করার পরে ডিবাগযোগ্য অবস্থায় প্রোগ্রামের প্রয়োগ বন্ধ করুন।
শুধু আমার 2 সেন্ট যোগ করতে চেয়েছিলেন। আপনি আপনার কোডটিতে যতগুলি যুক্তি চান তার সাথে যুক্ত করতে পারেন। আপনি এই কোডগুলি দিয়ে আপনার কোডটি শিপ করতে পারেন। উত্পাদন অ্যাপ্লিকেশনগুলির জন্য সুইফট এই কোড ব্লকগুলি মূল্যায়ন করে না। এগুলি কেবল ডিবাগ মোডের ক্ষেত্রে মূল্যায়ন করা হয়।
ডকুমেন্টেশন লিঙ্ক যুক্ত করা হচ্ছে
এছাড়াও swift.org থেকে চিত্র সংযুক্ত করা
আরও লক্ষ করুন, পূর্ব শর্তগুলির ক্ষেত্রে এটি নয়। পূর্ব শর্তাদি সহ প্রেরিত কোড ক্রাশ হবে এবং পূর্ব শর্তগুলি সত্য বলে মূল্যায়ন না করা হলে অ্যাপ্লিকেশনটি সমাপ্ত হবে।
সুতরাং সংক্ষেপে, দাবিগুলি ডিবাগিংয়ের জন্য, তবে উত্পাদনকে প্রভাবিত না করে পাঠানো যেতে পারে। উত্সগুলি ডিবাগ মোডে মূল্যায়ন করা হবে তবে উত্পাদনে নয়।
এবং
প্রাক-শর্তাদি উত্পাদন পরিবেশে অপ্রত্যাশিত জিনিস না ঘটে তা নিশ্চিত করার জন্য। এই শর্তগুলির মূল্যায়ন করা হয় এবং আপনার অ্যাপ্লিকেশনটি ভুয়া বলে মূল্যায়ন করা হলে সেগুলি বন্ধ করে দেবে