Pereiti prie turinio

Ruby programavimas.


Rekomenduojami pranešimai

Laba, pradėjau mokintis 'Ruby' programavimo ,kalbos ir norėčiau patarimų : Ką ji gali , kokiem darbam atlikti galima naudoti šitą klabą ar gal šeip turit kokių patarimų.

 

Kolkas praėjau tik 3 pamokas ir moku: Susipažinti su vartotoju t.y naudoti

gets.chomp

, ir esu pasidaręs mokslo tikslams toki mini žaidimą konsolėje, tai tesiog turi atspėti raidę . jeigu kam įdomu tai kodas :

puts "Mano dvieju pamoku darbas" #irasas, pradzioje.

print "Tavo Vardas:" #pirmas atsakymo laukelis
vartotojas = gets.chomp #cia isgauna input (irasyta) zodi
vartotojas.capitalize! #pirmoji raide bus didzioji , kadangi isgaunam Varda

puts "Malonu susipazinti #{vartotojas}" # atsakymas jau gavus ivesta varda

print "Atspek raide, ir laimek zaidima (atspejus pasirodys atsakymas TAIP,LAIMEJAI)" #uzduotis ka reik padaryti
varto_rasymas = gets.chomp #cia isgauna input zodi vel

if varto_rasymas.include? "h" #jeigu irasytame zodyje yra raide h
varto_rasymas.gsub(/h/ , "TAIP,LAIMEJAI") #paraso , kad laimejai
else #jeigu nera h
puts "Neatspejai , bandyk dar karta. Uzuomena Pries Gandras Po Jonas" #uzuomina kad neatspejai

end #baigiam reikala sita

 

norėčiau paklausti ką toliau mokintis kur gal kas patartumėt?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Neatspejai , bandyk dar karta. Uzuomena Pries Gandras Po Jonas

... e, f, g, h, i, j...

gal atvirkščiai: prieš Jonas, po Gandras? :D

 

Ir šiaip čia pasigirt norėjai, kad kažką tokio padarei? Perrašei visą kodą, tik pakeitei pavadinimus... Kai jau kažko nesuprasi, tada geriau rašyk.

Redagavo doncatas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nenorėjau pasigirti , norėjau , kad pamatytumėt ką moku ,tada lengviau bus nukreipti ką toliau mokintis.

 

PS. kodą rašiau savo rankomis savam notepadę, kodėl jūs iškarto puolat vos ne RIP'eris.. ar tavo manymu tokiam kaip aš neįmanoma parašyti paprasto kodo?

Redagavo MindCode
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Susigalvok projektą, kurį norėtum padaryti mokėdamas programuoti ir pirmyn. :) Darydamas tikrai daug patobulėsi

labai gera idėja, bet ar ji tinka ruby programavimui , dar gal galėtum atsakyti į mano klausimus pirmam pranešime apie ruby ką ji sugeba ir t.t?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

labai gera idėja, bet ar ji tinka ruby programavimui , dar gal galėtum atsakyti į mano klausimus pirmam pranešime apie ruby ką ji sugeba ir t.t?

 

Ruby turbūt labiausiai išgarsėjo dėl savo WEB framework'o - Ruby On Rails. Su jo pagalba yra kuriamos WEB aplikacijos.

 

Su Ruby gali parašyti bet ką, ką ir su kita programavimo kalba. Didelio skirtumo nesudaro. (Pavyzdžiui naudojant JRuby gali rašyti aplikacijas Android operacinei sistemai arba paprastiems telefonams kurie palaiko Java). Apple produktams gali naudoti MacRuby, .NET programavimui gali naudoti IronRuby. :)

 

Taip tinka ir Ruby, ir kitoms programavimo kalboms tas pats principas - susigalvoti idėją ir ją įgyvendinti. Tokiu būdu greitai įsisavinsi programavimo kalbos pagrindus. Iš savo patirties sakau. Neseniai pradėjau programuoti su Python ir bedarydamas žadintuvą, pramokau ne tik pagrindus, bet ir išmokau kaip veikia Threads

