รูปแบบที่ดีสำหรับการประกาศตัวแปรใน Fortran คืออะไร?

ฉันมีตัวแปรมากมายที่ฉันต้องประกาศ และโค้ดต้นฉบับมีลักษณะดังนี้:

    DIMENSION energy_t(20000),nrt(20000),npsh(1000),xx(1000),yy(1000),
    :step(1000),stepz(1000),r1(1000),rr(1000),ic(1000),diffrr(1000)

และฉันก็เขียนมันใหม่ดังนี้:

    DIMENSION
    :energy_t(20000),
    :nrt(20000),
    :npsh(1000),
    :step(1000),
    :r1(1000),
    :rr(1000),
    :ic(1000),
    :diffrr(1000)

นี่ถือเป็นสไตล์ที่ดีหรือมีวิธีที่ดีกว่านี้หรือไม่? โปรดทราบว่าวิธีที่สองอนุญาตให้แสดงความคิดเห็นกับตัวแปรแต่ละตัวได้ และฉันไม่จำเป็นต้องใช้การต่อบรรทัดหากฉันอาจเพิ่มตัวแปรอื่น

ป.ล. : มีฉันทามติ / พระคัมภีร์สไตล์ / แหล่งข้อมูลที่ได้รับการยอมรับอย่างกว้างขวางเกี่ยวกับรูปแบบการเขียนโปรแกรม Fortran และแนวปฏิบัติที่ดีหรือไม่?


person Jan M.    schedule 11.03.2014    source แหล่งที่มา


คำตอบ (2)


สไตล์ที่ดีไม่ใช่การใช้มิติข้อมูลตั้งแต่แรก โดยเฉพาะถ้าคุณใช้การพิมพ์โดยปริยาย ตัวแปรทุกตัวควรมีประเภทที่ประกาศไว้ และควรใส่มิติอาร์เรย์ไว้ตรงนั้นจะดีกว่า ใช้แอตทริบิวต์ที่มีการประกาศประเภท (Fortran 90+)

real :: energy_t(20000), nrt(20000)
real, dimension(1000) :: npsh, xx, yy, step, stepz, r1, rr, ic, diffrr

เก็บสายไว้ไม่ยาวเกินไป การประกาศขนาด (รูปร่าง) สามารถทำได้ทั้งสองวิธี

หากคุณต้องการ Fortran 77 คุณจะมีข้อจำกัดมากขึ้น แต่ก็ยังมีอยู่

real energy_t(20000), nrt(20000)
real npsh(1000), xx(1000), yy(1000), step(1000), stepz(1000)
real r1(1000), rr(1000), ic(1000), diffrr(1000)

อาจจะดีกว่า

พยายามจัดกลุ่มตัวแปรที่เกี่ยวข้องไว้ในบรรทัดเดียวและตัวแปรอื่นๆ อยู่ในบรรทัดที่ต่างกัน

ฉันขอแนะนำให้ประกาศค่าคงที่ parameter สำหรับขนาด 1,000 และ 20,000

