গতিবেগে `লেট এবং` ভ্যারির মধ্যে পার্থক্য কী?


321

অ্যাপলের সুইফট ভাষার মধ্যে letএবং এর varমধ্যে পার্থক্য কী ?

আমার বোধে, এটি একটি সংকলিত ভাষা তবে সংকলনের সময় এটি টাইপটি পরীক্ষা করে না। এটা আমাকে বিভ্রান্ত করে তোলে সংকলক টাইপ ত্রুটি সম্পর্কে কীভাবে জানতে পারে? যদি সংকলক প্রকারটি পরীক্ষা করে না, এটি কি পরিবেশের পরিবেশে সমস্যা নয়?


35
চলুন ধ্রুবকগুলির জন্য হয়, ভেরিয়েবলের জন্য var হয়।
কলিন হেন্ডারসন

2
@ অ্যাডওয়ার্ড সংকলন সময়ে কোনও প্রকারের পরীক্ষা করে বোঝাতে কী বোঝ? আমি যতদূর বলতে পারি, এটি স্ট্যাটিকালি টাইপ করা হয়েছে তবে সংকলক নিজে থেকে এটি বের করতে পারলে প্রকারগুলি অনুমান করা হয়। তবে আমি কেবল 25 পৃষ্ঠায় আছি ... ;-)
জোছিম ইসাকসন

4
এটি বিষয়টিতে তবে একটি দুর্বল প্রশ্নযুক্ত প্রশ্ন। সেখানে অন্তত 2 প্রশ্ন আছে (ঝ) মধ্যে পরিবর্তন এলইটি এবং Var ; (ii) নিরাপদ বনাম টাইপ ইনফারার। তদ্ব্যতীত, যখন পোস্টারটি প্রযোজনার মঞ্চের কথা উল্লেখ করেছিল, তখন তিনি সত্যিকার অর্থে রান সময়েই বোঝাতে চেয়েছিলেন।
কেভিন লে - খনলে

1
সংকলন (অ্যারে এবং অভিধান) সংজ্ঞায়িত করে এমন ভেরিয়েবলগুলিতে ব্যবহার করা ভেরিয়েবল সংগ্রহ তৈরি করে (কেবলমাত্র রেফারেন্সই নয় তবে সংগ্রহের বিষয়বস্তুও সংশোধন করা যায় var ভার্সের অন্যান্য ব্যবহার একটি ফাংশনে পাস হওয়া প্যারামগুলিকে সংশোধন করতে সক্ষম হচ্ছে: ফানক foo (var বার: ইন্ট) আপনাকে ফাংশন স্কোপে স্থানীয়ভাবে প্যারাম বারটি সংশোধন করার অনুমতি দেবে
লরেন্ট

উত্তর:


407

letশব্দ একটি ধ্রুবক করবেঃ

let theAnswer = 42

theAnswerপরে পরিবর্তন করা যাবে না। এ কারণেই কিছু weakব্যবহার করে লেখা যায় না let। রানটাইম চলাকালীন তাদের পরিবর্তন করা দরকার এবং varপরিবর্তে আপনাকে অবশ্যই ব্যবহার করা উচিত ।

varএকজন সাধারণ পরিবর্তনশীল সংজ্ঞায়িত করে।

আকর্ষণীয় কি:

একটি ধ্রুবকের মান সংকলন সময়ে জানা প্রয়োজন হয় না , তবে আপনাকে অবশ্যই একবারে মূল্য নির্ধারণ করতে হবে।

আর একটি অদ্ভুত বৈশিষ্ট্য:

আপনি ইউনিকোড অক্ষর সহ ধ্রুবক এবং পরিবর্তনশীল নামের জন্য আপনার পছন্দ মতো প্রায় কোনও অক্ষর ব্যবহার করতে পারেন:

let 🐶🐮 = "dogcow"

এর থেকে অংশগুলি: অ্যাপল ইনক। "দ্য সুইফ্ট প্রোগ্রামিং ভাষা।" iBooks। https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewBook?id=881256329

সম্পাদনা

কারণ মন্তব্যগুলি উত্তরগুলিতে অন্যান্য তথ্য যুক্ত করার জন্য জিজ্ঞাসা করছে, এটি সম্প্রদায় উইকির উত্তরে রূপান্তরিত করে । উত্তরটি আরও উন্নত করতে নিখরচায় সম্পাদনা করুন।


1
সি এবং সি ++ ইউনিকনগুলির মাধ্যমে ইউনিকোড শনাক্তকারীদেরও অনুমতি দেয়। সংকলক যদি কোনও ইউনিকোড উত্স এনকোডিং সমর্থন করে তবে আপনি কেবল ইউনিকোড অক্ষর সরাসরি ব্যবহার করতে পারেন। উদাহরণস্বরূপ auto 🐶🐮 = "dogcow";ঝনঝন জন্য C ++ এ কাজ করে।
bames53

131
@ বেমস ৫৩ ঠিক আছে, আমি যেমন কোনও প্রোগ্রামটি ডিবাগ করার চেয়ে কেবল নিশ্চিত নই: if 😍 === 💝 { 💔 = ♠︎ }:);)
জেএম66 6