Redagavo FaitasS
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ruby turbūt labiausiai išgarsėjo dėl savo WEB framework'o - Ruby On Rails. Su jo pagalba yra kuriamos WEB aplikacijos.

 

Su Ruby gali parašyti bet ką, ką ir su kita programavimo kalba. Didelio skirtumo nesudaro. (Pavyzdžiui naudojant JRuby gali rašyti aplikacijas Android operacinei sistemai arba paprastiems telefonams kurie palaiko Java). Apple produktams gali naudoti MacRuby, .NET programavimui gali naudoti IronRuby. :)

Tikrai įdomu ,o gal ką pasiūlytum ką mokintis ir kokį projektą daryti kad reikalautu mano žinių programavime?

 

 

Taip tinka ir Ruby, ir kitoms programavimo kalboms tas pats principas - susigalvoti idėją ir ją įgyvendinti. Tokiu būdu greitai įsisavinsi programavimo kalbos pagrindus. Iš savo patirties sakau. Neseniai pradėjau programuoti su Python ir bedarydamas žadintuvą, pramokau ne tik pagrindus, bet ir išmokau kaip veikia Threads

 

tu čia darai sau kokį app'ą žadintuvą? , mano galvoje įdėju pilną , bet aš neturiu patirties , išprusimo ,kad jas įgivendinti.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tikrai įdomu ,o gal ką pasiūlytum ką mokintis ir kokį projektą daryti kad reikalautu mano žinių programavime?

 

Dabar Tavo žinios yra nulinės (nesupyk, dėl to tik Tavo motyvacija turėtų pakilti).

 

Gali pasižaisti su tekstu ir padaryti aplikaciją, kuri pakeičia paprastą tekstą į Morzės kodą. Kai padarysi, mestelk kodą čia, pažiūrėsim kaip padarei. :)

 

Taip, pats sau darau, tiesa, jau baigiau, liko optimizuoti ir pakeisti išvaizdą.

 

mano galvoje įdėju pilną , bet aš neturiu patirties , išprusimo ,kad jas įgivendinti.

 

Tai yra išmokstama. Principas toks: susigalvoji idėja ir pradedi rašyti programą, kas neaišku - Google.com

Redagavo FaitasS
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dar pasikartosiu: bet ką gali parašyti su programavimo kalba, kitos nebūtinai reikia. Kai jau gerai mokėsi Ruby, galėsi rinktis tarp kitų programavimo kalbų - dabar apseisi su viena. :)

 

Ačiū na turbut kol padarysiu ir ismoksiu praeis nemazai laiko rezultata i pm parašysiu.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tokiam dalykui tinka ruby programavimo kalba. Ar reikia kitos?

Nesuprantu tokių abejojimų. Paskaityk pats minimaliai apie Ruby ir, manau, atsakymas turėtų būti akivaizdus. Čia juk paprasčiausias vienų simbolių pakeitimas kitais – tą gali beveik bet kokia kalba. Rimtai, jau tau pasakė, kad galima daryti grafines aplikacijas, programuoti web'ui ir t.t. – tai žinoma, kad eis ir simbolių eilutėmis manipuliuoti.

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 1 metų...

Sveiki,

esu naujas tiek Rubyje tiek paciame programavime.

Ruby studijuoju savarankiskai teorija papildydamas google, stackoverflow.com ir pan.

 

Pusiau savarankiskai (ideja nuziurejau is interneto) sukodavau simple virtualaus banko sistemele. Pateikiu zemiau:

 

