الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لغة البرمجة سوبرنوفا Supernova و اتاحة امكانية ان يكون ال Array Index عبارة عن String ؟

بدأه PWCT Maker في 6 مايو 2010 · 13 رد · 1,088 مشاهدة · في الأخبار والنقاشات التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

رغم ان السوبرنوفا صممت لتكون لغة سهلة القراءة وشفيرتها المصدرية قريبة الى لغة الانسان الا ان تجربتى العملية حتى الان تشير الى ان ذلك ينجح فى نطاق محدد

واللغة تظل لغة برمجة بمعنى انها تحمل صفات اساسية ضرورية لكى تكون اللغة قابلة للاستخدام فى تطبيق الخوارزميات المختلفة

وهذه الصفات الاساسية مثل امكانية تمثيل هياكل البيانات Data Structure واستخدام جمل التحكم Control Structure ونمط البرمجة Programming Paradigm

فى الواقع وبشكل محايد ان من عيوب السوبرنوفا ضرورة وضع المتغيرات بين اقواس مربعة [variable name]

وضرورة وضع القيم بين اقواس ( value ) عند كتابة التعبيرات Expressions

ولكن لذلك فؤائد ايضا حيث يمكن ان يكون المتغير باى اسم نريده و يمكن وضع مسافات واستخدام ارقام إلخ

فى الحقيقة مااود التحدث عنه الان يمتد الى مابعد المتغيرات وبالتحديد اود التحدث عن امر يتعلق بالمصفوفات Arrays

حيث تشتمل المصفوفة على عدد من العناصر التى يتم الوصول اليها من خلال رقم Index يميز كل عنصر عن الاخر كما هو متعارف عليه

مااود الاشارة اليه هنا الى ان السوبرنوفا تتيح ان يتم تمييز العنصر عن الاخر داخل المصفوفة من خلال عبارة حرفية

بمعنى انه ممكن ان يكون الـ index ليس رقما وانما سلسلة حرفية

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

والسؤال الان ؟ هل هذه الامكانية ضرورية

الاجابة !! بالتاكيد فى البرمجة يمكن ان تنفى الضرورة لاى مفهوم وتقول ان تعليمات لغة الالة الاساسية هى فقط التى لايمكن الاستغناء عنها

ولكن الحياة فى تطور مستمر ومايتم من اضافات وتسهيلات فى لغات البرمجة هى مرونة بغرض تسهيل حياة المبرمجين وزيادة افق التعبير عن الافكار

ولهذا يمكن ان يكون السؤال بصورة اخرى - هل لهذه الامكانيات استخدامات عملية ؟

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

وهذا مثال عملى عبارة عن شفيرة مصدرية تم كتابتها بالسوبرنوفا باستخدام الـ Supernova Multi-platform edition 1.0.0-7 الذى يعمل على كل من MS-Window و Linux

فى هذا المثال يتم انشاء نافذة window تشتمل على ازرار تحمل الارقام من 1 الى 10 وعند الضغط على اى زر يظهر رقم الزر كنص

بمعنى اذا تم الضغط على الزر 3 مثلا فانه يظهر النص Three وفى حالة الضغط على الزر مرة اخرى يعود الرقم ليظهر لنا من جديد.



:Note:
"
1 - We are using [myarray] without declaration
2 - In [myarray]\[index] the ***index*** may be number or ****string****
3 - there are 10 buttons carry the same name (mybtn)
The result ??
"
[myarray]\(1). = (one). [myarray]\(one). = (1).
[myarray]\(2). = (two). [myarray]\(two). = (2).
[myarray]\(3). = (three). [myarray]\(three). = (3).
[myarray]\(4). = (four). [myarray]\(four). = (4).
[myarray]\(5). = (five). [myarray]\(five). = (5).
[myarray]\(6). = (six). [myarray]\(six). = (6).
[myarray]\(7). = (seven). [myarray]\(seven). = (7).
[myarray]\(8). = (eight). [myarray]\(eight). = (8).
[myarray]\(9). = (nine). [myarray]\(nine). = (9).
[myarray]\(10). = (ten). [myarray]\(ten). = (10).

I want window and window title is Test.

[x]. = (1). and do while [x] <= (10).
i want button and button caption from [x].
button name = mybtn. and button top from [x] x (30).
[x]. = [x] + (1).
End while

