“Elektronik tablo programlama” için bir kullanım görüyor musunuz? [kapalı]


11

Bir süre önce, programlama mantığını belirtmenin bir yolu olarak elektronik tabloları (Makro kodu değil hücreler ve formüller anlamına gelir) kullanma kavramına rastladım. Fikir:

  • temiz bir şekilde tanımlanmış bir hesaplama akışına sahip (bazen yordamsal veya nesne yönelimli programlama stilleri yerine elektronik tabloların "veri akışı" paradigmasına daha uygun) bir elektronik tablo oluşturun

  • giriş hücrelerini tanımlar

  • çıkış hücrelerini tanımlar

  • her şeyi tek başına çalıştırılabilir bir sınıfa (veya işlev, yordam, ...)

  • daha geniş bir yazılım projesinde normal kodda kullanın

  • zaman içinde korunmak için e-tabloyu kaynak kodu olarak kullanın

Fikir, bu tekniği modele gerçekten uyan problemler için kullanmak ve bunun doğal olarak iyi belgelenmiş ve bakımı kolay kodlara yol açmasıdır. Tekniği kullanmayı deneyimleyip deneyimlemediğinizi ve ne için olduğunu bilmekle ilgileniyorum. Aklıma gelen örnek bir uygulama, Excel sayfalarındaki aktüerler tarafından tipik olarak hazırlanmış, yaratılmış ve onaylanmış ve sadece daha sonra bakımı zor bazı programlama mantığında (acı verici bir süreç) kodlanmış sigorta tarife hesaplayıcılarıdır.


Bu soruyu kapatmaktan mutlu değilim. Tamam, "evet" veya "hayır" veya "str_replace ()" gibi bir cevap yoktur, ancak ilginç bir tartışma başlatır. İşte başlıyoruz: meta.programmers.stackexchange.com/questions/5652/…
ern0

@ ern0 tur sayfasını kontrol ettiniz mi ? "Programcılar tamamen cevap almakla ilgili . Bu bir tartışma forumu değil ..."
gnat

Yanıtlar:


5

Tam olarak sormuş olduğunuz "bir e-tablo oluşturma, kodu derleme" tarzı olmasa da, CLOS'a ait Cells veri akışı uzantısı benzer bir model kullanıyor: Veri akışlarını ve dönüşümlerini ifade eden formüller "kaynak malzeme" / "temsili / sınıf tasarımı için kayıt ". Sorduğunuz şeyi oluşturmanın alternatif bir yolunu düşünün.

Ve sadece eğlence için: elektronik tablo makrosu


1
OP'nin aklında olanın bu olmadığından eminim .
zzzzBov

4
@zzzzBov, OP'nin açıklamasına mükemmel bir şekilde uyuyor.
SK-logic

3

bazen yordamsal veya nesne yönelimli programlama stilleri yerine elektronik tabloların "veri akışı" paradigması için daha uygundur