এটি কি REPL এর জন্য প্রযোজ্য? কারণ আপনি REPL এ ধ্রুবককে আবার নিয়োগ দিতে পারেন।
আহমেদ আল হাফৌদ

1
প্রথমত, উপরে উল্লিখিত হিসাবে, এটি আরপিএলে সম্পূর্ণ আলাদা। দ্বিতীয়ত, যদি এটি একটি ধ্রুবক হয় তবে এটি একটির খুব বেশি নয়। এটি সংকলকটিতে ঠিক কাজ করে: আসুন foo = [1,2,3]; ফু [2] = 5; println ("(foo)") // [1, 2, 5]
কেভিন ফ্রস্ট

31
এই উত্তরটি সর্বাধিক উত্সাহিত হলেও মানের ধরণের পরিবর্তে অবজেক্টের উল্লেখ করার সময় কীভাবে বর্ণ / আচরণ করা যায় তার কোনও উল্লেখ অনুপস্থিত। মূলটি হ'ল উভয় ক্ষেত্রে আপনি এখনও অবজেক্টের বৈশিষ্ট্যগুলি পরিবর্তন করতে পারেন, তবে অন্য অবজেক্টের উল্লেখ করতে পয়েন্টারটি পরিবর্তন করতে পারবেন না। এটি পূর্ণসংখ্যা এবং স্ট্রিংয়ের সাথে জড়িত বেসিক উদাহরণগুলি থেকে তাত্ক্ষণিকভাবে স্পষ্ট নয়।
স্যালটিনাটস

33

মতে দ্য সুইফট ভাষা বইয়ের প্রোগ্রামিং

সি এর মতো সুইফ্ট একটি সনাক্তকারী নাম দ্বারা মানগুলি সংরক্ষণ এবং উল্লেখ করতে ভেরিয়েবল ব্যবহার করে। যার মান পরিবর্তন করা যায় না, পরিবর্তনগুলিও সুইফট ব্যাপকভাবে ব্যবহার করে। এগুলি ধ্রুবক হিসাবে পরিচিত, এবং সি এর ধ্রুবকগুলির চেয়ে অনেক বেশি শক্তিশালী are

উভয় varএবং letহয় রেফারেন্স , অতএব letএকটি হল const রেফারেন্স । মৌলিক ধরণের ব্যবহারগুলি কীভাবে letতার চেয়ে আলাদা তা দেখায় না const। শ্রেণীর উদাহরণগুলির সাথে এটি ব্যবহার করার সময় পার্থক্যটি আসে (রেফারেন্স ধরণের):

class CTest
{
    var str : String = ""
}

let letTest = CTest()
letTest.str = "test" // OK

letTest.str = "another test" // Still OK

//letTest = CTest() // Error

var varTest1 = CTest()
var varTest2 = CTest()
var varTest3 = CTest()

varTest1.str = "var 1"
varTest2.str = "var 2"
varTest3 = varTest1
varTest1.str = "var 3"

varTest3.str // "var 3"

1
এই পরিভাষাটি পুরোপুরি ভুল ... সমস্ত উল্লেখগুলি প্রকৃতপক্ষে কনস্ট রেফারেন্স। "কনস্ট রেফ" এর কোনও ধারণা নেই। একবার আবদ্ধ হয়ে গেলে, একটি রেফারেন্স সর্বদা একই মেমরি ঠিকানায় আবদ্ধ হয় এবং পরিবর্তন বা "আনসিটেড" করা যায় না। আমি বিশ্বাস করি আপনার মানে ভ্যার একটি "পয়েন্টার" এবং যাক একটি "
কনস্ট

@ আইবেবে আপনি লিখছেন যা উদাহরণস্বরূপ সি ++ তে সঠিক বলে আমি মনে করি উপরের স্নিপেটটি প্রমাণ করেছে যে এটি সুইফ্টের ক্ষেত্রে নয়। পয়েন্টারগুলি পয়েন্টার গাণিতিক এবং সরাসরি মেমরির অ্যাক্সেসের অনুমতি দেয়, যা এখানে আবার ঘটনা নয়। - সম্পাদনা করুন: আমি কোনও প্রমাণ পাইনি যে সমস্ত রেফারেন্সগুলি সত্যই কনস্ট্যান্ট রেফারেন্স প্রতিটি প্রোগ্রামিং ভাষার জন্য সত্য।
ক্রজাক 20'15

উইকিপিডিয়া পয়েন্টার অনুসারে
বিটিডাব্লু হ'ল

2
আমি আপনার পরিভাষা ভুল বলে সম্মত। varএবং letশনাক্তকারীকে আবদ্ধ হওয়ার বিষয়টি রেফারেন্সের মতো কিনা তা নিয়ে কিছুই করার নেই। প্রকারটি যদি এক প্রকার হয় structতবে এটি ধারণাগতভাবে একটি মান। প্রকারটি যদি classএটি হয় তবে এটি ধারণাগতভাবে একটি রেফারেন্স এবং যদি letব্যবহৃত হয় তবে রেফারেন্সটি একটি ধ্রুবক । যদি CTestস্ট্রাক্ট থাকে letTestতবে আপনার অ্যাসাইনমেন্টগুলির কোনওটিই কাজ করবে না।
জেরেমিপ