class Banking
 attr_reader :name, :balance, :time_creation, :date
 require 'date'

 def initialize (name, balance)
   @time_creation = "#{Time.now.hour}:#{Time.now.min}:#{Time.now.sec}"
   @date = Date.today
   @name = name
   @balance = balance
 end

 def display_user_info
   puts "Balance info:"
   puts "Account holder - #{@name.capitalize};"
   puts "Acount created - 1) date #{@date}; 2) time #{@time_creation};"
   puts "Balance - $#{@balance}."
 end

 def withdraw pin_provided, amount
   counter = 3
   @withdraw_amount = amount

   if pin_provided == pin
     if @balance >= amount
       @balance -= amount
       puts "Amount withdrawn - $#{amount}. Current balance - $#{@balance}."
     else
       insuficient_funds
     end
   else
     pin_error
     counter -= 1
     puts counter == 0 ? "No attempts left! Account blocked!" : "You have #{counter} more attempts left."
   end

   #redo if pin_provided != pin
 end

 def add_funds pin_provided, amount
   if pin_provided == pin
     @balance += amount
     puts "You have added $#{amount} to your account. Current balance - $#{@balance}."
   else
     pin_error
   end
 end

 def display_balance
   puts "Current balance - $#{@balance}"
 end

 private

 def pin
   @pin = 12345
 end

 def pin_error
   puts "Access denied: PIN provided is incorrect!"
 end


 def insuficient_funds
   puts "Insuficient funds. Your balance is $#{@balance}."
   puts "Your withdrawal - $#{@withdraw_amount} - exceeds your balance by $#{@balance - @withdraw_amount}."
 end
end

 

Kodo vykdymui sukuriau useri ir kelias komandas:

user001 = Banking.new "bankininkas", 50_000
user001.show_balance
user001.withdraw 12341, 345
user001.display_balance
user001.add_funds 12345, 100_000
user001.display_balance
user001.withdraw 12322, 1000
user001.withdraw 12343, 121

 

Vargas man yra

def withdraw

funkcijoje.

Noriu padaryti kad po kiekvieno nesekmingo PIN suvedimo kodas mazintu likusiu attemptu skaiciu, t.y.

2, 1, 0.

Tam sukuriau

counter'

i, kuris po kiekvieno blogo PIN mazintu

counter 

iki

0

. BET jis sumazina ji tik viena karta, antra karta iskvietus funkcija

def withdraw

counter'

ir vel startuoja nuo

3

, bet ne nuo

2

. Kaip istaisyti sita klaida? Is anksto dekoju.

 

P.S. bandziau iterpti

redo 

arba

retry 

- bet darau sintakses klaidas kazkur.

Redagavo Privatus Poilsis Trakuose
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pritariu nuomonei, uzsiduoti uzduoti ir kazka sukurti

 

Pats pries kokius ~20metu lietuviskoje knyguteje "QBasic'as jūsų kompiuteryje / B.Starkus. - Kaunas, 1994" radau Basic bioritmu pvz

tai mano epopeja tokia:

1) BASIC versijos patobulinimas

2) VisualBasic ver.

3) Perl versija su isorine fly programele

4) Perl GD

5) PHP GD

6) Python su nestantartine PNG biblioteka, plius GD font'u panaudojimo prapletimas https://code.google.com/p/appbiorhythm/source/browse/#svn%2Ftrunk

7) Komenski Logo - teko prisiminti geometrija ir isiversti be sinus funkcijos

Redagavo saknis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

 

counter yra funkcijos lokalus kintamasis, tad natūralu, kad jis sukuriamas iš naujo kiekvieną kartą kviečiant metodą.

 

Vietoj to padaryk instance variable @counter, jį nustatyk į 3 konstruktoriuje, o mažink tame metode :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

counter yra funkcijos lokalus kintamasis, tad natūralu, kad jis sukuriamas iš naujo kiekvieną kartą kviečiant metodą.

 

Vietoj to padaryk instance variable @counter, jį nustatyk į 3 konstruktoriuje, o mažink tame metode :)

Aciu. Supratau.

Jei methodo viduje sukuri instance var (@) ar class var (@@) jis vistiek bus resetinamas kiekviena karta paleidziant

def withdraw

- apmaudi klaida nors visa class scope jau esu perskaites ir ispabandes.

Sukuriau

@@counter = 3

konstruktoriuje, nes

@counter = 3

methodas

withdraw 

nemato

@counter

, taigi sukuriau class var

@@counter

