زنگ

کسانی هستند که این اخبار را قبل از شما می خوانند.
برای دریافت جدیدترین مقالات مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید زنگ را بخوانید
بدون هرزنامه

برنامه Swift من با EXC_BAD_INSTRUCTION و این خطا خراب می شود. این به چه معناست و چگونه می توانم آن را برطرف کنم؟

این پست برای گردآوری پاسخ "موارد شگفت زده شده" است ، بنابراین پراکنده نبوده و یافتن آنها دشوار است. در صورت تمایل می توانید پاسخ خود را اضافه کنید یا یک پاسخ ویکی موجود را ویرایش کنید.

7 راه حل فرم وب را برای "" خطای مهلک: به طور غیر منتظره صفر پیدا شد در حالی که مقدار اختیاری را باز می کنید "به چه معناست؟"

این پاسخ ویکی جامعه است. اگر احساس می کنید می توان این کار را بهتر انجام داد ، در صورت تمایل آن را ویرایش کنید!

سابقه و هدف: چه چیزی اختیاری است؟

در سوئیفت ، اختیاری یک نوع عمومی است که می تواند یک مقدار (از هر نوع) را نگه دارد یا اصلاً مقداری ندارد.

در بسیاری از زبانهای برنامه نویسی دیگر ، معنای خاص "نگهبان" اغلب برای نشان دادن استفاده می شود بی ارزش بودن ... به عنوان مثال ، در Objective-C ، صفر (اشاره گر صفر) نشانگر عدم وجود یک شی است. اما هنگام برخورد با آن پیچیده تر می شود انواع بدوی - آیا باید از -1 برای عدم وجود یک عدد صحیح ، یا شاید INT_MIN یا یک عدد صحیح دیگر استفاده شود؟ اگر مقدار خاصی به معنی "بدون عدد صحیح" انتخاب شود ، به این معنی است که دیگر نمی توان آن را در نظر گرفت قابل قبول مقدار.

Swift نوعی زبان ایمن است ، به این معنی که این زبان به شما کمک می کند انواع مقادیر کد شما را به روشنی درک کنید. اگر بخشی از کد شما انتظار یک رشته را دارد ، نوع ایمنی مانع از آن می شود که Int Int به اشتباه وارد شود.

در سوئیفت هر نوعی می تواند اختیاری باشد ... مقدار اختیاری می تواند هر مقداری از نوع اصلی باشد یا ارزش ویژه هیچ.

گزینه ها با استفاده از تعریف می شوند؟ پسوند بر اساس نوع:

Var anInt: Int \u003d 42 var anOptionalInt: Int؟ \u003d 42 var anotherOptionalInt: بین المللی؟ // `nil` پیش فرض است وقتی هیچ مقداری ارائه نشود

عدم وجود یک مقدار در یک مقدار اختیاری با nil نشان داده می شود:

AnOptionalInt \u003d صفر

(توجه داشته باشید که این صفر با صفر در Objective-C یکسان نیست. در Objective-C ، صفر عدم وجود یک معتبر است اشاره گر شی و در Swift ، پارامترهای اختیاری محدود به اشیا / / انواع مرجع نیستند. لزوما مانند شاید هاسکل رفتار نمی کند.)

چرا به دست آوردم " خطای کشنده: به طور غیرمنتظره هنگام گسترش یک مقدار اختیاری ، صفر است »?

برای دسترسی به مقدار اختیاری (در صورت وجود) شما نیاز دارید بسط دادن خود. مقدار اختیاری را می توان با خیال راحت یا اجباری استفاده کرد. اگر گزینه را مجبور به گسترش کنید و آن نه مهم است ، برنامه شما با پیام فوق خراب می شود.

Xcode با برجسته کردن خط کد ، خرابی را به شما نشان می دهد. مشکل در این خط رخ می دهد.

این حادثه می تواند با دو نوع برگشت متفاوت رخ دهد:

1. جدا کردن اجباری صریح

این با انجام می شود! اپراتور در سفارش اضافی. مثلا:

اجازه دهید یک رشته اختیاری: رشته ای؟ چاپ (anOptionalString!) //

از آنجا که anOptionalString در اینجا صفر است ، در خطی که به زور آن را باز می کنید ، خرابی رخ می دهد.

2. به طور ضمنی گزینه های غیر فعال شده است

آنها با تعریف می شوند! ، اما نه؟ بعد از نوع

Var optionalDouble: دو برابر! // این مقدار به طور ضمنی در هر کجا که استفاده شود باز نمی شود

فرض بر این است که این گزینه ها دارای یک مقدار هستند. بنابراین هر زمان که به اختیاری ضمنی گسترش یافته دسترسی پیدا کنید ، به طور خودکار برای شما به زور گسترش می یابد. اگر حاوی مقداری نباشد ، آتش می گیرد.

چاپ (اختیاری دو برابر) //

برای تعیین اینکه کدام متغیر باعث خرابی شده است ، می توانید ⌥ را فشار دهید تا کلیک کنید تا تعریفی را نشان دهید که در آن می توانید نوع اختیاری را پیدا کنید.

به طور خاص IBOletlet ها معمولاً به طور ضمنی گسترش می یابند. این به این دلیل است که xib یا استوری بورد شما هنگام اجرا خروجی ها را به هم پیوند می دهد بعد از مقداردهی اولیه. بنابراین ، باید مطمئن شوید که قبل از بارگیری در خروجی دسترسی ندارید. همچنین باید بررسی کنید که اتصالات در صفحه استوری برد / xib شما صحیح باشد ، در غیر این صورت مقادیر هنگام اجرا صفر می شوند و هنگامی که به طور ضمنی گسترش می یابند خراب می شوند.

چه زمانی باید اجباری شدن گزینه اختیاری را انجام دهم؟

جدا کردن اجباری صریح

به عنوان یک قانون کلی ، شما هرگز نباید صریحاً مجبور شوید که یک گزینه را گسترش دهید! اپراتور. ممکن است موارد استفاده وجود داشته باشد! قابل قبول - اما فقط درصورتی که 100٪ مطمئن باشید مقدار اختیاری حاوی مقدار است باید از آن استفاده کنید.

اگر چه می توان موردی باشید که می توانید همانطور که می دانید از استقرار نیرو استفاده کنید , چه اختیاری حاوی ارزش است - نه هیچ کدام یکی مکانهایی که نمی توانید با خیال راحت این اختیاری را مستقر کنید.

گزینه های ضمنی غیرفعال

این متغیرها به گونه ای طراحی شده اند که می توانید تعیین تکلیف آنها را بعداً در کد خود به تعویق بیندازید. این مسئولیت شماست که اطمینان حاصل کنید که قبل از اینکه با آنها ارتباط برقرار کنید از ارزش آنها برخوردار باشید. با این حال ، از آنجا که آنها شامل استقرار نیرو هستند ، از لحاظ ذاتی هنوز ایمن نیستند پیشنهاد می کند که مقدار شما صفر نیست ، اگرچه انتساب صفر معتبر است.