1
প্রকারটি যদি structএটি একটি মান ধরণের হয় তবে এটি সম্পর্কে ধারণাগত কিছুই নেই। classরেফারেন্স টাইপের সাথে একই । কোনও মান ধরণের মোডিফাই করার সময় আপনি এই ধরণের একটি নতুন উদাহরণ তৈরি করেন। developer.apple.com/swift/blog/?id=10 সুতরাং স্পষ্টতই আপনি letমান প্রকারের ক্ষেত্র / বৈশিষ্ট্যগুলিকে পরিবর্তন করতে পারবেন না ।
ক্রজাক

15

letস্থির সংজ্ঞা এবং varভেরিয়েবল সংজ্ঞায়িত করতে ব্যবহৃত হয় ।


7

এই পার্থক্যটি মিউটিবিলিটি / আনমুটিবিলিটি ধারণা দ্বারা অবহিত করা ভাল যা অবজেক্টস স্পেসের মান এবং উদাহরণগুলির পরিবর্তনশীলতার সঠিক দৃষ্টান্ত যা কেবলমাত্র "ধ্রুবক / পরিবর্তনশীল" স্বাভাবিক ধারণার চেয়ে বড়। এবং তদ্ব্যতীত এটি উদ্দেশ্য সি পদ্ধতির কাছাকাছি।

2 ডেটা প্রকার: মান প্রকার এবং রেফারেন্স প্রকার।

মান প্রকারের প্রসঙ্গে:

'আসুন' একটি ধ্রুবক মান (অকেটযোগ্য) সংজ্ঞায়িত করে। 'var' একটি পরিবর্তনযোগ্য মান (পরিবর্তনীয়) সংজ্ঞায়িত করে।

let aInt = 1   //< aInt is not changeable

var aInt = 1   //< aInt can be changed

রেফারেন্স প্রকারের প্রসঙ্গে:

একটি ডেটার লেবেল মান নয় একটি মান উল্লেখ।

if aPerson = ব্যক্তি (নাম: ফু, প্রথম: বার)

এপারসনে এই ব্যক্তির ডেটা থাকে না তবে এই ব্যক্তির ডেটার রেফারেন্স থাকে।

let aPerson = Person(name:Foo, first:Bar)
               //< data of aPerson are changeable, not the reference

var aPerson = Person(name:Foo, first:Bar)
               //< both reference and data are changeable.

eg:
var aPersonA = Person(name:A, first: a)
var aPersonB = Person(name:B, first: b)

aPersonA = aPersonB

aPersonA now refers to Person(name:B, first: b)

1
তবে যদি aPersonসেটটার থাকে তবে আপনি সঠিকভাবে এর বৈশিষ্ট্যগুলি সংশোধন করতে পারবেন? সুতরাং স্থাবর letকরে তোলে না Person
আকর্ষণ করুন

4
Unmutability? এটা অপ্রকাশ্য! অবশ্যই antiadvisable। আমার মনে হয় আপনি যে শব্দটির সন্ধান করছেন তা হতে পারে "অপরিবর্তনীয়তা" :-)
প্যাক্সিডিয়াব্লো

6

দ্য

সুইফ্ট প্রোগ্রামিং ল্যাঙ্গুয়েজ ডকুমেন্টেশনের কনস্ট্যান্ট এবং ভেরিয়েবল বিভাগ ঘোষণা করে নিম্নলিখিতগুলি নির্দিষ্ট করে:

আপনি লে কীওয়ার্ড সহ ধ্রুবক এবং ভেরিওয়ার্ড সহ ভেরিয়েবলগুলি ঘোষণা করেন।

এটি কীভাবে রেফারেন্স প্রকারের জন্য কাজ করে তা নিশ্চিত করুন Make মান প্রকারের বিপরীতে, কোনও রেফারেন্স ধরণের ধ্রুবক হিসাবে ঘোষিত হওয়ার পরেও অবজেক্টের অন্তর্নিহিত বৈশিষ্ট্যগুলি পরিবর্তিত হতে পারে। দেখুন ক্লাস রেফারেন্স ধরনের হয় উদাহরণস্বরূপ যেখানে তারা ফ্রেমরেট সম্পত্তি পরিবর্তন এ নথিপত্রের অধ্যায়, এবং চেহারা।


5

খুব সহজ:

  • let ধ্রুবক।
  • var গতিশীল।

বিবরণ বিট:

letএকটি ধ্রুবক তৈরি করে। (মত একটি সাজানোরNSString )। একবার সেট হয়ে গেলে আপনি এর মান পরিবর্তন করতে পারবেন না। আপনি এখনও এটিকে অন্য জিনিসগুলিতে যুক্ত করতে পারেন এবং যদিও নতুন ভেরিয়েবল তৈরি করতে পারেন।

varএকটি পরিবর্তনশীল তৈরি করে। (পছন্দ মতো NSMutableString) যাতে আপনি এটির মান পরিবর্তন করতে পারেন। তবে এর বেশ কয়েকবার উত্তর দেওয়া হয়েছে।


