يشبه الرمز اسم المتغير ولكنه مسبوقًا بنقطتين. أمثلة -: الإجراء ،: line\_items. ليس عليك أن تعلن عن رمز مسبق وأن تكون مضمونة لتكون فريدة من نوعها. ليس هناك حاجة لتعيين نوع من القيمة لرمز - يعتني روبي بذلك بالنسبة لك. يضمن Ruby أيضًا أنه بغض النظر عن مكان ظهوره في برنامجك ، سيكون له رمز معين نفس القيمة.
بدلاً من ذلك ، يمكنك اعتبار القولون يعني "الشيء المسمى" ، لذلك: id هو "الاسم المسمى id". يمكنك أيضًا التفكير في: id على أنه يعني اسم معرف المتغير ، والمعرف العادي على أنه يعني قيمة المتغير.
على سبيل المثال: إذا كان Fred ثابتًا في سياق واحد ، وطريقة في أخرى ، وفئة في الثلث ، فسيكون الرمز: Fred هو نفس الكائن في جميع السياقات الثلاثة.
إذا كان الرمز مجرد سلسلة غير قابلة للتغيير ، فلماذا تستخدمها ، ولماذا يوجد تمييز خاص في روبي؟
## الرموز هي غير قابل للتغيير
أولاً ، أحد الأسباب الرئيسية هو ، كما ذكرت أعلاه ، أن الرموز غير قابلة للتغيير. يمكن أن تظهر أخطاء غير متوقعة في التطبيق الخاص بك عندما يمكن تغيير قيمة. إذا كنت بحاجة إلى التأكد من عدم تغيير قيمة الكائن أبدًا ، يكون استخدام كائن غير قابل للتغيير أكثر أمانًا.
ومع ذلك ، مع ذلك ، يمكن إجراء سلسلة غير قابلة للتغيير في Ruby عن طريق استدعاء طريقة `freeze` :
`name = "Philip"
=> "Philip"
name.freeze
=> "Philip"
name << "Jim"
RuntimeError: can't modify frozen String
`
كما ترى في المثال أعلاه ، بمجرد استدعاء طريقة التجميد على مثيل سلسلة ، لن يمكنك تعديله بعد الآن.
فلماذا يمكنك استخدام الرموز بدلاً من السلاسل؟
#### الرموز أفضل للأداء
السبب الثاني وراء استخدامك لـ Symbol على إحدى سلاسل String في مواقف معينة هو أن الرموز أفضل بكثير من حيث الأداء.