شما باید از گزینه های ضمنی گسترش یافته به عنوان استفاده کنید گزینه آخر ... اگر می توانید از یک متغیر تنبل استفاده کنید یا یک مقدار پیش فرض برای متغیر ارائه دهید - باید این کار را بجای استفاده از گزینه اختیاری گسترش یافته ضمنی انجام دهید.

با این حال ، چند سناریو وجود دارد که گزینه های ضمنی گسترش یافته مفید هستند و همچنان می توانید استفاده کنید روش های مختلف همانند زیر آنها را با خیال راحت مستقر کنید ، اما شما همیشه ... هست باید از آنها با دقت لازم استفاده کنید.

چگونه می توانم با خیال راحت با گزینه ها کار کنم؟

ساده ترین راه برای بررسی اینکه آیا مقدار اختیاری دارای مقداری است ، مقایسه آن با nil است.

If anOptionalInt! \u003d Nil (چاپ ("حاوی مقداری است!")) دیگری (چاپ ("آیا حاوی یک مقدار نیست."))

با این حال ، 99.9٪ از مواقعی که با گزینه ها کار می کنید ، واقعاً می خواهید به مقداری که در آن وجود دارد دسترسی پیدا کنید ، اگر حاوی یکی باشد. برای این کار می توانید استفاده کنید صحافی اختیاری .

اتصال اضافی

صحافی اختیاری به شما امکان می دهد بررسی کنید که آیا مقدار اختیاری دارد یا خیر - و به شما امکان می دهد مقدار منبسط شده را به یک متغیر یا ثابت جدید اختصاص دهید. اگر از x \u003d anOptional (...) یا var x \u003d anOptional (...) استفاده شود ، این از نحو استفاده می کند ، بسته به اینکه آیا پس از اتصال متغیر جدید باید تغییر کند.

مثلا:

اگر بگذارید number \u003d anOptionalInt (چاپ ("حاوی مقداری است! این \\ (عدد) است!")) دیگری (چاپ ("آیا عددی ندارد"))

معنی این کار ، ابتدا بررسی کنید که گزینه دارای یک مقدار باشد. اگر این بنابراین ، سپس مقدار "گسترش یافته" به یک متغیر جدید (عدد) اختصاص داده می شود ، که می توانید آزادانه از آن استفاده کنید ، انگار اختیاری باشد. اگر پارامتر اختیاری باشد نه شامل مقادیر است ، بند دیگری همانطور که انتظار دارید فراخوانی خواهد شد.

نکته جالب در مورد صحافی اختیاری این است که شما می توانید همزمان چندین گزینه را گسترش دهید. می توانید دستورالعمل ها را با کاما جدا کنید. در صورت گسترش همه گزینه ها ، برنامه موفقیت آمیز خواهد بود.

Var anOptionalInt: بین المللی؟ var anOptionalString: رشته؟ اگر بگذارید number \u003d anOptionalInt ، اجازه دهید text \u003d anOptionalString (چاپ ("anOptionalInt حاوی مقداری است: \\ (عدد). همچنین anOptionalString نیز چنین است ، آن" s: \\ (متن) ")) دیگر (چاپ (" یک یا چند مورد از گزینه ها "یک مقدار ندارند"))

یک ترفند شسته و رفته دیگر این است که شما همچنین می توانید با استفاده از ویرگول یک شرط خاص را در برابر مقدار پس از گسترش آزمایش کنید.

اگر بگذارید number \u003d anOptionalInt ، عدد\u003e 0 (چاپ ("anOptionalInt حاوی مقداری است: \\ (عدد) و آن بزرگتر از صفر است!"))

تنها استفاده از صحافی اختیاری در دستور if این است که می توانید از دامنه دستور به مقدار توسعه یافته دسترسی پیدا کنید. در صورت نیاز به دسترسی به مقدار خارج از محدوده بیانیه ، می توانید استفاده کنید دستورالعمل های امنیتی .

اپراتور نگهبان به شما اجازه می دهد تا شرط موفقیت را تعریف کنید - و دامنه فعلی فقط در صورت تحقق این شرط به اجرا ادامه می دهد. آنها با یک شرط نگهبان دیگری تعریف می شوند (...) حالت نگهبانی نحوی دیگری (...).

بنابراین ، برای استفاده از آنها با صحافی اختیاری ، می توانید این کار را انجام دهید:

شماره را بگذارید \u003d غیر اختیاری در غیر این صورت (بازگشت)

(توجه داشته باشید که در داخل بدنه نگهبان شما محافظت می کند باید برای خارج شدن از محدوده کد در حال اجرا از یکی از عبارات انتقال کنترل استفاده کنید).

اگر anOptionalInt حاوی مقداری باشد ، گسترش می یابد و به عدد ثابت جدید اختصاص می یابد. سپس کد بعد از حفاظت ادامه خواهد یافت. اگر حاوی مقداری نباشد ، مدافع کد را در پرانتز اجرا می کند ، که منجر به انتقال کنترل می شود ، بنابراین کد بلافاصله پس از آن اجرا نمی شود.

نکته شفاف و واقعی در مورد گزاره های دیده بان ، مقدار باز نشده است که اکنون برای استفاده در کدی که پس از این دستور موجود است در دسترس است (همانطور که می دانیم ، کد آینده می تواند اجرا شود) تنها در اگر گزینه مربوط باشد). این برای از بین بردن اهرام رستاخیز ایجاد شده با تودرتوی چندین جمله بسیار عالی است.

مثلا:

اجازه دهید شماره \u003d anOptionalInt چاپ شود (بازگشت) چاپ ("anOptionalInt حاوی مقداری است و آن" s: \\ (عدد)! ")

محافظین همچنین از همان ترفندهای شسته و رفته پشتیبانی شده توسط دستور if پشتیبانی می کنند ، مانند گسترش چندین گزینه به طور همزمان و استفاده از یک عبارت where.

این که آیا شما از دستور if یا محافظ استفاده می کنید ، همه چیز به این بستگی دارد نیاز دارد آیا هر کد آینده یک پارامتر اختیاری است که حاوی مقدار است.

اپراتور تلفیقی نیل

Nil Coalescing Operator نسخه خلاصه ای عالی از سه تایی است اپراتور شرطیدر درجه اول برای تبدیل گزینه ها به غیر اختیاری در نظر گرفته شده است. نحو a دارد ؟؟ ب یک ؟؟ b ، جایی که a یک نوع اختیاری است و b همان نوع a است (اگرچه معمولاً اختیاری نیست).

این اساساً به شما اجازه می دهد که بگویید ، "اگر a حاوی مقداری است ، آن را گسترش دهید. اگر اینگونه نیست ، به جای "b" را برگردانید. به عنوان مثال ، می توانید از آن به این صورت استفاده کنید:

اجازه دهید شماره \u003d اختیاری باشد ؟؟ 0

با این کار یک عدد ثابت از نوع Int تعریف می شود که اگر حاوی مقدار باشد یا دارای مقدار anOptionalInt باشد یا در غیر اینصورت 0 باشد.

این فقط یک مختصر است:

اجازه دهید شماره \u003d anOptionalInt! \u003d صفر؟ anOptionalInt! : 0

زنجیر اختیاری

برای فراخوانی یک روش یا دسترسی اختیاری به یک شی می توانید از زنجیر زنی اختیاری استفاده کنید. این کار به سادگی با پسوند نام متغیر با؟ استفاده كردن.

به عنوان مثال ، بیایید بگوییم که ما یک foo متغیر داریم ، مانند نمونه دیگری از Foo.

Var foo: احمق؟

اگر می خواهیم روشی را بر روی foo فراخوانی کنیم که هیچ چیزی بر نمی گرداند ، به سادگی می توانیم انجام دهیم:

احمق؟؟ آیا چیزی جالب ()

اگر foo حاوی مقداری باشد ، این روش روی آن فراخوانی می شود. اگر این اتفاق نیفتد ، هیچ اتفاق بدی رخ نخواهد داد - کد فقط به اجرای خود ادامه می دهد.

(این شبیه رفتار ارسال پیام به صفر در Objective-C است)

همچنین می توان از آن برای تنظیم ویژگی ها و همچنین روش های فراخوانی استفاده کرد. مثلا:

احمق؟ نوار \u003d نوار ()

باز هم ، اگر foo چیزی نباشد ، اتفاق بدی رخ نخواهد داد. کد شما فقط به اجرا ادامه می دهد.

یک ترفند دقیق دیگر که به شما امکان می دهد زنجیره ای اختیاری را زنجیر کنید این است که بررسی کنید تنظیمات ویژگی یا تماس روش حذف شده است یا خیر. می توانید این کار را با مقایسه مقدار برگشتی به nil انجام دهید.

(آیا این به این دلیل است که یک مقدار اختیاری یک Void را برمی گرداند؟ نه یک Void برای روشی که هیچ چیزی بر نمی گرداند)

مثلا:

اگر (foo؟ .Bar \u003d Bar ())! \u003d Nil (چاپ ("نوار با موفقیت تنظیم شد")) دیگری (چاپ ("نوار با موفقیت تنظیم نشد"))

با این وجود ، هنگام دستیابی به خصوصیات یا فراخوانی روشهایی که مقداری را برمی گردانند ، اوضاع کمی پیچیده تر می شود. از آنجا که foo اختیاری است ، هرچه از آن برگردانده شود نیز اختیاری است. برای مقابله با این مسئله ، می توانید گزینه هایی را که با استفاده از یکی از روش های فوق بازگردانده می شوند ، گسترش دهید یا اینکه foo را قبل از دسترسی به روش ها یا تماس های متدی که مقادیر را برمی گردانند ، گسترش دهید.

همچنین ، همانطور که از نامش پیداست ، می توانید این عبارات را با هم "رشته" کنید. این بدان معنی است که اگر foo یک ویژگی اختیاری باز دارد که دارای ویژگی qux است ، می توانید موارد زیر را بنویسید:

اجازه دهید اختیاری Qux \u003d foo؟ .Baz؟ .Qux

باز هم ، از آنجا که foo و baz اختیاری هستند ، صرف نظر از اختیاری بودن qux ، مقدار برگشتی از qux همیشه اختیاری خواهد بود.

نقشه و نقشه مسطح

ویژگی کم استفاده با flatMap توانایی استفاده از توابع نقشه و flatMap است. آنها به شما این امکان را می دهند که تبدیل های اختیاری را در متغیرهای اختیاری اعمال کنید. اگر پارامتر مقداری داشته باشد ، می توانید تغییر شکل داده شده را در آن اعمال کنید. اگر مهم نباشد ، صفر می ماند.

به عنوان مثال ، فرض کنید شما یک رشته اختیاری دارید:

اجازه دهید یک رشته اختیاری: رشته ای؟

اعمال تابع نقشه روی آن - می توانیم از تابع stringByAppendingString با رشته دیگری در stringByAppendingString استفاده کنیم.

از آنجا که stringByAppendingString یک آرگومان رشته اختیاری را می گیرد ، نمی توانیم مستقیماً رشته اختیاری خود را وارد کنیم. با این حال ، با استفاده از نقشه ، می توانیم از stringByAppendingString در صورت معتبر بودن anOptionalString استفاده کنیم.

مثلا:

Var anOptionalString: رشته؟ \u003d "نوار" anOptionalString \u003d anOptionalString.map (در برگشت رشته باز "foo" .stringByAppendingString (رشته باز نشده)) چاپ (anOptionalString) // اختیاری ("foobar")

با این حال ، اگر anOptionalString بی ربط باشد ، نقشه صفر برمی گردد. مثلا:

Var anOptionalString: رشته؟ anOptionalString \u003d anOptionalString.map (در ازای "foo" رشته باز نشده. stringByAppendingString (رشته باز نشده)) چاپ (anOptionalString) // صفر

flatMap مانند نقشه کار می کند ، با این تفاوت که به شما امکان بازگشت می دهد یکی دیگر یک نقشه مسطح اختیاری از بدنه بسته شدن. این بدان معناست که شما می توانید یک گزینه را در فرایندی وارد کنید که به ورودی غیر استاندارد نیاز دارد ، اما خود می تواند به صورت اختیاری خارج شود.

تلاش كردن!

از سیستم مدیریت خطای Swift می توان با استفاده از Do-Try-Catch با خیال راحت استفاده کرد:

انجام (اجازه دهید نتیجه را بگیرید \u003d برخی از ThhrowingFunc () را امتحان کنید) (چاپ (خطا))

اگر someThrowingFunc () خطایی ایجاد کند ، خطا با خیال راحت در بلوک catch قرار می گیرد.

خطای دائمی که در بلوک گرفتن مشاهده می کنید توسط ما اعلام نشده است - به طور خودکار با گرفتن ایجاد می شود.

همچنین می توانید خودتان خطا را اعلام کنید ، این مزیت را دارد که می توانید از آن در قالب مفید مانند زیر استفاده کنید:

انجام (اجازه دهید نتیجه بگیرید \u003d someThrowingFunc () را امتحان کنید) خطای اجازه را به عنوان NSError بگیرید (چاپ (error.debugDescription))

استفاده از این امتحان است راه درست خطاهای ناشی از عملکردهای پرتاب را امتحان کنید ، بگیرید و مدیریت کنید.

آیا تلاشی هم هست؟ که خطا را مصرف می کند:

اگر اجازه دهید نتیجه بگیرید \u003d سعی کنید؟ someThrowingFunc () (// جالب) دیگری (// مدیریت خرابی ، اما هیچ اطلاعات خطایی در دسترس نیست)

اما سیستم مدیریت خطای Swift همچنین توانایی "امتحان کردن آن" را با استفاده از try فراهم می کند! :

اجازه دهید نتیجه \u003d سعی کنید! someThrowingFunc ()

مفاهیم توصیف شده در این پست در اینجا نیز کاربرد دارند: اگر خطایی ایجاد شود ، برنامه خراب می شود.

فقط باید امتحان کنید! اگر بتوانید ثابت کنید که نتیجه آن هرگز در متن شما شکست نخواهد خورد - و این بسیار نادر است.

در بیشتر موارد ، شما از سیستم Do-Try-Catch کامل استفاده می کنید و اگر دوست دارید امتحان کنید؟ ، در موارد نادری که رسیدگی به خطا بی ربط است.

منابع

  • اسناد اپل در مورد گزینه های Swift
  • چه زمان استفاده و چه وقت عدم استفاده از گزینه های ضمنی گسترش یافته
  • بیاموزید که چگونه یک برنامه iOS خراب را اشکال زدایی کنید

پاسخ TL ؛ دکتر

به استثنای موارد بسیار کمی ، این قانون طلایی است:

از استفاده پرهیز کنید!

اعلام متغیر اختیاری (؟) ، نه گزینه های ضمنی گسترش یافته (IUO) (!)

به عبارت دیگر ، به جای استفاده از:
var nameOfDaughter: رشته؟

بجای:
var nameOfDaughter: رشته!

اگر اجازه دهید یا اجازه دهید متغیر اختیاری را لغو کنید

یا متغیر را به این صورت گسترش دهید:

اگر اجازه دهید nameOfDaughter \u003d nameOfDaughter (چاپ ("نام دختران من: \\ (nameOfDaughter)"))

یا مثل این:

نگهبان اجازه دهید nameOfDaughter \u003d nameOfDaughter دیگری چاپ کند (بازگشت) چاپ ("نام دختران من: \\ (nameOfDaughter) است"))

این پاسخ باید مختصر باشد ، برای درک کامل پاسخ پذیرفته شده را بخوانید

این سال پیش می آید همیشه ... این یکی از اولین مواردی است که توسعه دهندگان جدید Swift با آن روبرو هستند.

زمینه:

سوئیفت از مفهوم "اختیاری" برای مدیریت مقادیری استفاده می کند که ممکن است مقداری داشته باشند یا نداشته باشند. در زبانهای دیگر مانند C ، می توانید مقدار 0 را در یک متغیر ذخیره کنید تا نشان دهد که فاقد مقدار است. با این حال ، اگر 0 یک مقدار معتبر باشد چه می کنید؟ سپس می توانید از -1 استفاده کنید. اگر یک مقدار معتبر باشد ، چه می شود؟ و غیره.

گزینه های Swift به شما امکان می دهند متغیر از هر نوع را که شامل یک مقدار واقعی است یا یک مقدار نیست ، شخصی سازی کنید.

وقتی متغیر را به مقدار اعلام می کنید ، بعد از نوع علامت س questionال قرار می دهید (مقدار x یا بدون مقدار را وارد کنید).

یک ظرف اختیاری که شامل یک متغیر است از این نوع، یا هیچ.

برای به دست آوردن مقدار لازم ، "گسترش" نیست.

"!" اپراتور - عملگر "تغییر نیرو". او می گوید ، "به من اعتماد کن ، من می دانم که چه کار می کنم. من تضمین می کنم وقتی این کد اجرا می شود ، متغیر null نخواهد بود. " اگر اشتباه می کنید ، شکست می خورید.

اگر شما واقعا نه بدانید چه می کنید ، از "!" اجتناب کنید. مجبور باز کردن اپراتور این احتمالاً بزرگترین منبع اشکال در برنامه نویسان مشتاق Swift است.

نحوه برخورد با گزینه ها:

روشهای زیادی برای حل مشکلات وجود دارد که ایمن تر هستند. در اینجا برخی (لیست غیر جامع)

می توانید از صحافی اختیاری یا "اگر اجازه دهید" بگویید "اگر این مقدار اختیاری حاوی مقداری است ، آن مقدار را در یک متغیر اختیاری جدید ذخیره کنید. اگر این گزینه هیچ ارزشی ندارد ، از متن if دستور صرف نظر کنید. "

در اینجا مثالی از اتصال اختیاری با foo اختیاری ما آورده شده است:

اگر اجازه دهید newFoo \u003d foo // اگر اجازه صحافی اختیاری نامیده می شود. (چاپ ("foo is nil")) جای دیگر (print ("foo is nil")))

توجه داشته باشید که متغیری که هنگام استفاده از پیشنهاد اختیاری تعریف می کنید ، در متن عبارت if وجود دارد ("فقط در دامنه").

متناوباً ، می توانید از دستورالعمل نگهبان استفاده کنید که به شما امکان می دهد در صورت صفر بودن متغیر از عملکرد خود خارج شوید:

Func aFunc (foo: Int؟) (نگهبان اجازه دهید newFoo \u003d input else (برگشت) // برای بقیه عملکرد newFoo یک نوع غیر اختیاری است)

گزارشات Guard در Swift 2 اضافه شد. Guard به شما اجازه می دهد تا یک مسیر طلایی را در کد خود حفظ کنید و از سطوح فزاینده تودرتو که گاهی اوقات از استفاده اختیاری در صورت الزام آور بودن ناشی می شود ، جلوگیری کنید.

همچنین سازه ای به نام عملگر اتصال صفر وجود دارد. به شکل "optional_var ؟؟ در می آید؟ msgstr "جایگزینی" این یک متغیر اختیاری را با همان نوع داده موجود در اختیاری برمی گرداند. اگر گزینه شامل nil باشد ، مقدار عبارت را پس از "؟؟" برمی گرداند. نماد.

بنابراین می توانید از کدی مانند این استفاده کنید:

اجازه دهید newFoo \u003d foo ؟؟ "صفر" // "؟؟" چاپ اپراتور ادغام صفر است ("foo \u003d \\ (newFoo)")

همچنین می توانید از خطای try / catch یا guard استفاده کنید ، اما به طور کلی یکی از روش های بالا تمیزتر بودن است.

ویرایش:

یکی دیگر از گزینه های Getcha ، گزینه ای کمی ظریف تر ، گزینه های ضمنی گسترش یافته است. وقتی foo را اعلام کردیم ، می توان گفت:

Var foo: رشته!

در این حالت ، foo هنوز اختیاری است ، اما برای مراجعه به آن نیازی به گسترش آن ندارید. این بدان معناست که هر زمان که می خواهید به foo مراجعه کنید ، اگر بی فایده باشد خراب می شوید.

بنابراین این کد:

Var foo: رشته! اجازه دهید upperFoo \u003d foo.capitalizedString

بنابراین ، شما می خواهید با گزینه های ضمنی گسترش یافته بسیار مراقب باشید. (و شاید حتی تا زمانی که درک روشنی از گزینه های اضافی پیدا نکنید کاملاً از آنها اجتناب کنید).

نکته آخر: وقتی سوئیفت را برای اولین بار یاد گرفتید ، تظاهر کنید "!" نماد بخشی از زبان نیست. احتمالاً دچار مشکل خواهید شد.

ابتدا باید بدانید مقدار اختیاری چیست. می توانید به The Swift Programming Launage بروید

برای جزئیات

دوم ، باید توجه داشته باشید که مقدار اختیاری دو حالت دارد. یکی مقدار کامل است و دیگری مقدار صفر. بنابراین ، قبل از اجرای مقدار اختیاری ، باید بررسی کنید که در چه حالتی قرار دارد.

اگر اجازه دهید ... یا از نگهبان اجازه دهید ... جای دیگر و غیره می توانید استفاده کنید.

متناوباً ، اگر نمی خواهید وضعیت آن را قبل از اعدام بررسی کنید ، می توانید از var buildingName \u003d buildingName استفاده کنید ؟؟ "buildingName" به جای var buildingName \u003d buildingName ؟؟ "نام ساختمان".

همانطور که در پاسخ های بالا نحوه بازی ایمن با گزینه ها به وضوح توضیح داده شده است. سعی می کنم توضیح دهم که کدام گزینه ها واقعاً سریع هستند.

روش دیگری برای اعلام متغیر اختیاری است

و نوع اختیاری چیزی بیشتر از یک enum با دو مورد نیست ، یعنی

Enum اختیاری: ExpressibleByNilLiteral (موردی وجود ندارد (بسته بندی شده) ..)

بنابراین ، به متغیر "i" خود صفر می دهیم. می توانیم var i \u003d اختیاری .none را انجام دهیم یا مقداری را اختصاص دهیم ، مقداری مقدار var i \u003d Optional. بعضی (28) را منتقل خواهیم کرد.

با توجه به سریع ، صفر هیچ ارزشی ندارد. و نمونه ای را ایجاد کنید که با nil آغاز شده است. ما باید مطابق پروتکل ExpressibleByNilLiteral باشیم و اگر حدس بزنید خوب است ، فقط گزینه های سازگار با ExpressibleByNilLiteral و مطابقت با انواع دیگر دلسرد نمی شوند.

ExpressibleByNilLiteral یک روش واحد به نام init (nilLiteral :) دارد که instace را به nil مقداردهی می کند. شما معمولاً این روش را نمی گویید ، و با توجه به مستندات سریع ، هر زمان که نوع اختیاری را با صفر کلمه مقداردهی اولیه می کنید ، مستقیماً هنگامی که کامپایلر آن را فراخوانی می کند ، مستقیماً فراخوانی نمی شود.

حتی من مجبورم سرم را دور هم بپیچم (بدون قصد جناس) گزینه ها : D swfting همه مبارک .

هنگامی که می خواستم مقادیر Outlets را از روش آماده سازی به روش segue تنظیم کنم ، این خطا را داشت:

لغو آماده کردن func (برای segue: UIStoryboardSegue ، فرستنده: وجود دارد؟) (اگر اجازه دهید مقصد \u003d segue.destination as؟ DestinationVC (اگر let item \u003d sender as؟ DataItem (// این خط خطای destination.nameLabel.text \u003d item ظاهر می شود .نام)))

سپس متوجه شدم که نمی توانم مقادیر خروجی های کنترل کننده مقصد را تنظیم کنم ، زیرا کنترل کننده هنوز بارگیری یا مقداردهی اولیه نشده است.

بنابراین آن را اینگونه حل کردم:

overcide func آماده (برای segue: UIStoryboardSegue ، فرستنده: وجود دارد؟) (اگر اجازه دهید مقصد \u003d segue.destination as؟ DestinationVC (اگر let item \u003d sender as؟ DataItem (// این روش را در Controller مقصد ایجاد کرد تا پس از آن خروجی های خود را به روز کند) "مقصد در حال راه اندازی و بارگیری است. updateView (itemData: مورد)))))

کنترل کننده مقصد:

// این متغیر برای نگهداری داده های دریافت شده برای به روزرسانی متن برچسب بعد از VIEW DID LOAD var name \u003d "" // OutletsIBOutlet law var nameLabel: UILabel! overcide func viewDidLoad () (super.viewDidLoad () // بعد از بارگیری view.nameLabel.text \u003d name) تنظیمات اضافی را انجام دهید func updateView (itemDate: ObjectModel) (name \u003d itemDate.name)

من امیدوارم که این پاسخ به کسی که با مشکل مشابهی کمک می کند کمک کند زیرا متوجه شدم که پاسخ منطقی منبع خوبی برای درک گزینه ها و نحوه کار آنها است ، اما مستقیماً به این مسئله پرداخته نیست.

خطای کشنده: در حالی که مقدار اختیاری را گسترش می دهید ، به طور غیر منتظره صفر یافت شد

می گوید شما از متغیری استفاده می کنید که مقدار آن مقدار اولیه یا صفر تنظیم نشده باشد.

مثلا

Var tempVar: رشته ای؟ چاپ (tempVar!)

tempVar اولیه نیست ، بنابراین برنامه ها در این حالت خراب می شوند ، بنابراین شما باید از آن استفاده کنید

چاپ (tempVar ؟؟ "")

برای اطلاعات بیشتر به زنجیره اضافی مراجعه کنید

اشتباه مهلک سرنوشت

چی بود یک اشتباه مهلک از سرنوشت یا یک الگوی خاص که پاسخ بسیاری از سوالات را نشان می دهد. تا زمانی که با مشکلی روبرو نشویم ، از راه حل های آن اطلاعی نداریم ، زیرا هر آنچه در حال حاضر پنهان است ، بلافاصله برای ما آشکار نمی شود. فقط من یک بار دیگر متقاعد شدم که همه چیز در این زندگی باید پرداخت شود. فکر می کنید ما همیشه برای اشتباهات خودمان هزینه می کنیم؟ متأسفانه ، کسانی که لیاقت آن را ندارند ، رنج می برند.
من نامه ای از این محتوا را دیروز هنگام دریافت پیام های دریافتی دریافت کردم. این زن خود را به نستیا معرفی کرد و خواست داستان زندگی خود را در این بخش قرار دهد. بگذارید این یک راهنما برای کسانی شود که تصمیم گرفتند با شرط بندی روی "اسب سیاه" از "لباس سیاه" خلاص شوند.

سلام خوانندگان نامرئی نستیا از شهر در نوا برای شما نامه می نویسد. من در حال حاضر چهل و چهار ساله هستم ، اما موهای من کمی سفید است. اما این یک چیز کوچک است: شما می توانید روی آنها نقاشی کنید. اما شستن گناهان بسیار دشوارتر است ...
همه چیز از روزی آغاز شد که پیرزنی خمیده سخنان شیطانی یک نفرین بی رحمانه را بر زبان آورد. داشتم از کار برمی گشتم و عجله داشتم که هر چه زودتر به خانه برسم. وارد زیرگذر شدم و به طور اتفاقی مادربزرگم را که خواهان صدقه بود ، زدم. سکه هایی که در دست من بود با جهش در جهات مختلف غلت می خورد. من فرار نکردم ، اما شروع کردم به بالا بردن آنها از زیر پای عابران عجول. وقتی می خواستم دوباره آنها را به دست چروکیده ام برسانم ، چشمانمان به هم رسید.
- ”خوش شانس ، خوشحال ، ثروتمند ، زیبا. دندان ها "نادر" هستند ، چشم ها خوب تمیز هستند. دروغ می گویی ، نیمه کور. اگر خشک بشوی ، بدبخت شدی ، در جاده خواهی مرد! "- مادربزرگ زمزمه کرد و ماسه های سفید را از کیسه رشته ای ضرب و شتم زیر پاهای من پخش کرد.
من عذرخواهی کردم ، و بعد از اتوبوس در حال حرکت ، به دویدن خود ادامه دادم.
- "در اینجا ، لعنت به آن ، حالا شما صبر نمی کنید!" - من در قلبم فکر کردم.
این اتوبوس هر نیم ساعت یکبار کار می کند اما تنها درصورتی که بتواند از ازدحام جلوگیری کند. در ایستگاه اتوبوس نشستم و شروع به کاوش در اطراف کردم. افراد بیهوده با عجله به دنبال کار خود بودند و بی تفاوت به یکدیگر نگاه می کردند. یک کلانشهر بزرگ نمی تواند ضعف را تحمل کند ، زیرا در زمان ما کسی را که به طور تصادفی سقوط می کند لگدمال می کند.
با سوار شدن به یک اتوبوس شلوغ ، تا وسط کابین راه افتادم تا در ایستگاه بعدی من را تحت فشار قرار دهند. چهل دقیقه بعد با یک کلید در را باز کردم.
- "مادر ، شما قبلاً آمده اید؟ و امروز من در جغرافیا A گرفتم »- پسرم آندریوشا با من ملاقات کرد.
- "دخترخوب. ریاضیات چطور؟ »با زیرکی پرسیدم.
- "خوب آنجا ... معلم سختگیر است" - جواب پسر داد.
لباسم را در آوردم ، دوش گرفتم و رفتم تا شام را گرم کنم. سه روز کاری در پیش بود ، بنابراین من ساعت ده شب به رختخواب رفتم.
صبح روز بعد بلند شدم و رفتم تا قهوه درست کنم. بدون آن ، دیگر نمی توانم ، زیرا بدون بیدار شدن از خواب هنوز خمیازه می کشم) وقتی قهوه آماده شد ، می خواستم آن را در یک فنجان بریزم ، اما به طور تصادفی آن را روی پاهایم ریختم. با لعن و نفرین از درد ، سریع به توالت رفتم تا محل سوختگی را ادرار کنم ، و بررسی کردم که چطور این دارو درمانی انجام می شود. این بسیار دردناک بود ، اما من دندانهایم را فشار دادم و رنج ها را تحمل کردم. با فهمیدن اینکه برای کارم دیر شده ام ، مثل یک گلوله به خیابان پرواز کردم.
با عبور از "جاده" ، "مرد سبز" را دیدم ، متوجه نشدم که چگونه یک جیپ با پنجره های رنگی ایستاده کنار چراغ راهنما از آنجا پرید. هنوز کمی و من می توانستم زیر چرخ ها بیفتم. اما خدا بیامرزد ، زیرا او از قبل می دانست که بدون کمک او نمی توانم این کار را انجام دهم.
من برای کار دیر شده بودم. اما من خیلی نگران نبودم ، زیرا رئیس بخش هرگز برای شوخی های کوچک قسم نخورد.
- "آناستازیا! كجا كار ميكني؟ در یک دفتر شراشکین یا یک شرکت بزرگ؟ اگر فکر می کنید می توانید روز کار خود را با اختیار خود جیره بندی کنید ، پس صریحاً به شما می گویم که بسیار اشتباه کرده اید! این پروژه با نقض فاحش مقررات تحویل داده شد و از بالا قبلاً سیگنالی مبنی بر اینکه همه ما با هم هستیم چرند بود! مثل او ، معمولاً فقط او رنج خواهد برد ، - الاغ من! "- گویی فریاد زد که گویی از زنجیره ای رهبر شکسته شده است.
من هرگز او را اینگونه ندیده ام. با نوشتن پرخاشگری وی برای احساس ناراحتی ، کنار کامپیوتر نشستم تا ایرادات خود را برطرف کنم. با پایان روز کاری ، تازه کردم طرح تجاری و طبق معمول به سمت ایستگاه اتوبوس دوید. در گذرگاه کسی نبود. و صادقانه بگویم ، من مادربزرگ و عبارات دیوانه وار عرفانی او را فراموش کرده ام.
وارد آپارتمان شدم ، پسرم را در حال تماشای تلویزیون دیدم. یک فیلم ترسناک دیگر نیز وجود داشت که هیولاهای ساخته شده را ترساند.
روز بعد زمین خوردم و دستم را به شدت زخمی کردم. سوار اتوبوس شدم ، تقریباً از پله ها افتادم. اکنون من به تفصیل شرح نخواهم داد که چه اتفاقات عجیبی برای من رخ داده است. عملا روزی نبود که صدمه ای نبینم. من متوجه حملات ترس غیر منطقی و حملات مکرر سردرد شدم. به نظرم رسید که یک رگه سیاه در زندگی من ایجاد شده است. اما من همه چیز را به مشکلات موقتی نسبت دادم.
یک روز عصر ، داشتم از کار برمی گشتم.
- "دختر ، ننه را به مادربزرگت بده. خودداری نکنید ، "- صدای قدیمی را شنیدم.
برگشتم ، مادربزرگي را ديدم كه با چشمان مهربان به من نگاه كرد. من یک تغییر در جیبم را خراش دادم و آن را به مادربزرگم دادم.
- "اما شما خراب شده اید. همه چیز از دست می افتد و فرنی پخته نمی شود. من به شما کمک می کنم تنبیه شده را تنبیه کنید. به کلیسا بروید ، جریان را دور بریزید. شما آن را ندارید سه شمع را در آستانه قرار دهید ، طناب بزنید. این عبارت را بگویید: آتش می سوزد ، مار هیس می کند. بگذارید کسی که خسارت را می فرستد بمیرد. نفرین من در بدبختی از بین خواهد رفت. این از من خواهد آمد ، دیگری آن را می گیرد. بدون عبور از خود ، به عقب برگردید. صبح درمان می شوی. ”مادربزرگ با لنگی به شدت گفت.
روز بعد همان کاری را کردم که پیرزن به من گفت. و ، اینک همه چیز حل شد. باور کنید یا نکنید ، اینگونه است. اما در آن روز ، یک اشتباه مهلک در حال باز کردن پنجره های باز من بود.
برای اینکه "کمی" داستان خود را "مچاله" کنم ، می گویم که کودک من بیمار شد. ابتدا کابوس دید و نیمه شب با فریاد از خواب بیدار شد. سپس او اغلب حالت تهوع پیدا می کرد و در جلسه مدرسه به من گفتند که او "در ابرها" است. آندریوش جلوی چشمان ما ذوب می شد.
ما نزد همه پزشکان رفتیم و آزمایشات لازم را پشت سر گذاشتیم. اما همه چیز در حد طبیعی بود. پس از دریافت ارجاع برای معاینه روانشناسی ، به یک متخصص خوب مراجعه کردیم. او آزمایش هایی را انجام داد ، اما چیزی خارق العاده پیدا نکرد.
مادرم به طوری که آندریوشا تحت نظارت قرار گرفت ، نزد ما نقل مکان کرد و برای من نیز راحت تر بود. من نمی دانستم چه کاری باید انجام دهم.
چهار ماه بعد ، پسرم درگذشت.
من به بیمارستان رسیدم ، آنها داروها را برای من بردند ، جایی که من تحت نظارت دائمی یک روانپزشک اعصاب بودم. در آنجا حقیقت واقعی را آموختم.
درمانگران معنوی اغلب به بیمارستان دعوت می شوند تا كشیش بتواند بخش را تقدیس كرده و با برخی از بیماران صحبت كند. چه دیر به همه چیز پی بردم! چقدر دیر…
- ”انتقام متعلق به خدا نیست ، کودک. او غم و اندوه می فرستد تا ما به او نزدیکتر شویم ، درک کنید. ما همه مصائب را به نفع شناخت حق تعالی تحمل می کنیم. شما شر را به خود جذب کرده اید و تصمیم گرفته اید که با همان رنگ روی آن نقاشی کنید. این همه از ضعف معنوی است. شما نباید یک پیشگوش ، یک جادوگر داشته باشید ، زیرا این مانند مرگ است. کتاب مقدس می خواند ، اما کتاب در ساعت تعیین شده باز می شود تا بتوانیم پاسخ همه سالات را پیدا کنیم. شما قدرت شیطانی در خود داشتید ، و دوباره آن را با پیشگویی ضرب کردید ، و سخنان یک فریبنده شیطانی را بر زبان آوردید. شما نمی توانید توسط یک دیو از شر یک دیو خلاص شوید. او نمی تواند بدن را ترک کند و بدون گوشت باشد. فرزند شما پناهگاه او شده است. خدا آن را گرفت تا روح از دست رفته شما را دوباره زنده کند. او او را نجات داد تا شما را نجات دهد. "کشیش فرزانه با ریش خاکستری گفت.
سه سال دردناک در این راه گذشت.
من دنیای مردم را به خاطر عنصری دیگر رها کردم ، جایی که باید با یک دعای قلبی فهمیدم که یک اشتباه مهلک سرنوشت راهی خاردار به یک زندگی خداپسندانه است.

در این مقاله چندین روش برای حل مشکل مربوط به اتوکد شرح داده شده است.

ما در مورد خطاهایی که هنگام شروع اتوکد ، هنگام ذخیره نقاشی یا حتی هنگام چاپ یک سند روی چاپگر متصل به شبکه ، ظاهر می شوند ، صحبت خواهیم کرد.

یعنی در مورد خطایی که منجر به بسته شدن اضطراری برنامه می شود:

خطای کشنده استثنا e e06d7363h بدون کنترل در fd76bccdh

خطای FATAL: استثنای e0434f4dh بدون کنترل در ساعت 7c81eb33h

استثنا بدون کنترل در 7c81eb33h

کمی متفاوت به نظر می رسند اما یکسان هستند.

این پیام های خطا نشان می دهد که برنامه هنگام نصب خراب است. به عنوان مثال ، هنگام نصب ، برخی از پرونده ها توسط آنتی ویروس مسدود شده اند ، windows Defender یا یک سرویس تأیید امضای دیجیتال. بنابراین ، توصیه می شود هنگام نصب برنامه ، آنتی ویروس را غیرفعال کرده و سایر برنامه های دیگری را که ممکن است در روند نصب اختلال ایجاد کنند ، ببندید.

و حالا بیایید سراغ حل واقعی مشکل برویم.

روش 1

در حالت اول ، خطایی را که هنگام چاپ یک سند در چاپگر شبکه رخ می دهد در نظر بگیرید:

خطای مهمی e06d7363hexception بدون کنترل در fd76bccdh

برای خلاص شدن از آن ، می توانید پوشه ها را حذف کنید:

C: \\ Users \\ USRNAME \\ AppData \\ Roaming \\ Autodesk و C: \\ Users \\ USRNAME \\ AppData \\ Local \\ Autodesk

و اتوکد را دوباره نصب کنید.

روش 2

موارد زیر می تواند به رفع آن کمک کند خطای داده شده، بنابراین این دوباره نصب نرم افزار است:

NetFramework 1.1

هنوز بهتر است ، تمام نسخه های NetFramework را از سیستم حذف کرده و نصب اتوکد را دوباره انجام دهید. در هنگام نصب ، خود نصب کننده NetFramework را در اتوکد مناسب تری نصب می کند.

روش 3

در ابتدای مقاله ، قبلا گفته شد که در هنگام نصب ، سرویس تأیید امضای دیجیتال ممکن است با نصب تداخل داشته باشد. بنابراین باید آن را خاموش کنید.

برای این:

  1. کادر محاوره ای Run را باز کنید ، می توانید از ابتدا یا با فشار دادن میانبر صفحه کلید اجرا کنید در + R
  2. دستور را وارد کنید acsignoptو Enter را فشار دهید.

3. در پنجره "تنظیمات تأیید امضای دیجیتال" که ظاهر می شود ، علامت کادر کنار پیام "تأیید امضای دیجیتال و نمایش نمادهای خاص" را بردارید.

4- روی OK کلیک کنید تا پنجره بسته شود. اتوکد را کاملاً حذف و نصب کنید.

عملکرد را بررسی کنید. اگر خطا همچنان ظاهر شد ، به روش بعدی بروید.

روش 4

در روش چهارم ، شما باید چند مقدار را در رجیستری تغییر دهید.

  1. ویرایشگر رجیستری را شروع کنید.
  2. به مسیر زیر بروید: HKEY_CURRENT_USER \\ نرم افزار \\ Autodesk \\ AutoCAD \\ R18.0 \\ ACAD-8000: 409 \\ خدمات وب \\ مرکز ارتباطات

توجه داشته باشید! مسیر ممکن است کمی متفاوت باشد ، یعنی مقدار R18.0بسته به نسخه اتوکد ممکن است متفاوت باشد. به عنوان مثال R19.0 ، هیچ مشکلی ندارد ، احساس راحتی کنید و ادامه دهید.

4- مقادیر هر دو کلید را به 00000000 (هشت صفر) تغییر دهید.

توجه داشته باشید! برای ویرایش رجیستری ، به حقوق مدیر نیاز دارید.

"کشنده" چگونه است؟ شما اغلب این کلمه را در متن های مختلف می شنوید ، بنابراین معنی آن همیشه روشن نیست. امروز معنی قید و برخی از عبارات را با آن روشن خواهیم کرد.

"Fatum" سرنوشت است

در واقع ، از "لاتین" لاتین سرنوشت است. بنابراین ، شما به راحتی می توانید آنچه کشنده است را تعیین کنید:

  1. چیزی مرموز ، تعریف مهلک زندگی یک شخص.
  2. آنچه فاجعه را پیش فرض می گیرد احتمالاً مرگ است.

اما نترسید ، غالباً این مسئله مربوط به مرگ نیست بلکه مربوط به جبر است. به عنوان مثال می توانید از زبان مفسران مسابقات ورزشی تیمی بشنوید: "اشتباه این دروازه بان برای تیم مهلک شد." از این گذشته ، تماشاگران می فهمند: دروازه بان دلیل بیماری مهلک برای همه هم تیمی هایش نبود و آنها پس از مسابقه از دنیا نرفتند. در این حالت ، اشتباه دروازه بان مهلک است ، زیرا نتیجه مسابقه را از قبل تعیین کرده و سرنوشت ساز رقم خورده است. "مهلک" چیزی است که نمی تواند پایان خوشی داشته باشد.

تقدیرگرایی و اراده گرایی

با کمال تعجب ، چیزی که با سرنوشت همراه است ، توسط یک شخص معنای مثبت داده نمی شود.

سیستم های منحصر به فردی وجود دارد - تقدیرگرایی و اراده گرایی. با تقدیرگرایی ، همه چیز روشن است - این یک جهان بینی است که معتقد است: هیچ آزادی در جهان وجود ندارد ، و همه چیز منوط به یک برنامه سرنوشت است. علاوه بر این ، به هر حال ، یک فرد تقدیرگرایانه لزوماً بدبین نیست. اینها افرادی هستند که به سرنوشت اعتقاد دارند ، معتقدند که قطعاً حداقل بعضی از آنها خوش شانس خواهند بود. چیز دیگر این است که آنها به ندرت خوش شانس هستند ، اما مهم نیست. در بیشتر موارد ، تقدیرگرایی شامل مقدار نسبتاً بدبینی و نابودی است. وقتی فرد در حال سقوط در صفحه ای متمایل است ، معمولاً تقدیرگرایی را به خاطر می آورند.

و اما "داوطلبانه" چیست؟ این اصطلاح برای بینندگان اتحاد جماهیر شوروی و روسیه از فیلم "زندانی قفقاز" ساخته L. Gaidai آشنا است. اما تعداد کمی از مردم معنی آن را می دانند. و این مفهوم اعتقاد زیر را فرض می کند: نیروی محرکه اصلی در جهان آزادی انسان یا خدا است (یا آنچه جایگزین او می شود). و می خواهم بگویم که اراده گرایی ، برخلاف تقدیرگرایی ، خوش بینانه است ، اما با یادآوری متفکرانی که به این آموزه پایبند بودند (F. Nietzsche، A. Schopenhauer) ، به نوعی زبان برعکس نمی شود. تفاوت اصلی بین تقدیرگرایی و اراده گرایی در موارد زیر نهفته است: برخی معتقدند که آزادی وجود ندارد ، در حالی که دیگران چیزی جز آزادی ندارند. به هر حال ، "کشنده" این است که قطعاً با هیچ چیز خوبی برای یک شخص پایان نخواهد یافت.

مارتین ادن به عنوان نمونه ای از سرنوشت غم انگیز

رمان جک لندن اثری ابدی است ، داستان نبرد یک شخص با سرنوشت و زندگی را روایت می کند. نکته بد این اثر این است که نویسنده نگرش ایدئولوژیکی خاصی داشت: عشق نیروی محرکه اصلی در جهان است. و در حالی که قهرمان لندن فکر می کرد روت او را دوست دارد ، بر خود غلبه کرد ، رشد کرد. از این گذشته ، مارتین ادن یک ناخن است. اما به محض اینکه شخصیت اصلی متوجه شد که روت آدم ساختگی است ، بلافاصله پژمرده شد. برای کسانی که نخوانده اند ، همه کارت ها را فاش نخواهیم کرد ، اما بگذارید بگوییم: ملاقات با روت نتیجه مهلک را تعیین کرد (معنی این امر از متن مشخص است ، و اگر مشخص نیست ، پس جک لندن را بخوانید) از سرنوشت مارتین ادن.

اشتباه مهلک نویسنده

جک لندن نویسنده ابدی است ، یعنی تا زمانی که وجود داشته باشد خوانده می شود زبان انگلیسی و افرادی که قادر به ترجمه از او هستند ، اما او نیز اشتباهی مرتکب شد ، که برای قهرمانش بسیار گران تمام شد. خواننده باهوش می فهمد چه چیزی در سوال... جک لندن معتقد بود: مهمترین چیز در زندگی عشق است و وقتی شخصی از عشق محروم شود ، دیگر دلیلی برای زندگی ندارد. مارتین ادن دقیقاً قربانی چنین نگرشی شد. و این کاملاً منطبق با تعریف "اشتباه مهلک" است - این همان چیزی است که سرنوشت قهرمان را از پیش تعیین کرده ، با او یک شوخی بی رحمانه بازی کرده است. اعتقاد سیستمی جک لندن به عشق ، تمام تلاش مارتین ادن را برای خود بودن بی ارزش کرد.

زنگ

کسانی هستند که این اخبار را قبل از شما می خوانند.
برای دریافت جدیدترین مقالات مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید زنگ را بخوانید
بدون هرزنامه