4

letএকটি "ধ্রুবক" সংজ্ঞায়িত করে। এর মানটি একবারে এবং একবারে সেট করা থাকে, যদিও আপনি এটি ঘোষণা করার সময় অগত্যা নয়। উদাহরণস্বরূপ, আপনি letকোনও শ্রেণীর কোনও সম্পত্তি সংজ্ঞায়িত করতে ব্যবহার করেন যা প্রাথমিককরণের সময় সেট করতে হবে:

class Person {

    let firstName: String
    let lastName: String

    init(first: String, last: String) {
         firstName = first
         lastName = last
         super.init()
    }
}

এই সেটআপের সাথে, উদাহরণ তৈরি করার জন্য (যেমন) কল করার পরে firstNameবা তার lastNameপরে নির্ধারণ করা অবৈধ ।Person(first:"Malcolm", last:"Reynolds")Person

সংকলনের সময় আপনাকে অবশ্যই সমস্ত ভেরিয়েবল ( letবা var) এর জন্য কোনও প্রকারের সংজ্ঞা দিতে হবে এবং ভেরিয়েবল সেট করার চেষ্টা করা কোনও কোড কেবল সেই ধরণের (বা একটি সাব টাইপ) ব্যবহার করতে পারে। আপনি রান সময়ে একটি মান নির্ধারণ করতে পারেন , তবে এর ধরণটি অবশ্যই সংকলন সময়ে জানা উচিত।


4

let- constant
var-variable

[কনস্ট্যান্ট বনাম ভেরিয়েবল]
[স্ট্রাক্ট বনাম ক্লাস]

অফিসিয়াল ডক ডকসস.ইউ.ইউইফ.আর্ট.আর্গ জানিয়েছে

এর মান constantএকবার সেট হয়ে গেলে তা পরিবর্তন করা যায় না, যেখানে variableভবিষ্যতে একটি আলাদা মানতে সেট করা যায়।

এই পরিভাষা আসলে একটি পুনর্নির্দিষ্ট প্রক্রিয়া বর্ণনা করে

পরিবর্তনীয় - পরিবর্তনযোগ্য - সৃষ্টির পরে অবজেক্টের অবস্থা পরিবর্তন করা যেতে পারে

মান এবং রেফারেন্সের প্রকার [সম্পর্কে]

মান (কাঠামো, এনাম)

সুইফট এর structতাদের পরিবর্তনশীলতা অবস্থা পরিবর্তন করতে পারেন:

let+ + struct= immutable= মান ধ্রুবক
এটা করতে পারেন না করা পুনরায় নির্ধারণ বা পরিবর্তন

var+ struct= mutable
এটি পুনরায় নিয়োগ দেওয়া যেতে পারে বা পরিবর্তন

রেফারেন্সের ধরণ (শ্রেণি)

সুইফট এর classesহয়mutable একটি Priory

let+ class= ঠিকানার স্থির
এটি এটিকে পুনরায় নিয়োগ দেওয়া যায় না এবং এটি পরিবর্তনও করা যায়

var+ + class
এটা হতে পারে পুনরায় নির্ধারণ বা পরিবর্তন

//STRUCT
  //let + struct
let letStructA = StructA()

    //change FAIL
letStructA.a = 5 //Compile ERROR: Cannot assign to property: 'structALet' is a 'let' constant

    //reassign FAIL
letStructA = StructA() // Compile ERROR: Cannot assign to value: 'structALet' is a 'let' constant

  //var + struct
var varStructA = StructA()

    //change OK
varStructA.a = 5

    //reassign OK
varStructA = StructA()

//CLASS
  //let + class
let letClassA = ClassA()

    //change OK
letClassA.a = 5

    //reassign FAIL
letClassA = ClassA() // Compile ERROR: Cannot assign to value: 'classALet' is a 'let' constant

  //var + class
var varClassA = ClassA()

    //change OK
varClassA.a = 5

    //reassign OK
varClassA = ClassA()

mutating - স্ট্রাক্টের কার্যগুলিকে মিউটেশন করা

আপনি কোনও কাঠামোর পদ্ধতি হিসাবে চিহ্নিত করতে পারেনmutating

  1. ইঙ্গিত করে যে এই ফাংশনটি অভ্যন্তরীণ সম্পত্তি মান পরিবর্তন করে।
  2. শুধুমাত্র var+ এ ব্যবহার করা যেতে পারেstruct
public struct StructA {
    public var a = 0

    public init() {}

    //func foo() { //Compile ERROR: Cannot assign to property: 'self' is immutable
    mutating func foo() {
        a = 5
    }
}

inout কোনও ফাংশনের অভ্যন্তরে কাঠামো পরিবর্তন করা

আপনি কোনও ফাংশনের প্যারামিটারটিকে চিহ্নিত করতে পারেন (যা স্ট্রাক্ট) inout