person Vladimir F    schedule 11.03.2014
comment
จุด (อาจเล็กน้อยมาก): ระวังการพิมพ์โดยนัยที่แปลงจากคำสั่ง DIMENSION เป็นแอตทริบิวต์ DIMENSION - person francescalus; 11.03.2014
comment
เกิดอะไรขึ้นกับมิติ? ฉันต้องบอกว่าโปรแกรมใช้ IMPLICIT REAL*8 (a-h,o-z) หากมีความเกี่ยวข้องใดๆ - person Jan M.; 11.03.2014
comment
ไม่มีอะไรผิดปกติกับคำสั่งมิติข้อมูล แต่มีแนวโน้มที่จะเชื่อมโยงอย่างมากกับการพิมพ์โดยนัย (ที่ไม่ชอบ) นอกจากนี้ การมีประเภทและคุณลักษณะร่วมกันในการประกาศยังดีกว่าการต้องค้นหาโค้ดเพื่อทำความเข้าใจว่าตัวแปรหมายถึงอะไร [เป็นที่ยอมรับว่าใน F77 มีคุณสมบัติน้อยกว่ามาก แต่ก็ยัง...] - person francescalus; 11.03.2014
comment
@PatronBernard ฉันขอแนะนำไม่ให้พิมพ์โดยปริยาย - person Kyle Kanos; 11.03.2014
comment
ใช่ ฉันสงสัยว่ารหัสนี้เขียนเมื่อสิบปีที่แล้วโดยศาสตราจารย์ฟิสิกส์หัวแข็งบางคนที่เรียน F77 เมื่อสามสิบปีก่อน ทำไมเส้นต้องยาวพอสมควร? แรงจูงใจเบื้องหลังสิ่งนั้นคืออะไร? - person Jan M.; 11.03.2014
comment
ทำไมต้องต่อแถวยาวพอสมควร? เพื่อให้ง่ายต่อการอ่าน ในขณะที่มาตรฐาน Fortran ›= 90 อนุญาตให้มีอักขระได้ 132 ตัว ขึ้นอยู่กับเทอร์มินัล โปรแกรมแก้ไข แบบอักษร ฯลฯ ของคุณ ความยาวนั้นอาจอ่านยาก - person M. S. B.; 11.03.2014
comment
แต่นั่นเป็นเรื่องส่วนตัวใช่ไหม? ฉันรู้สึกว่าการประกาศตัวแปรเหล่านี้ในคอลัมน์ที่มีความต่อเนื่องของบรรทัดจะทำให้เห็นภาพรวมได้ดีขึ้น ช่วยให้แสดงความคิดเห็นกับตัวแปรแต่ละตัวได้ (เช่นในกรณีนี้ โค้ดนี้ไม่มีความคิดเห็นกับตัวแปรและฉันยังคงไม่รู้ว่าตัวแปรบางตัวทำอะไร) อีกครั้งหนึ่ง ควรเลือกชื่อตัวแปรอย่างระมัดระวังเช่นกัน ซึ่งฉันคิดว่าไม่ใช่กรณีของโค้ดนี้ เห็นได้ชัดว่ามีผู้สนใจสิ่งที่เขา/เธอทำอยู่ในขณะนั้นจริงๆ โดยไม่คำนึงถึงการใช้งานในอนาคต - person Jan M.; 11.03.2014
comment
ใช่ ถ้าตัวแปรแตกต่างกันจริงๆ และความคิดเห็นเดียวสำหรับตัวแปรเหล่านั้นยังไม่เพียงพอ ทำไมไม่ลองเขียนแค่บรรทัดเดียวล่ะ? น่าจะเป็นบรรทัดสั้นๆนะผมว่า.. - person Vladimir F; 11.03.2014
comment
แต่บรรทัดสั้น ๆ ไม่ใช่ปัญหาหากปรับปรุงให้อ่านง่ายขึ้น IMHO ฉันขอโทษถ้านี่เป็นข้อโต้แย้งที่ไม่มีจุดหมายเกี่ยวกับเรื่องที่ค่อนข้างเป็นส่วนตัว - person Jan M.; 11.03.2014
comment
ไม่ ไม่แน่นอน ยาวพอสมควรฉันหมายถึงไม่นานเกินไปอย่างแน่นอน - person Vladimir F; 11.03.2014

สไตล์ที่ดีควรคำนึงถึงมิติ

integer, parameter:: NODES_MAX = 1000, TIMES_MAX = 2000, COORD_MAX = 1000
real energy_t(TIMES_MAX), ..
real npsh(NODES_MAX), xx(COORD_MAX) ...

เพื่อให้สามารถกำหนดพารามิเตอร์ของลูปได้

do ii = 1, COORD_MAX
    xx(ii) = ...
    yy(ii) = ..
end do

และสามารถตรวจสอบข้อผิดพลาดได้

if (ii .gt. NODES_MAX) then
    print *, 'Please increase NODES_MAX oldvalue=', NODES_MAX, ' required=', ii
    pause
end if

นอกจากนี้ยังจะลดจำนวนการเปลี่ยนแปลงที่จำเป็นเมื่อเพิ่ม/ลดขนาดอีกด้วย สไตล์นี้สามารถนำไปใช้เมื่อ 30+ ปีที่แล้วเมื่อ F77 ออกมา

person cup    schedule 24.03.2014