Dürüst olmak gerekirse, bunun geçerli olduğu gerçek dünya hesaplarını neredeyse hiç düşünemiyorum. "Dataflow" programlama kolayca birçok modern programlama dili (.NET dünyasında LINQ ya da Perl ve Python'un liste işleme operatörlerine bakın) ve deneyimlerime göre bir gruptan çok daha sürdürülebilir kodla sonuçlanabilir bakımı zor hücre referanslarına sahip "elektronik tablo formülleri"

Öte yandan, ben ve meslektaşlarım, Excel'in giriş verilerini girmek / giriş maskeleri oluşturmak için çok hızlı bir şekilde kullanıcı dostu bir araç olarak kullanıldığı çok sayıda elektronik tablo tabanlı (MS-Excel, kesin olarak) uygulamalar oluşturduk veya biçimlendirilmiş çıktı veya her ikisini birden oluşturmak için. Tüm bu durumlarda, bu verilerin hesaplanması veya işlenmesi Excel formülleri tarafından değil, program kodu ile değil, Excel formülleri yeterince güçlü veya tamamen yanlış bir araç (ve inan bana, Excel formülleriyle neyin mümkün olup neyin mümkün olmadığı hakkında çok fazla bilgi).


2

Bu makaleyi okuduğumdan beri kavram hakkında düşünüp duruyorum. Bence kesinlikle bir faydası var.

Böyle bir şeyi optimize etmeyle ilgili bir şey, forma sayfası bellek alanına çok benzer. Ayrıca görüntüleme ve yazdırma alanına çok benzer (x, y'de olduğu gibi). Orada da çok faydaları.

Sürdürülebilirliği not ettiğinizde, bu benim için bir çok fikir açtı. Orada gerçekten ne derlemek bilmiyorum ve dil özellikleri, kütüphaneler vb .. oldukça acı olabilir. Yine de, bir yerlerde bir gelecek olabilir.

Gerçekten sadece elektronik tablolar, not defterleri ve muhasebe "yazılım" için VB komut dosyaları yazdım. Hiçbir zaman bir C ++ uygulamasından excel dosya arayüzü dışında herhangi bir e-tablo tabanlı yürütülebilir uygulamalar yaptı.


1

Evet, ancak ben daha çok "elektronik tablo programlama" yerine "elektronik tablo test" olarak düşünüyorum. Örneğin, son zamanlarda projemiz için çok sayıda veritabanı kaydı üzerinde bir hesaplama yapılmasını içeren bir özellik üzerinde çalışıyordum. Hesaplama nispeten basit ancak önemliydi ve bu yüzden özel test dikkatine ihtiyaç vardı. Ayrıca, kullandığımız formül, durumumuza uygulanabilir olması için az miktarda adaptasyon gerektiriyordu.

Birim testlerimi yazmak için elle bazı hesaplamalar yaptım, birlikte çalıştığım test cihazı uçtan uca testlerinde kullanmak için tarif ettiğiniz gibi bir elektronik tablo oluşturdu. Kaynak formülün adaptasyonu nedeniyle, karşılaştırılacak herhangi bir bağımsız test verimiz yoktu, bu nedenle elektronik tablo, kodun doğru olduğuna dair bize güven veren bir tür "çift girişli defter tutma" tarzı kontrolü sağladı.

Bu yüzden evet, bu tekniğin, ilgili hesaplamaların bir e-tabloda uygulanması kolay olduğu, ancak kodda uygulanması gereken durumlar için bir test verisi kaynağı olarak çok yararlı olduğunu düşünüyorum. Bununla birlikte, bu tür bir e-tablo "programlama mantığını belirtmek" için değil, sadece gerekli sonuç (lar) için kullanılmalıdır.


1

Elektronik çizelge "programlama" bir veri akışı programlama türüdür.

Onunla ilgili bir dil problemimiz var, buna "programlama" dememeliyiz, çünkü programlama dediğimizden çok daha az, ama kesinlikle bir programa veri girmekten daha fazlası.

Veri akışı programlama, uygulamanın bağımsız modüllerden oluşan bir ağ olduğu bir mimarlık ve disiplindir, birbirlerine mesajlar (veriler) gönderirler. Bu model, her sorun için geçerli değildir, yalnızca işleme ağından geçen ve çıkış verileri / akışları üreten bir kaynak veri veya akışın (veya daha fazlasının) olduğu sorunlara uygulanabilir. Aşağıdaki listeye bakın.

Veri akışı programlamanın birkaç türü vardır, bazılarına bakalım:

  • E-tablo: giriş numaraları formüllerle, ardından sonuç sayıları ve grafikler ile işlenir. Özel özellikler: giriş zamanı "tek adım" dır, giriş değeri (bileşen) değiştiğinde, işleme grafiğinin uygun kısmı yeniden çalışır ve çıktı üretir.
  • Unix borusu: kabuk birkaç program başlatır ve stdout-> stdin'i bağlar. Özel özellikler: sadece boru tarzı bağlantıya izin verilir, grafik tek bir kuyruktur.
  • Senkronize yürütme: bir çerçevenin veya örneğin belirli bir frekansta işlenmesini tetikleyen bir saat vardır. Her bileşen saat döngüsünde bir kez çalışır. Video ve ses işleme sistemlerinde örnekler, belirtilen bir kare / örnek hızında çalışırlar.
  • Asenkron yürütme: harici bir olay gerçekleşene kadar grafik boştadır. Daha sonra olayı işler, bazı çıktılar üretir (veya oluşturmaz) ve boş duruma geçer.

Sorunuza geri dönün: Bence evet, bir veri akışı uygulamasını bağımsız bir uygulama olarak yayınlamak iyi bir fikirdir. Ben zaten yaptım. İki kez .

Ben ve bir arkadaşım ev otomasyonu için bir prototip DF sistemi oluşturduk. Grafik düzenleyicimiz yok, bu yüzden uygulama kullanıcı tarafından düzenlenemez, bazı parametreler bir yapılandırma dosyasında saklanır, ancak başka bir şey yoktur. Yerel bir yürütülebilir dosyaya derlenen C ++ koduna (bileşen oluşturma ve mesaj tanımlarının bir listesi) "derlenen" bir DF komut dilimiz var. Modüller C ++ sınıflarıdır (diğer sınıflar, sadece sistemimiz hakkında bilgi almak için: Mesaj, Disathcer, Bileşen (soyut), Port (soyut), ConsumerPort, ProducerPort).

Ayrıca, bir DF sisteminin sağladığı avantajlardan şaşırdık : 2 dakika içinde seri sniffer uygulaması yaptık veya yerinde bir test programı yaptık , bu da lambaları birer birer yanıp sönüyor (dokümantasyon yoktu) donanım kimlikleri). MIDI ve joypad bileşenlerini sadece eğlence için yarattık, onunla hafif bir organ da yaptım (bkz. Http://homeaut.com/under_construction/ ).

E-tablolar için yalnızca bir zorluk görüyorum: her sayı ve formül (potansiyel olarak: her hücre) bir bileşen olduğundan, grafiğiniz son değildir. Basit sum () uygulamanıza bir satır eklediğinizde, veri akışı grafiğinin değiştirilmesi anlamına gelir. Yani, grafiği çalışma zamanında "yeniden programlamanız" gerekir, ya da biz buna "metaprogramming" demeniz gerekir. Excel'de bir makro işi yapar, ancak daha sonra veri akışının saflığını kaybederiz.

Çok kötü değil ama mükemmel değil bir çözümüm var. Bir elektronik tablo, PHP arka ucuna sahip bir AJAX uygulaması yaptım. Dikey eksen zaman (gün), çizgiler bileşenlerdir. Girdi (satır kullanıcı tarafından düzenlenebilir), dikey ortalama, yatay ortalama / toplam ve etki alanına özgü bazı istatistiksel hesaplamalar gibi bileşenler vardır. Bununla ilgili tek bir sorun var: bu "tek boyutlu". Sadece toplam ve avg ve istediğim sürece, yeni satırlar ekleyebilir ve şeyleri hesaplayan bileşeni oluşturabilirim. Ancak güçlü bir kısıtlama vardır: sütunlar her zaman günlerdir (günlük verileri sum / avg olarak görüntüleyen hafta ve ay "görünümler" yaptım, ancak yine de tek boyutlu). Gösteremiyorum, işbirlikçi ve 7/24 çalıştırmak için PHP arka uç görevi gerektiriyor, ana bilgisayar sağlayıcım tarafından desteklenmiyor.

Yani, modelim (en iyi şu şekilde tanımlanabilir: "yatay günler") başka tür problemlerle başa çıkamaz.

Bu sorunun nasıl çözüleceği hakkında bir fikrim var: sekmeler .

Excel'de takılı kaldığınızda ve başka bir tablo oluşturmanız gerektiğinde, aynı sekmede farklı bir alan kullanabilir veya başka bir sekme açabilirsiniz. Ayrıca, sekmeler arasında referans vermek rahatsız edici, ilk yöntemi tercih ederim. Bence, sekmeler örtüşmeyen pencereler gibi aynı ekranda görüntülenmelidir.

Her tablonun büyüyen ekseni olmalıdır: dikey, yatay veya sabit. Dikey büyüyen tablolar, tüm sütunların "aynı" formülüne sahip olduğu yatay bileşenlerin sütun bileşenlerine sahip olduğu, sabit boyutlu tabloların herhangi bir elektronik tabloya benzediği satır bileşenlerine (benim gün tabanlı e-tablom gibi) sahiptir.

Dolayısıyla, kullanıcı yeni bir satır / sütun eklediğinde, yeni satır / sütun aynı formüle sahip olacaktır.

Ayrıca, e-tablolarda, 1000 satırım varsa, aynı formülleri 1000 kez kopyalamam gereken şeyden nefret ediyorum. Bir hata kaynağı (bazı satırlarda formülün eski sürümünü tutmak), bellek kaybı (aynı formülü 1000x saklamak).

Belki yanılıyorum ve bu modelde konsept hataları var, ama umarım iyi bir düşündürücüdür.


E-tabloların "Satır: Sütun adresleme zararlı olarak kabul edildi" rantına ihtiyacı olup olmadığını merak ettim. Her şeyin adlandırılmış bir aralık olduğu ve formüllerin aralıklara uygulandığı ve hücrelerin giriş / görüntüleme olarak kullanıldığı yerlerde.
Sherwood Botsford

0

Benim düşüncem, hesaplamalar için mantığı tanımlamak için elektronik tabloyu kullanmak ve bunu yaparken elektronik tabloyu programlama dilini kolaylaştıracak şekilde kurmaya çalışmak olacaktır. Dostça demek gerekirse -> cellXY koordinatları yerine ad aralıklarını / referanslarını kullanmak ve formülleri daha küçük parçalara bölmek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.