যেহেতু structএকটি মান প্রকার, এটি মান দ্বারা পাস করা হয় ফলাফল ফাংশনটি অনুলিপি অর্জন করবে। আপনি যদি কোনও প্যারামিটার structহিসাবে চিহ্নিত করেন inoutতবে এর অর্থ এই যে প্যারামিটারটি হয়ে যায় varএবং আপনি একটি স্থিতি পরিবর্তন করতে সক্ষম হন structএবং এই পরিবর্তনগুলি ফাংশনের সুযোগের বাইরে দৃশ্যমান হবে will

//func foo(myStruct: StructA) { //Compile ERROR: line - myStruct.a = 10: Cannot assign to property: 's' is a 'let' constant
func foo(myStruct: inout StructA) {
    myStruct.a = 10
}

//using
//foo(myStruct: &letStructA) // Compile EROOR: Cannot pass immutable value as inout argument: 'letStructA' is a 'let' constant
foo(myStruct: &varStructA)

letআপনি যখন পারেন ব্যবহার করুন । varআপনার অবশ্যই যখন ব্যবহার করুন ।


2

আরও একটি পার্থক্য, যা আমি ধ্রুবক জন্য অন্যান্য ভাষায় সম্মুখীন হয়েছি হল: করতে পারেন ধ্রুবক ইনিশিয়ালাইজ না (দিন) পরবর্তী সময়ের জন্য , আপনি ধ্রুবক ঘোষণা করতে চলেছেন যেমন ইনিশিয়ালাইজ করা উচিত নয়।

এই ক্ষেত্রে :

let constantValue : Int // Compile error - let declarations require an initialiser expression

পরিবর্তনশীল

var variableValue : Int // No issues 

2

letএকটি ধ্রুবক মান ঘোষণা করতে ব্যবহৃত হয় - আপনি প্রাথমিক মান দেওয়ার পরে এটি পরিবর্তন করবেন না।
varএকটি ভেরিয়েবল মান ঘোষণা করতে ব্যবহৃত হয় - আপনি এটির মানটি আপনার ইচ্ছামত পরিবর্তন করতে পারেন।


1

দিন ধ্রুবক এবং নির্ধারণ করতে ব্যবহৃত হয় Var ভেরিয়েবল সংজ্ঞায়িত করতে। আপনি var ব্যবহার করে স্ট্রিংটি সংজ্ঞায়িত করেনতারপরে নির্দিষ্ট স্ট্রিংটি পরিবর্তনশীলকে নির্দিষ্ট করে (বা রূপান্তরিত) করা যেতে পারে (যার ক্ষেত্রে এটি সংশোধন করা যায়), এবং আপনি যদি স্ট্রিংটি সংজ্ঞায়িত করেন তবে এটি একটি ধ্রুবক (যে ক্ষেত্রে এটি হতে পারে না) পরিবর্তিত):

var variableString = "Apple"
variableString += " and Banana"
// variableString is now "Apple and Banana"

let constantString = "Apple"
constantString += " and another Banana"
// this reports a compile-time error - a constant string cannot be modified

0

কীওয়ার্ড একটি ধ্রুবক সংজ্ঞায়িত করা যাক

let myNum = 7

সুতরাং myNum পরে পরিবর্তন করা যাবে না;

তবে ভার একটি সাধারণ পরিবর্তনশীলকে সংজ্ঞায়িত করে।

সংকলনের সময় ধ্রুবকের মানটি জানা দরকার না, তবে আপনাকে অবশ্যই এটির মান একবারে নির্ধারণ করতে হবে।

আপনি ইউনিকোড অক্ষর সহ ধ্রুবক এবং পরিবর্তনশীল নামের জন্য আপনার পছন্দ মতো প্রায় কোনও অক্ষর ব্যবহার করতে পারেন;

যেমন

var x = 7 // here x is instantiated with 7 
x = 99 // now x is 99 it means it has been changed.

তবে আমরা যদি তাহলে গ্রহণ করি ...

let x = 7 // here also x is instantiated with 7 
x = 99 // this will a compile time error

0

লুস-অলিভারের মতো, নুলডাটা এবং আরও কয়েকজন এখানে বলেছেন, পরিবর্তনীয় ডেটা সংজ্ঞায়িত letকরার সময় অপরিবর্তনীয় ডেটা varসংজ্ঞায়িত করে। কোন funcযে পরিবর্তনশীল যে চিহ্নিত করা হয় উপর বলা যেতে পারে mutatingযদি এটি একটি শুধুমাত্র বলা যেতে পারে varপরিবর্তনশীল (কম্পাইলার এরর নিক্ষেপ করা হবে)। এটাও প্রযোজ্য func's একটি ইন যে নিতে inoutপরিবর্তনশীল।

তবে, letএবং এর varঅর্থ হ'ল ভেরিয়েবলটি পুনরায় নিয়োগ দেওয়া যাবে না। এর দুটি অর্থ রয়েছে, উভয়ই একই রকম উদ্দেশ্য


0

আরম্ভের পরে var মান পরিবর্তন হতে পারে। তবে একবার মান প্রয়োগ করা যাক মানটি পরিবর্তন হয় না til

বর্ণের ক্ষেত্রে

  function variable() {
     var number = 5, number = 6;
     console.log(number); // return console value is 6
   }
   variable();