. Viskas veikia. paleidziam koda komandas:

user001 = Banking.new "bankininkas", 50_000
user001.withdraw 12341, 345
user001.withdraw 12341, 345
user001.withdraw 12341, 345

su galutiniu rez:

Access denied: PIN provided is incorrect!
You have 2 more attempts left.
Access denied: PIN provided is incorrect!
You have 1 more attempts left.
Access denied: PIN provided is incorrect!
No attempts left! Account blocked!

 

P.S. detaliai paaiskinau su tikslu gal kas uzsikabins ir prisijungs su savo errorais is pradedanciu? Rubyistu

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Keletas pastebėjimų:

Jeigu skliausteliai nebūtini, dar nereiškia, kad jų neverta dėti – bent jau metodų apibrėžimuose (def) naudok skliaustelius:

def meth(arg)

def meth2(arg1, arg2).

 

Jeigu metodas neturi argumentų, () nerašyk. Kviesdamas metodus taip pat, geriau uždėk skliaustus – bent man, lengviau skaitosi, o ir chaininti metodus lengviau galėsi (nereikės prirašinėŧi skliaustų) – method1(arg1, arg2).method2(arg)

 

Class variable yra evil dalykas. Tavo atveju – nieko tokio, bet jei įsiveltų paveldėjimas, tai gali turėti problemų. Naudok class instance variables: http://stackoverflow.com/questions/3802540/difference-between-class-variables-and-class-instance-variables

 

Perskaityk kokį nors stiliaus gidą, keletą gali rasti čia: http://forum.vilniusrb.lt/index.php/15-kodo-tvarka-ir-geros-praktikos

 

 

Gal galėtum brūkštelti savo bandytą kodą, kai metodas nematė instance variable'o? Mestelk į kokį pastebin, jei nesunku – mažiau scrollinti šitoje temoje reikės. :-)

 

 

Red: šiek tiek pakrapščiau, tai lyg ir veikia: http://pastebin.com/yEayVSa7

Dar keletas pastebėjimų: kodėl visi accountai su vienodu pinu? Ne geriau padaryti, kad konstruktorius priimtų pin'ą ir saugotų jį instance variable? Kodo daug keisti nereikėtų – gali iš pin metodo returninti @pin (nors, aš geriau kodą pakeisčiau).

 

 

Taip pat, tavo duotame pavizdyje vietoje show_balance reikia kviesti display_balance. :-)

 

 

Sėkmės.

Redagavo kashiukas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Red: šiek tiek pakrapščiau, tai lyg ir veikia: http://pastebin.com/yEayVSa7

http://pastebin.com/yEayVSa7

eilutes - 5, 47, 48.

Pakeitus var is @@ i @ - jo nemato

def withdraw

36 eilute.

 

Dar keletas pastebėjimų: kodėl visi accountai su vienodu pinu? Ne geriau padaryti, kad konstruktorius priimtų pin'ą ir saugotų jį instance variable? Kodo daug keisti nereikėtų – gali iš pin metodo returninti @pin (nors, aš geriau kodą pakeisčiau).

vienodi PIN, nes nezinau, kaip kiekvieno naujo accounto @pin padaryti private, todel sudejau viena PIN ir uzdariau ji i private def pin

 

Taip pat, tavo duotame pavizdyje vietoje show_balance reikia kviesti display_balance. :-)

aciu uz pastabas.

 

Kita uzduotimi yra sukurti sitam class'ui metoda, kuris kurdamas new instance argumentus imtu per inputa. Bandziau daryti - uztamsinau tas vietas =begin =end komentarais, kol kas makalyne - neveikia kaip noriu.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki,

nauja uzduotis papildant Banking koda: kaip sukurto instance obj pavadinima sudeti i Array.

Sis papildymas reikalingas tam, kad sukurciau loop uz class ribu ir jo pagalba isrinkciau is Array inst obj ir jo pagrindu kviesciau metodus ivairiems veiksmams atlikti - "purvinas" dabartinis Banking kodas - http://pastebin.com/TMedvQBH

