منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
Recursive Deleagte - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184)
+--- الموضوع : Recursive Deleagte (/showthread.php?tid=21410)



Recursive Deleagte - silverlight - 16-08-17

هذا الموضوع يوضح هل يمكن أن يستدعي Delegate نفسه ليكرر الكود الموجود بداخله
هذ الموضوع ليس للمبتدئين

مقدمة سريعة:

Recursive هي كلمة تستخدم في الكمبيوتر بمعني أن الشئ يكرر نفسه او أن الشئ يستدعي نفسه
و Recursive هو أسلوب يستخدم في النظام الشجري غالبا

كأمثلة لذلك .......

TreeView
Control Collection
Directory

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

و اعتقد و بما أننا نستطيع كتابة روتينات تدعم عملية Recursive فإن المنطق يقول أن Delegates أيضا يمكنها أن تدعم Recursive
لأن Delegates ما هي إلا روتينات و دوال

الكود التالي يوضح الفكرة و يثبتها:

و الكود عبارة عن دالة للبحث عن الملفات تحت اي فهرس
و يتم من خلال الدالة استخدام استخدام Generic Action Delegate



PHP كود :
   Private Function SearchFiles(folderName As Stringpattern As Stringrecursive As BooleanignoreEx As Boolean) As List(Of String)
 
       Dim result As List(Of String) = New List(Of String)()
 
       Dim actionParams As Action(Of List(Of String), StringStringBooleanBoolean)
 
       actionParams Sub(list, foldersearchPatternrepeatSearchignore)
 
                          Try
 
                              Dim fileNames As String() = Nothing
                               
If searchPattern IsNot Nothing Then
                                   fileNames 
IO.Directory.GetFiles(foldersearchPattern)
 
                              Else
 
                                  fileNames IO.Directory.GetFiles(folder)
 
                              End If
 
                              list.AddRange(fileNames)
 
                          Catch ex As Exception
                               
If Not ignore Then
                                   
Throw
 
                              End If
 
                          End Try
 
                          If repeatSearch Then
                               Dim folders 
As String() = IO.Directory.GetDirectories(folder)
 
                              For As Integer 0 To folders.Length 1
                                   actionParams
(list, folders(i), searchPatternrepeatSearchignore)
 
                              Next
                           End 
If
 
                      End Sub

        actionParams
(resultfolderNamepatternrecursiveignoreEx)
 
       Return result
    End 
Function 


السطر هذا من الكود أعلاه يوضح كيف تم استدعاء Delegate لنفسه ليكرر عملية البحث تحب بقية الفهارس


PHP كود :
actionParams(list, folders(i), searchPatternrepeatSearchignore


إستخدام الدالة:

مثال البحث تحت فهرس المشروع
و الناتج نضعه في ليست بوكس


PHP كود :
   For Each f As String In Me.SearchFiles(".\", Nothing, False, False)
            Me.ListBox1.Items.Add(f)
        Next 



أرجو أن يكون الكود مفيدا للبعض منكم


RE: Recursive Deleagte - أبووسم - 11-11-17

احسنت

انت كلك بركة ، بارك الله فيك