লেট ক্ষেত্রে

   function abc() {
      let number = 5, number = 6;
      console.log(number); // TypeError: redeclaration of let number
   }
   abc();

তবে একবার মান প্রয়োগ করা যাক মানটি পরিবর্তন হয় না in আমি এর সাথে একমত নই। আপনার মন্তব্য ইন্ট, ফ্লোটের মতো নন অবজেক্ট ভ্যালুতে ভাল। তবে একটি পরিবর্তনীয় অ্যারে এবং পরিবর্তনীয় স্ট্রিং দিয়ে চেষ্টা করুন, আপনি মানগুলি যুক্ত বা সংযোজন করে তাদের মানগুলি পরিবর্তন করতে পারেন। সঠিক হয় দিন বস্তু তার পয়েন্টার তাদের পয়েন্টার ঠিকানা সবসময় একই না না তুমি কেন reinitialise ত্রুটি পাচ্ছেন করা হবে পরিবর্তন হতে পারে না। তাই আপনি বলতে পারেন এলইটি const পয়েন্টার যা ভবিষ্যতে পরিবর্তন হতে পারে না তোলে।
দি টাইগার

সুইফটে কোনও কনসোল.লগ নেই। ওপির ট্যাগটি দেখুন
ড্যান

0

মূলশব্দ ভেরিয়েবলটি একটি ভেরিয়েবল সংজ্ঞায়িত করতে ব্যবহৃত হয় যার মান আপনি সহজেই এইভাবে পরিবর্তন করতে পারেন:

var no1 = 1 // declaring the variable 
no1 = 2 // changing the value since it is defined as a variable not a constant

যাইহোক, লেট কীওয়ার্ডটি কেবলমাত্র একটি ধ্রুবক ব্যবহৃত হয় যখন আপনি আবার ধ্রুবকের মান পরিবর্তন করতে চান না। আপনি যদি ধ্রুবকের মান পরিবর্তন করার চেষ্টা করেন তবে আপনি একটি ত্রুটি পাবেন:

let no2 = 5 // declaring no2 as a constant
no2 = 8 // this will give an error as you cannot change the value of a constant 

0

আসুন একটি পরিবর্তনযোগ্য পরিবর্তনশীল, এর অর্থ এটি পরিবর্তন করা যায় না, অন্যান্য ভাষাগুলি এটিকে একটি ধ্রুবক বলে। সি ++ এ আপনি এটি কনস্ট হিসাবে সংজ্ঞায়িত করতে পারেন।

ভার একটি পরিবর্তনীয় পরিবর্তনশীল, যার অর্থ এটি পরিবর্তন করা যেতে পারে। সি ++ (২০১১ সংস্করণ আপডেট) এ এটি অটো ব্যবহারের সমান, যদিও সুইফ্ট ব্যবহারে আরও নমনীয়তার অনুমতি দেয়। এটি নতুনদের কাছে আরও সুপরিচিত ভেরিয়েবল টাইপ।


0

যাক একটি ধ্রুবক মান, যাতে এটি কখনই পরিবর্তন করা যায় না।

let number = 5  
number = 6               //This will not compile.

ভার একটি পরিবর্তনশীল, এবং পরিবর্তন করতে পারে (তবে এটির পরে অন্য কোনও ডেটা ধরণের সংজ্ঞায়িত করা হয় না))

var number = 5
number = 6               //This will compile.

আপনি যদি ভেরিয়েবলটিকে অন্য একটি ডেটা টাইপে পরিবর্তন করার চেষ্টা করেন তবে এটি কার্যকর হবে না

var number = 5
number = "Hello World"   //This will not compile.

1
আসুন দিতে হবে দিন
দি টাইগার

0

মূল পার্থক্য হ'ল varভেরিয়েবলের মান পরিবর্তন letহতে পারে এবং পারে না। আপনি যদি কোনও ব্যবহারকারীর ইনপুট ডেটা রাখতে চান তবে আপনি ব্যবহার করতে পারেন varযাতে মান পরিবর্তন করা যায় এবং letডেটাটাইপ ভেরিয়েবল ব্যবহার করা যায় যাতে মান পরিবর্তন করা যায় না।

var str      = "dog"  // str value is "dog"
str          = "cat"  // str value is now "cat"

let strAnimal = "dog" // strAnimal value is "dog"
strAnimal     = "cat" // Error !

লেট এবং ভার ছোট অক্ষরে (লেট এবং ভার) ব্যবহার করে কাজ করছে না।
অভিষেক

0

ভেরির ক্ষেত্রে একটি মান পুনরায় নিয়োগ দেওয়া যেতে পারে

 //Variables
 var age = 42
 println(age) //Will print 42
 age = 90
 println(age) //Will Print 90

** newAge ধ্রুবকটি একটি নতুন মানতে পুনরায় সাইন করা যাবে না। এটি করার চেষ্টা করা একটি সংকলন সময় ত্রুটি প্রদান করবে **

//Constants
let newAge = 92 //Declaring a constant using let
println(newAge) //Will print 92.

0