Procedure mybtn mouse click.
button caption to [btnnum]. and button caption from [myarray]\[btnnum].
End procedure

والتطبيق وقت التشغيل كالتالى

post-167987-12730963801274_thumb.jpg

واخيرا لدى بعض الاسئلة وبرجاء عدم التسرع فى الرد واعطاء الامر حقه من التامل حتى تعم الفائدة على الجميع باذن الله رب العالمين

طبعا هذا ليس اختبار وانما وسيلة لتبادل المعرفة والافكار

ويمكن ان تجاوب على كل الاسئلة او بعضها او تطرح رؤيتك بالاسلوب الذى يناسبك المهم هو التواصل المثمر فى اطار منظم

1 - هناك شيئا غريبا فى المثال ولكنى لم اصرح به هل لاحظته ؟ ما هو ؟

2 - هل تعرف لغة برمجة اخرى تدعم هذه الامكانية ؟ ان كانت الاجابة نعم - ما هى ؟

3 - هل تجد لهذه الامكانية فائدة بالنسبة لك ان كانت متاحة فى لغة البرمجة التى تستخدمها ؟

4 - هل ترحب بالافكار الجديدة فى لغات البرمجة - ام ترى ان اللغة يجب ان تكون تقليدية وتركز على التقنية اكثر مثل سرعة الاداء ودعم الانظمة المختلفة ؟

والله الموفق

#2
PWCT Maker كتب:

لم اشاهد حتى الان هذه الامكانية فى اى لغة برمجة اخرى ولكن ذلك لاينفى وجودها

عدد اللغات التى تدعمها اكبر بكثير من التى لا تدعمها (اتكلم من ناحيه Direct Syntax ,, اما من ناحيه الفكره فلا توجد لغه لا تحوى مكتبه لتوفير Hash Table )

5
#3
اقتباس

عدد اللغات التى تدعمها اكبر بكثير من التى لا تدعمها (اتكلم من ناحيه Direct Syntax ,, اما من ناحيه الفكره فلا توجد لغه لا تحوى مكتبه لتوفير Hash Table )

ممكن امثلة بالكود لزيادة التوضيح

تم تعديل هذه المشاركة بواسطة PWCT Maker في 6 مايو 2010 في 03:09

#4

فقط ابحث عن امثله بأى لغه لل Associative Arrays / Dictionaries / Hash Tables

#5
اقتباس

فقط ابحث عن امثله بأى لغه لل Associative Arrays / Dictionaries / Hash Tables

استخدام ال Associative Arrays / Dictionaries / Hash Tables طريقة غير مباشرة كما اشرت فى اول رد لك

ماابحث عنه هل هناك طريقة مباشرة بالكود فى لغات اخرى بهذه الصورة الصريحة

[myarray]\(one). = (1).

حيث myarray اسم المصفوفة و one هو الـ index للعنصر

اذا كانت هذه الامكانية متوفرة فى اكثر من لغة ارجو ان ترشدنى اليها.

بالمناسبة وجدت هذا الرابط لسؤال عن نفس الموضوع ولكن بلغة C

ممكن يوضح اكثر مااقصده وابحث عنه

http://stackoverflow.com/questions/416237/string-as-array-index-in-c

وهذا لسؤال عن نفس الموضوع ولكن بلغة VB.NET

http://bytes.com/topic/visual-basic-net/answers/362739-array-string-index

وتم الارشاد الى طرق غير مباشرة فى اللغة فماهى اللغات التى تدعم الطرق المباشرة للتعرف عليها

تم تعديل هذه المشاركة بواسطة PWCT Maker في 6 مايو 2010 في 03:25

#6

لقد وجدت دعم لهذه الامكانية فى الـ php بشكل صريح

http://php.net/manual/en/language.types.array.php

<?php
$arr = array("foo" => "bar", 12 => true);

echo $arr["foo"]; // bar
echo $arr[12];    // 1
?>

تم تعديل هذه المشاركة بواسطة PWCT Maker في 6 مايو 2010 في 03:54

1
#7

حتى الان لم اجدها بشكل صريح فى كل من C و VB.NET و Python و Ruby (اذا كان هناك طرق فى هذه اللغات ارجو الافادة)

وجارى البحث عن هذه الامكانية فى لغات اخرى خاصة انها متوفرة فى php بشكل صريح

#8

python:

$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> stuff = {'a': 10}
>>> stuff['a']
10
>>> stuff['b'] = "hello"
>>> stuff['b']
'hello'
>>> stuff
{'a': 10, 'b': 'hello'}
>>>

ruby ايضا لها نفس الخاصية، و انا شبه متأكد ان perl ايضا لديها نفس الخاصية

و جافا و لغات دوت.نت فيها classes توفر نفس المهمة و لكن ليس بنفس الطريقة المباشرة و السلسة في اللغات الديناميكية الاخرى

سي بلص بلص ايضا فيها شي مشابه عن طريق الـ STL و لكن استخدامه مزعج ..

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 6 مايو 2010 في 08:18

#9

فى الدوت نت يمكن استخدام Dictionary بنفس الطريقة

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#10

يا اخى من ناحيه ال Syntax كما ذكرت انا ,, موجوده فى التالى

PHP , Python , Ruby , Perl , Cpp , C#

وصدقنى ,, اى لغه جديده من دون ما ابحث ستكون تدعمها ,, واى لغه قديمه تدعم ال Operator overloading ستكون تدعمها .. هذه الميزه اصبحت كأنها standard مثلها مثل ال Simple Arrays

---

@حسن : استخدامهم فى ال Cpp/C# ليس مزعج ابدا ومباشر ,, ولكنه ليس ابدا بقوته فى اللغات ال dynamic (وان كان فى لغه مثل ال Cpp تستطيع *محاكاه* ما تفعله ال dynamic languages ,, مثلا ب hash of void ptr's )

---

اخونا الشايع كان سيحب هذا الموضوع :D

#11

من أول نسخة في #C يمكنك القيام بهذا

static void Main(string[] args)
        {
            var dictionary = new Hashtable { 
                                               {"Test", 1},
                                               {"NewTest", 2}
                                           };
            dictionary["NewItem"] = 3;
            Console.WriteLine(dictionary["Test"]);
        }

مصري في بلاد الفرنجة.

قريباً اقرأ مقالاتي على It-scoop

#12

اشكر جميع الاخوة

ASDen

hasan_aljudy

GHOST2010

motamayez

على المشاركة لاثراء الموضوع وانا اتمنى المزيد ان شاء الله لتغطية باقى نقاط الموضوع لتعم الفائدة باذن الله

اقتباس

يا اخى من ناحيه ال Syntax كما ذكرت انا ,, موجوده فى التالى

PHP , Python , Ruby , Perl , Cpp , C#

وصدقنى ,, اى لغه جديده من دون ما ابحث ستكون تدعمها ,, واى لغه قديمه تدعم ال Operator overloading ستكون تدعمها .. هذه الميزه اصبحت كأنها standard مثلها مثل ال Simple Arrays

انا اصدقك اخى الكريم - ومازلت ابحث ولكنى للاسف حتى الان وجدت الدعم بصورة صريحة فقط فى php حتى الان

واقصد بصورة صريحة ان ال php تتيح ان يكون الـ index عبارة عن String ومازال ماتتعامل معه اسمه Array وليس Dictionary او Hash Table.

#13

السلام عليكم ...

أخ PWCT Maker, كما قال الأخوة, الـ Associative Arrays لا تكتمل لغة برمجة يستخدمها بها أكثر من مبرمج. طبعاً لغات الـ Scripting مشهورة في هذا و لا داعي للسرد,

و لكن أقوى لغة تمتلك الـ Associative Arrays هي Lua. و السبب أنها مصممة بطريقة لكي تعمل كل شيء تتوقعه في اللغة. ببساطة الـ Array و الـ Dictionary و OOP concepts كلهم يمكن تطبيقهم باستخدام الأعجوبة المسماة Table في Lua الصغيرة :)

dummy = {1, 2, 4, 5, 6}
-- first array index starts at 1. Forget C for a moment!
for i = 1, 5 do
print(dummy)
end

dummy = {hello = "hello", world = "world"}
print(dummy["hello"])
print(dummy.world)
==============================
1
2
4
5
6
hello
world

تحياتي...

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 7 مايو 2010 في 04:07

#14

منور الموضوع اخى خالد

اقتباس

و لكن أقوى لغة تمتلك الـ Associative Arrays هي Lua.

امر يدفعنى للتعرف على هذه اللغة بشكل اكبر

dummy = {hello = "hello", world = "world"}

بصراحة علامة = تجعل الـ syntax روعة

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…