1 Son düzenleyen, ugurlu2001 (20.08.2009 08:49:17)

Konu: .NET ve VFP Karşılaştırması.

Öncelikle tüm Fox4um 'a merhabalar.

Şimbi benim dediğim gibi: "VFP ile .NET in nesini karşılaştırıcaz? Ne gerek var? Biz zaten topyekün Foxpro 'cuyuz" dimi?

Daha iki gün öncesine kadar; yukarıdaki cümlenin aynısını hatta daha da fazlasını benden duyardınız? Tamam VFP yi kendi çapımda biliyorum; .NET 'i de. Bu arada; "biliyorum" demediğime lütfen dikkat edin! ( Kendi çapımda biliyorum. ).

Hep VFP nin hızını övüp duruyoruz. Hızlı uygulama geliştirme; verileri hızlı işleme; Veri tabanı ( yada yenilerin tabiriyle Table ) işlemeye yönelik düzinelerce komut, object oriented modelleme (C# ile kesinlikle kıyas bile götürmez. Çok çok gerilerde ama yinede bir veritabanı programcısının işini fazla fazla görecek kadar iyi.), Win API ve ActiveX kullanımı, Office entegrasyonu. vs. v.s...

Şimdi bunbları neden mi yazıyorum. Biraz sabır smile Gülümsediğime bakmayın, bu gülümseme biraz sinirdenkendime hayıflanmamdan. !!!

Geçen gün can sıkıntısı ile Çetin Üstad' a bir bulaşıyim dedim. Bulaşmak derken bir konuda biraz görüş almaktan; vakti varsa da bir kaç kelime sohbet etmek niyetindeydim. Sen misin bulaşan!!! :

-Üstad, biraz boş vaktin var mı?
- Evet olabilir?
- Bir şey sorucaktım da?
- ?. (  Sor işte be adam ne bekliyorsun!! smile  - Uğur 'un notu. )
- ..... konusunda ne düşünüyorsun biraz yardıma ihtiyacım var. ( Konu tabii ki VFP )

Ve arkadaşlar; ben şu anda bu soruyu sorduğuma öyle pişmanım ki. Bana kibarca verilen cevabı aynen aktarıyorum.

- Akşama biraz boş zamanın var mı? Teamviewer ile bağlanıp sana biraz bir şeyler göstereyim. Bence artık sorduğun türdeki işleri C# ile yapmalısın.
- İyi de Üstad C# için 40 fırın ekmek yemek lazım.
- Yok yok hiçde öyle diil, akşama sana 10 dk bir şeyler göstereyimde ne kadar kolay olduğunu gör.
- ( DUMUR ! Vay be. Ne kadar da güzel 10 dk da C# programcısı olucakmışım. Yaşasınn!! Ya ba daba duuu. ).
İyi de Üstad, ben 2 kış dönemi o .NET ve C# 'ın kursuna gittim. Hiç de öyle dediğin gibi görünmüyordu meret.
- Yok ya gözünde büyüttüğün kadar diil. Şimdi işim var. Gece 10 da görüşürüz.
( İşim var işte! Daha tutma beniii. Daha forumlarda cevap bekleyen bilmem kaç düzine soru var. Onlara sihirli değnekle dokunmam lazım. Milletinde işi gücü yok sorup duruyor.  Böylede olmaz ki canım. Şimdi biri sordumu cevap vermemek te olmaz dimi. Bu sihirli değneği boşuna tutmuyoruz elimizde. Hem yeni çıkan hangi teknolojiler var, kimsenin bilmediği yada aklına gelmemiş ne keşifler yapmak lazım. Ohooo Çoook işim var çok. Tutma beni Uğur. TUTMAAA - Uğur 'un hayal gücü smile -)
-Tamam Üstad, gece görüşürüz.

Ve gece 10 suları ....

Teamviewer ile hızlı bir bağlantı ve show başlıyor...
Şimdi heyecanla şov içeriğini merak eden arkadaşlara sadece önsöz vericem. Gerisi hep beraber Çetin Üstad 'ı ikna edip eski günlerdeki gibi Go2meeting görüşmesine kalıyor. Tabi ikna olursa smile

Ben artık VFP 'nin kolay ve hızlı kullanımı konusunda kesinlikle bir karşıt gruptayım. Yok artık öyle bir şey. Foxpro gerçekten bitmiş, üstelik okeye dönüyor. Hemde Çiftten okey.. Neden mi? Devam ediyorum... :

Çalışmaortamı: Windows 7 RC2 + Visual Studio 2010 ( .Net 4.0 )  + SQL Server 2008 Express Edt. + Linq Pad + AdvantureWorks (SQL Server 2008) + Northwind(SQL Server 2000)

Sözün kısası Konuyu biraz .NET ve Linq ya bırakalım.
---------------------------------------------------------

C#
// LinqPAD örneği: 

 
DirectoryInfo di = new DirectoryInfo(@"C:\Program Files\Microsoft Visual FoxPro 9");
 
string[] extensions = {".scx",".prg"};
 
var result =
from f in di.GetFiles("*.*",SearchOption.AllDirectories)
where extensions.Contains( f.Extension.ToLower() )
select new {f.FullName, f.CreationTime, f.Attributes, f.Length};
 
result.Dump("File System Query");
 
// RUN i

Ve karşınızda dosya listesi... Kod kısa, gayet okunaklı ve hepsinden öte, Intellisense inanılmaz iyi.

şimdi benzer işi yapan bir VFP kodu, tamam fazlası ve birazda eksiği var. Hazır kod arşivimden. Muhtemelen Çetin üstadın kodu. Emin değilim.

--------------------------------------------------------------
* Çetin Başöz Code :

Visual Fox Pro
? GetTree('c:\Program Files')

SELECT CAST(filepath as c(250)) as filepath FROM folderlist
 
Function GetTree
  Lparameters tcStartDir
  Create Cursor folderlist (filepath m)
  oFiler = Createobject('filer.fileutil')
  With oFiler
    .SearchPath = m.tcStartDir
    .Subfolder = .T.
    .FileExpression = '.'
    .Find(0)
    For ix=1 To .Files.Count
      With .Files(ix)
        If Bittest(.Attr,4)
          Insert Into folderlist ;
            (filepath) values (.Path)
        Endif
      Endwith
    Endfor
    Return .Files.Count
  Endwith

--------------------------------------------------------------
Yada başka bir versiyonu :

Visual Fox Pro
? GetTree('C:\Program Files\Microsoft Visual FoxPro 9','*.Prg',.T.)

locate
Brow
 
* Cetin Basoz code. Public.
 
Function GetTree
  Lparameters tcStartDir,tcSkeleton,tlSubfolders
  Create Cursor filelist ;
    (filepath m, filename c(50), ;
    filesize i, fattr c(8), createtime T, lastacc T, lastwrite T)
  oFiler = Createobject('filer.fileutil')
  With oFiler
    .SearchPath = tcStartDir
    .Subfolder = tlSubfolders
    .SortBy = 5
    .SortDirection = 1
    .FileExpression = tcSkeleton
    .Find(0)
    For ix=1 To .Files.Count
      With .Files(ix)
        If !(Bittest(.Attr,4) And .Name = '.')
          Insert Into filelist ;
            (filepath, filename, filesize, fattr, createtime, lastacc, lastwrite)  ;
            values ;
            (.Path, .Name, .Size, Attr2Char(.Attr), ;
            Num2Time(.Datetime), Num2Time(.LastAccessTime), Num2Time(.LastWriteTime))
        Endif
      Endwith
    Endfor
    Return .Files.Count
  Endwith
 
Function Num2Time
  Lparameters tnFloat
  Return Dtot({^1899/12/30}+Int(m.tnFloat))+86400*(m.tnFloat-Int(m.tnFloat))
 
Function Attr2Char
  Lparameters tnAttr
  Return ;
    IIF(Bittest(tnAttr,0),'RO','RW')+;
    IIF(Bittest(tnAttr,1),'H','_')+;
    IIF(Bittest(tnAttr,2),'S','_')+;
    IIF(Bittest(tnAttr,4),'D','_')+;
    IIF(Bittest(tnAttr,5),'A','_')+;
    IIF(Bittest(tnAttr,6),'E','_')+;
? GetTree('C:\Program Files\Microsoft Visual FoxPro 9','*.Prg',.T.)
locate
Brow
 
Function GetTree
  Lparameters tcStartDir,tcSkeleton,tlSubfolders
  Create Cursor filelist ;
    (filepath m, filename c(50), ;
    filesize i, fattr c(8), createtime T, lastacc T, lastwrite T)
  oFiler = Createobject('filer.fileutil')
  With oFiler
    .SearchPath = tcStartDir
    .Subfolder = tlSubfolders
    .SortBy = 5
    .SortDirection = 1
    .FileExpression = tcSkeleton
    .Find(0)
    For ix=1 To .Files.Count
      With .Files(ix)
        If !(Bittest(.Attr,4) And .Name = '.')
          Insert Into filelist ;
            (filepath, filename, filesize, fattr, createtime, lastacc, lastwrite)  ;
            values ;
            (.Path, .Name, .Size, Attr2Char(.Attr), ;
            Num2Time(.Datetime), Num2Time(.LastAccessTime), Num2Time(.LastWriteTime))
        Endif
      Endwith
    Endfor
    Return .Files.Count
  Endwith
 
Function Num2Time
  Lparameters tnFloat
  Return Dtot({^1899/12/30}+Int(m.tnFloat))+86400*(m.tnFloat-Int(m.tnFloat))
 
Function Attr2Char
  Lparameters tnAttr
  Return ;
    IIF(Bittest(tnAttr,0),'RO','RW')+;
    IIF(Bittest(tnAttr,1),'H','_')+;
    IIF(Bittest(tnAttr,2),'S','_')+;
    IIF(Bittest(tnAttr,4),'D','_')+;
    IIF(Bittest(tnAttr,5),'A','_')+;
    IIF(Bittest(tnAttr,6),'E','_')+;
    IIF(Bittest(tnAttr,7),'N','_')? GetTree('C:\Program Files\Microsoft Visual FoxPro 9','*.Prg',.T.)
locate
Brow
 
Function GetTree
  Lparameters tcStartDir,tcSkeleton,tlSubfolders
  Create Cursor filelist ;
    (filepath m, filename c(50), ;
    filesize i, fattr c(8), createtime T, lastacc T, lastwrite T)
  oFiler = Createobject('filer.fileutil')
  With oFiler
    .SearchPath = tcStartDir
    .Subfolder = tlSubfolders
    .SortBy = 5
    .SortDirection = 1
    .FileExpression = tcSkeleton
    .Find(0)
    For ix=1 To .Files.Count
      With .Files(ix)
        If !(Bittest(.Attr,4) And .Name = '.')
          Insert Into filelist ;
            (filepath, filename, filesize, fattr, createtime, lastacc, lastwrite)  ;
            values ;
            (.Path, .Name, .Size, Attr2Char(.Attr), ;
            Num2Time(.Datetime), Num2Time(.LastAccessTime), Num2Time(.LastWriteTime))
        Endif
      Endwith
    Endfor
    Return .Files.Count
  Endwith
 
Function Num2Time
  Lparameters tnFloat
  Return Dtot({^1899/12/30}+Int(m.tnFloat))+86400*(m.tnFloat-Int(m.tnFloat))
 
Function Attr2Char
  Lparameters tnAttr
  Return ;
    IIF(Bittest(tnAttr,0),'RO','RW')+;
    IIF(Bittest(tnAttr,1),'H','_')+;
    IIF(Bittest(tnAttr,2),'S','_')+;
    IIF(Bittest(tnAttr,4),'D','_')+;
    IIF(Bittest(tnAttr,5),'A','_')+;
    IIF(Bittest(tnAttr,6),'E','_')+;
    IIF(Bittest(tnAttr,7),'N','_')

-------------------------------------------------------------------------------------------

Başka bir linq sorgusu.

C#
from p in Products 

where p.OrderDetails.Any( od => od.Order.Customer.Country == "Argenti