[]

matlab (java, c++ vs) programlama

programda bir foksiyon cagirildi, return ile veri dönüsü olmadi ama.

simdi o programda bir baska fonksiyon daha cagirmak istiyorum, ama bu sefer daha önce cagirilmis olandaki degiskenleri kullanmak istiyorum. onlara nasil ulasirim?

mesela

levrek(sukadartuttum, gecenaybukadarsattim) dedim, levrek icerisinde fiyat=[1,2,3,4,5] diye bir matris olustu.

sonra

balikkaclira(mevsimlerdenne) diye fonksiyon cagirdim, burda fiyatin üzerinde bazi etkenler koyacagim, kar yagdiysa artacak, levregin sezonuysa düsecek vesaire. ama fiyati sifirdan tekrar hesaplatmak istemiyorum. nasil cagiririm?

workspace ya da global degiskenlerde cikmiyor fonksiyon calistiktan sonra fiyat. nasil yapiliyor?

java ve c++ ekleme nedenim temelde benzesiyor olmalari. c bilgim yetmedi. örnegimin garabetligi icin de özür dilerim, orjinali cok daha komplike olacakti.

edit:cözüldü. olasi cözümler ile soruyu güncelleyecegim bir iki güne. ileride arayanlara yardimi dokunur umarim.

 
Tam çözemedim demek istediğini ama anlamaya ve yardımcı olmaya çalışayım.

balikkaclira'nın çıktısını nedir? Bu çıktıyı globale mi kaydetmek istiyorsun?
function [ciktilarblabla] = balikkaclira(mevsimlerdenne)'yı [baskabaskaciktilar] = levrek(sukadartuttum, gecenaybukadarsattim) 'in içinde çalıştırıyorsun sanırım. Fiyat hangi fonksiyonun değişkeni ve buna yapılan değişiklikler nereye kaydedilecek?
  • aychovsky  (02.05.16 19:45:08 ~ 19:45:29) 
Madem cözüldü sadece bu yapinin nasil calisitigini özetleyeyim, belki birinin ihtiyaci olur:

bir fonksiyon icinde hesaplama yaparsaniz ve o hesaplama sonucunda olusan veriyi bir yere kaydederseniz yani bir degiskene atarsaniz o degisken "local" degisken olur. java icin konusursam o fonksiyon bittigi anda "garbage collector" tarafindan isi bittigi gerekcesi ile temizlenir. yani fonksiyon icinde üretilen data sonsuza kadar tutulmaz. peki fonksiyon icinde üretilen bir dataya ihtiyacimiz olursa ne yapmamiz gerekir? iki temel secenek var
1. fonksiyondan datayi döndürmek ve global degiskene atamak
2. fonksiyon icinden direkt olarak global bir degiskene deger atamak.
(javada asla tam global yoktur ama bir üst erisim alani vardir, yine de global diyebiliriz)

Benim kisisel önerim yöntem 1 uygulanmali cünkü bir yazilimi mimari acidan ele alirsak bir fonksiyon sadece bir output olusturmali yani sadece bir atomic görevi olmali. birden fazla datayi degistiren bir fonksiyon yazilimin karmasasini arttirir, ilerki dönemlerde bircok soruna neden olur.

her bir fonksiyonun, methodun bir "scope" yani etki alani vardir. degiskenler o "scope" icinde yasarlar ve bittigine ölürler(ya da öldürülürler). bu nedenle daha fazla alanda kullanilacak degiskenler/datalar bir üst belki de en üst "scope" icine atilip kullanilirlar. bu mantik matlab, c++ veya java farketmez hepsinde benzerdir, sadece kücük nüans farklari vardir.

peki programlama dilleri bunu niye yapiyor?
- mimari acidan amac bir datanin her yerden erisilir olmasi onu kimin degistirdiginin, su anda senin fonksiyonun onu kullanirken baska bir fonksiyonun o anda onu degistirip degistirmesini önlemek icin önemli. örnegin bir x degiskeni icine bakiyorsun ve degeri 2. sonra x ile x i topluyorsun bir de bakiyorsun deger 6 olmus. neden oldu, cükü sen baktiktan sonra toplayincaya kadar gecen mili saniye icinde baska bir fonksiyon onu 3 olarak degistirdi. tam bir karmasa.
- ikinci önemli neden ise bu degiskenlerin hafizada yer kapliyor olmasi. program calistigi sürede yasayan ve silinmeyen her degisken kullanilmayacak olsalar bile yer kaplayacaklardir. bunlar programi yavaslatir, kaynaklari tüketir. bir programi kullanirken bir süre sonra "cok yavasladi bu, bir kapatip acalim" dememiz aslinda programcinin gereksiz yere global degisken olusturmasi, gelistiricinin mimari hatasi sonucu iyi temizlenmeyen (bunu temizlik isini javada garbage collector otomatik yapar) degikenlerin gereksiz kaynak tüketmesi nedeniyle oluyor.
  • emrahday  (03.05.16 11:40:20 ~ 11:41:00) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.