"একটি পরিবর্তনশীল করতে একটি ধ্রুবক এবং ভার তৈরি করতে লেট ব্যবহার করুন"

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/us/jEUH0.l


0

Var পরিবর্তনশীল যা অনেকবার আপনি চান এবং যখনই যেমন পরিবর্তন করা হয়েছে পারে

উদাহরণ স্বরূপ

var changeit:Int=1
changeit=2
 //changeit has changed to 2 

দিন ধ্রুব থাকে যা পরিবর্তন করা যায় না

উদাহরণ স্বরূপ

let changeit:Int=1
changeit=2
 //Error becuase constant cannot be changed

0

যদিও আপনি ইতিমধ্যে লেট এবং ভের মধ্যে অনেক পার্থক্য পেয়েছেন তবে একটি প্রধান পার্থক্য:

let is compiled fast in comparison to var.

-1

প্রত্যেকেই এর উত্তরের উত্তর দিয়েছেন তবে কী কী তা আপনি মনে রাখতে পারেন এমন একটি উপায় এখানে

আসুন সর্বদা "লেট" এর একই চিন্তাভাবনাটি বলব যেহেতু এই কাজটি একবারের জন্য এবং সর্বদা "ভার" ভেরিয়েবলের জন্য সর্বদা পরিবর্তিত হতে পারে তাই তাদের ভেরিয়েবল বলা হচ্ছে


-1

varদ্রুত পরিবর্তনগুলিতে ভেরিয়েবল তৈরি করার একমাত্র উপায়। varজাভাস্ক্রিপ্টের মতো ব্যাখ্যা করা ভাষার ক্ষেত্রে যেমন গতিশীল পরিবর্তনশীল হয় তার অর্থ হয় না। উদাহরণ স্বরূপ,

var name = "Bob"

এই ক্ষেত্রে, ভেরিয়েবলের প্রকারটি nameঅনুমান করা হয় যে নামটি প্রকারের String, আমরা প্রকারের স্পষ্টভাবে সংজ্ঞা দিয়ে ভেরিয়েবলগুলিও তৈরি করতে পারি, উদাহরণস্বরূপ

var age:Int = 20

এখন যদি আপনি বয়সকে স্ট্রিং বরাদ্দ করেন তবে সংকলক ত্রুটি দেয়।

letধ্রুবক ঘোষণা করতে ব্যবহৃত হয়। উদাহরণ স্বরূপ

let city = "Kathmandu"

অথবা আমরাও করতে পারি,

let city:String = "Kathmandu"

আপনি যদি শহরের মান পরিবর্তন করার চেষ্টা করেন তবে এটি সংকলন সময়ে ত্রুটি দেয়।


-1

লেটটি ধ্রুবকগুলির জন্য ব্যবহৃত হয় যা পরিবর্তিত হতে পারে না যখন var একটি সাধারণ পরিবর্তনশীল

উদাহরণ:

যাক নাম = "বব" নামের মতো কিছু = "জিম" একটি ধ্রুবক পরিবর্তন করা যায় না বলে একটি ত্রুটি ফেলবে।


-1

সিম্পল ডিফারেন্স

লেট = (পরিবর্তন করা যায় না)

var = (যে কোনও সময় আপডেট)


1
এটি বিদ্যমান প্রচুর উত্তরের কেবল একটি পুনরাবৃত্তি বলে মনে হয়।
পাং

-1

সূত্র: https://thenucleargeeks.com/2019/04/10/swift-let-vs-var/

আপনি যখন ভেরিয়েবলের সাথে ভেরিয়েবল ঘোষণা করেন, তার অর্থ এটি আপডেট করা যায়, এটি পরিবর্তনশীল, এর মানটি সংশোধন করা যায়।

আপনি যখন লেট দিয়ে কোনও ভেরিয়েবল ঘোষণা করেন, এর অর্থ এটি আপডেট করা যাবে না, এটি অ পরিবর্তনশীল, এর মানটি পরিবর্তন করা যায় না।

var a = 1 
print (a) // output 1
a = 2
print (a) // output 2

let b = 4
print (b) // output 4
b = 5 // error "Cannot assign to value: 'b' is a 'let' constant"

আসুন উপরের উদাহরণটি বুঝতে পারি: আমরা একটি নতুন ভেরিয়েবল "a" তৈরি করেছি যার সাথে "var কীওয়ার্ড" রয়েছে এবং "1" মান নির্ধারণ করা হয়েছে। আমি যখন "a" প্রিন্ট করি তখন আমি 1 হিসাবে আউটপুট পাই Then সংকলক ত্রুটি না পেয়ে আমি এটি করতে পারি কারণ আমি এটিকে ভের হিসাবে ঘোষণা করেছিলাম।

দ্বিতীয় দৃশ্যে আমি একটি নতুন ভেরিয়েবল "বি" তৈরি করলাম "লেট কীওয়ার্ড" দিয়ে এবং "4" মান নির্ধারণ করেছি। আমি যখন "b" মুদ্রণ করি তখন আউটপুট হিসাবে 4 পেয়েছিলাম। তারপরে আমি 5 থেকে "লেট বি" বরাদ্দ দেওয়ার চেষ্টা করি অর্থাৎ আমি "লেট" ভেরিয়েবলটি সংশোধন করার চেষ্টা করছি এবং সময় সংকলনটি সংকলন পেয়েছি "মানকে নির্ধারণ করা যায় না: 'বি' একটি 'লেট' ধ্রুবক"।