Bandymui sukuriau atskira koda - http://pastebin.com/pZscizDx #skaityti komentarus

 

Ikelti i Array gaunasi tik visa inst obj su visais jo atributais per

self

Pagal

class A

koda (http://pastebin.com/pZscizDx) matosi sukurti 3 instance obj -

user001, user002, user003

Masyve butent ir noriu matyti ikeltus tik juos

#=> [user001, user002, user003]

 

Taip pat nesigauna i Hash ikelti inst obj pavadinima kaip KEY ir jo visus arba atitinkamus atributis kaip KEY hash (Hashas Hashe).

 

Sprendimas vis sukasi apie self panaudojima su dar kazkokiu metodu kurio nezinau.

Galite kas nukreipti tinkama linkme?

Redagavo Privatus Poilsis Trakuose
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Class variable yra evil dalykas. Tavo atveju – nieko tokio, bet jei įsiveltų paveldėjimas, tai gali turėti problemų. Naudok class instance variables:

class A
 @@y = 1

 def self.set_y=(value)
   @@y = value
 end

 def self.get_y
   @@y
 end
end

class B < A
end

 

p A.get_y #=> 1

p B.get_y #=> 1

 

B.set_y = 4

p A.get_y #=> 4

p B.get_y #=> 4

 

Naudok class instance variables:

class A
 @x = 1

 def self.set_x=(value)
   @x = value
 end

 def self.get_x
   @x
 end
end

class B < A
end

 

p A.get_x #=> 1

p B.get_x #=> nil

 

B.set_x = 12

p A.get_x #=> 1

p B.get_x #=> 12

Redagavo Privatus Poilsis Trakuose
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Auto parkavimo bilietu automatas.

Kodas, kuri kuriau 0..100% pats, t.y. be ideju nusiziurejimo is neto.

 

http://pastebin.com/wCzdqabE

 

Komentai, kritika laukiama.

Taip pat svarbu isgirsti kaip ir kur galima buvo supaprastinti koda.

Redagavo Privatus Poilsis Trakuose
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Perskaičiau literatūros su pvz ir vistiek plaukioju - nesuprantu Ruby namespacing. Gal galite ūkiškai paaškinti, kas tai per dalykas.

 

Mano supratimu:

Atsimenu vaizdingą paaiškinimą - mano sesuo turi toki pati varda, kaip ir mano zmonos sesuo. Pokalbyje as jas skiriu pridedamas ju pavardes prie vardo - tai ir yra namespacing Rubyje.

Toliau - namespacing moduliuose: konstanta ar metodas su tokiu paciu pavadinimu saugomas skirtinguose moduliuose - t.y. module A ir module B turi po konstanta CONST. CONST modulyje A turi iskvietima A::CONST, B modulio konstanta - B::CONST - ar tai ir yra Ruby namespacing esme - suskirstyti metodus ir constantas po modulius (t.y. suskirstyti po "stalcius"), kad kodo vykdymo metu apsisaugoti nuo metodu, konstantu atsitiktinio perrasymo (override) ir name conflicto?

 

A::B::C.method_name - ar siame junginyje :: (double colon) nurodo nestinima? T.y. A (class/module) yra hierarchijos virsuje, toliau B modulis yra nestintas i A ir C, kuris jau kviecia method_name yra nestintas i B?

 

Aciu uz atsakymus is situs 2 klausimus.

Redagavo Privatus Poilsis Trakuose
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki,

ar teisingai?:

Ruby require - skirtas uzkrauti faila i koda, t.y. uzkrauti visa jo turini (ir methodus) toki kaip jis yra parasytas.

Ruby include - uzkrauna i koda Module#name turini: kintamieji, constantos, metodai. Uzkrauti metodai is Module#name galimi naudoti instance levelyje.

Extend - uzkrauna (praplecia) i koda Module#name turini: kintamieji, constantos, metodai. Uzkrauti metodai is Module#name galimi naudoti class levelyje.

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 3 savaičių...

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...