ruby - معنى - ما الفرق بين السلسلة والرمز في روبي؟




معنى كلمة عنوان بالانجليزي (7)

البيان

foo = "bar"

يخلق كائن جديد في الذاكرة. إذا کررنا البیان

foo = "bar"

نقوم بإنشاء كائن آخر

للحصول عليه بشكل أكثر وضوحا يرجى محاولة رمز أدناه على وحدة روبي

foo = "bar"
puts "string #{foo} with object id = #{foo.object_id}"
foo = "bar"
puts "string #{foo} with object id = #{foo.object_id}"

سوف تحصل على الانتاج مثل

string bar with object id = 70358547221180
string bar with object id = 70358548927060

مما يدل بوضوح على وجود نوعين مختلفين لنفس السلسلة. الآن إذا كنت تستخدم رمز فإنه سيتم إنشاء كائن واحد لكل رمز ذلك

foo = :bar
puts "symbol #{foo} with object id = #{foo.object_id}"
foo = :bar
puts "symbol #{foo} with object id = #{foo.object_id}"

عروض

symbol bar with object id = 7523228
symbol bar with object id = 7523228

مما يعني وجود عنصر واحد فقط: شريط

مزيد من الرموز غير قابل للتغيير ولا يمكنك استدعاء أي من أساليب سلسلة مثل #upcase, #split على الرموز.

مقارنة الرموز أسرع من مقارنة السلاسل.

ويمكن اعتبار الرموز على أنها سلاسل ثابتة / غير قابلة للتغيير التي تشكل مجموعة فريدة من نوعها التي يتم تحويلها بشكل فعال إلى مؤشرات الذاكرة على كومة الذاكرة المؤقتة. وهذا يعني مقارنة رمزين سريع لأنك مجرد مقارنة 2 عدد صحيح (مؤشرات الذاكرة.)

سلاسل قابلة للتغيير بحيث يمكن تغيير مؤشر الذاكرة لقيمتها على كومة الذاكرة المؤقتة بعد التعديل. وهذا يعني أن عمليات المقارنة أبطأ لأن التكرارات يمكن أن تكون موجودة مكافئة دنيا.

الاستخدامات

استخدم Symbol عندما تكون متأكدا من أن القيمة ستبقى ثابتة. مثال استخدام رموز لمفاتيح التجزئة، استخدام سلسلة عندما تريد تغيير القيمة أو تريد استخدام أسلوب سلسلة على ذلك.

ما هو الفرق بين السلسلة والرمز في روبي ومتى يجب استخدام واحد على الآخر؟


الرمز هو شيء تستخدمه لتمثيل الأسماء والسلاسل. كنت ترغب في استخدام رمز عندما كنت قد تحتاج إلى استخدام سلسلة عدة مرات هذا أسهل بكثير وأكثر إنتاجية.

ومجرد العثور على هذا عبر جوجل، والتي قد تقدم مزيدا من التفاصيل: هنا تذهب


رمز غير قابل للتغيير و سلسلة قابلة للتبديل.

عندما نقوم بأي عملية على سلسلة ثم إنشاء كائن جديد واتخاذ ميمري. كما لدينا أداء أكثر وأكثر العملية على سلسلة يعني نحن تستهلك المزيد والمزيد من الذاكرة.

الرمز هو الكائن الذي هو غير قابل للتغيير يعني إذا أجرينا أي عملية ثم إجراء تغييرات في الكائن الأصلي، فإنه لن إنشاء أي كائن، وهذا هو السبب في أنها أكثر ربحية.

لمزيد من المعلومات، يمكنك النقر هنا



هناك فرق إضافي بين String Symbol هو أن String لديها الكثير من الأساليب على ذلك لتلاعب سلسلة، في حين أن Symbol هو كائن النحيف نسبيا.

تحقق من وثائق فئة String وفئة Symbol .


هناك نوعان من الاختلافات الرئيسية بين السلسلة والرمز في روبي.

  1. سلسلة قابلة للتبديل والرمز ليس كذلك

    • لأن سلسلة قابلة للتبديل، يمكن أن يكون التغيير في مكان ما ويمكن أن يؤدي إلى النتيجة ليست صحيحة.

    • الرمز غير قابل للتغيير.

  2. السلسلة هي كائن لذلك يحتاج تخصيص الذاكرة

    يضع "أبك" .object_id # 70322858612020

    يضع "أبك" .object_id # 70322846847380

    يضع "أبك" .object_id # 70322846815460

من ناحية أخرى، سيمبول لك نفس الكائن:

puts :abc.object_id # 1147868

puts :abc.object_id # 1147868

puts :abc.object_id # 1147868

وبالتالي فإن سلسلة يستغرق المزيد من الوقت لاستخدام ومقارنة من رمز.

يمكنك قراءة المزيد هنا لفهم كامل:






symbols