-3

যদিও বর্তমানে আমি ম্যানুয়ালটি এখনও পড়ছি, তবে আমি মনে করি এটি সি / সি ++ constপয়েন্টারের খুব কাছাকাছি । অন্য কথায়, এর মধ্যে পার্থক্য ভালো কিছু char const*এবং char*। সংকলক এছাড়াও সামগ্রী পুনর্নির্ধারণ (পয়েন্টার) নয়, সামগ্রী আপডেট করতে অস্বীকার করেছে।

উদাহরণস্বরূপ, আসুন আমরা আপনার স্ট্রাক্টটি বলি। খেয়াল রাখবেন যে এটি কোনও কাঠামো, কোনও শ্রেণি নয়। আফাইক, ক্লাসগুলির অপরিবর্তনীয় রাষ্ট্রের ধারণা নেই।

import Foundation


struct
AAA
{
    var inner_value1    =   111

    mutating func
    mutatingMethod1()
    {
        inner_value1    =   222
    }
}


let aaa1    =   AAA()
aaa1.mutatingMethod1()      // compile error
aaa1.inner_value1 = 444     // compile error

var aaa2    =   AAA()
aaa2.mutatingMethod1()      // OK
aaa2.inner_value1 = 444     // OK

স্ট্রাক্টগুলি ডিফল্টরূপে অপরিবর্তনীয়, আপনার সাথে কোনও মিউটর পদ্ধতি চিহ্নিত করতে হবে mutating। এবং নামটি aaa1স্থির থাকার কারণে আপনি এটিতে কোনও মিউটর পদ্ধতিতে কল করতে পারবেন না। আমরা সি / সি ++ পয়েন্টারে ঠিক এটি প্রত্যাশা করেছি।

আমি বিশ্বাস করি এটি এক ধরণের কনস্ট-নির্ভুলতার স্টাফকে সমর্থন করার একটি প্রক্রিয়া ।


-3

চলমান কীওয়ার্ড এবং ভেরিয়েডের সাথে ভেরিয়েবলের সাথে স্থির ঘোষণা করুন।

let maximumNumberOfLoginAttempts = 10 var currentLoginAttempt = 0   
let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0

একক লাইনে একাধিক ধ্রুবক বা একাধিক ভেরিয়েবলগুলি কমা দ্বারা আলাদা করে ঘোষণা করুন:

var x = 0.0, y = 0.0, z = 0.0

মুদ্রণ কনস্ট্যান্ট এবং চলক

আপনি প্রিন্টলান ফাংশন সহ একটি ধ্রুবক বা পরিবর্তনশীল এর বর্তমান মান মুদ্রণ করতে পারেন:

println(friendlyWelcome)

একটি দীর্ঘ স্ট্রিংয়ের মধ্যে স্থানধারক হিসাবে ধ্রুবক বা ভেরিয়েবলের নাম অন্তর্ভুক্ত করতে সুইফ্ট স্ট্রিং ইন্টারপোলেশন ব্যবহার করে

নামটি প্রথম বন্ধনীতে মুড়ে রাখুন এবং খোলার প্রথম বন্ধনীর আগে ব্যাকস্ল্যাশ দিয়ে এড়িয়ে চলুন:

println("The current value of friendlyWelcome is \(friendlyWelcome)")

তথ্যসূত্র: http://iosswift.com.au/?p=17


-4

এটি একটি ভাল উত্তর আশা করি এটি সাহায্য করতে পারে :) এখানে চিত্র বর্ণনা লিখুন


4
এটি আসলে ভুল। letএর অর্থ এই নয় যে অবজেক্টটি অপরিবর্তনীয়, এর অর্থ পয়েন্টারটি অপরিবর্তনীয়। ওবজে-সি-তে সমতুল্য কার্যকারিতা পেতে আপনাকে ব্যবহার করতে হবে NSObject *const myObject = someobject;- এই জাতীয় অবজেক্টের বৈশিষ্ট্যগুলি সংশোধন করা যেতে পারে, তবে পয়েন্টারটিকে myObjectঅন্য কোনও বস্তুতে নির্দেশ করতে সংশোধন করা যায় না।
স্যালটিনাটস

1
সম্পূর্ণ ভুল উত্তর। আপনি কি একটি লেট অ্যারে দিয়ে চেষ্টা করেছেন : এনএসমিটেবলআরাই = এনএস মিটেবলআরে () ?? আপনি এতে / থেকে অবজেক্টগুলিকে যুক্ত করতে এবং মুছে ফেলতে পারেন। দিন তোলে const pointerযা ভবিষ্যতে পরিবর্তন হতে পারে না কিন্তু এর মান হতে পারে। আপনি এটি পুনরায় পুনর্নির্মাণ করতে পারবেন না তবে এটি আপনার ইচ্ছা মতো ব্যবহার করতে পারেন।
দি টাইগার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.